Ср мар 07, 2018 18:26:13
Пт апр 13, 2018 11:25:44
пока что мне не попадались проекты на AVR, где использование динамического распределения памяти давало бы какой-то заметный выигрыш.
Пт апр 13, 2018 11:40:55
это о каких AVRках вы говорите? и о каких конкретно проектах?philosoraptor писал(а):Собственно, старшие AVRки с 64 и больше кБ на борту уже позволяют ваять многоуровневые проекты, где и динамическая память, и классы заметно упростят задачу
Пт апр 13, 2018 14:31:17
Чт апр 19, 2018 21:52:09
Чт апр 19, 2018 22:51:58
- Код:
...
DDRA=0x01;
...
DDRB=0x01;
...
DDRC=0x01;
...
DDRD=0x01;
...
Пт апр 20, 2018 08:09:46
Сб май 05, 2018 13:42:38
Сб май 05, 2018 14:51:53
Сб май 05, 2018 16:22:13
Сб май 05, 2018 23:15:29
Вс май 06, 2018 07:23:01
if(keyReset)
{
__watchdog_reset (); // wdt
__disable_interrupt (); // cli
((void(*)(void))0)();
}
Пн май 07, 2018 19:52:48
Пн май 07, 2018 19:58:28
Пн май 07, 2018 20:23:07
Пн май 07, 2018 21:39:47
Вт май 08, 2018 10:48:12
#define FIELD_LENGTH 21
#define RAM_ADDRESS_LENGTH 2
#define FULL_FIELD_LENGTH (FIELD_LENGTH + RAM_ADDRESS_LENGTH)
#define MAX_FRAM_ADDRESS 32767U
#define FIELDS_NUM 1700U
#if (FIELDS_NUM * FIELD_LENGTH) > MAX_FRAM_ADDRESS
Number of fields are bigger than all fram space!!!!!!!
#endif
Вт май 08, 2018 10:50:58
Ярослав555 писал(а):Вопрос - есть ли грамотный способ бросать ошибку на уровне препроцессора?
#error Some error text
Вт май 08, 2018 10:53:49
Чт май 31, 2018 19:44:14
#define F_CPU 1200000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
unsigned int i=0;
void init_pwm()
{
TCCR0A |=(1<<WGM00); // Режим Phase correct PWM, в этом режиме счет идет до 255, а потом обратно до 0
TCCR0A |=(1<<COM0A1) | (0<<COM0A0); // 0 при 1-м равенстве регистров TCNT0 и OCROA и 1 при 2-м равенстве. (инвертированный ШИМ-сигнал)
TCCR0B |= (1<<CS01); // делитель 8
OCR0A =0;// регистр сравнения
}
//----------
void start_pwm()
{
while(i<95)
{
i=i+1;
OCR0A=i;
_delay_ms(25);
}
}
//----------
void stop_pwm()
{
TCCR0B= 0x00;
TCCR0A= 0x00;
}
//----------
ISR (INT0_vect) /* Объявление функции прерывания INT0 (порт PB1) */
{
init_pwm();
start_pwm();
asm("sei"); // глобальное разрешение прерываний//
}
//----------
int main(void)
{
DDRB|=(0<<PB1)|(1<<PB0)|(0<<PB4)|(1<<PB2);
PORTB=0b00010010;
MCUCR |= (0<<ISC01)|(0<<ISC00); // Низкий уровень на INT0 генерирует запрос прерывание//
GIMSK |= (1<<INT0); //Разрешение работы прерывания INT0 на выводе PB1//
GIFR= 0x00; // Флаг прерываний//
TIMSK0|=(1<<OCIE0B);
init_pwm();
asm("sei"); //глобальное разрешение прерываний//
while(1)
{
stop_pwm();
}
}