AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
18.12.2012, 18:33
|
#11
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Обнуление при старте.
Есть такая задачка. В корзину положили три яблока. Два потом вынули. Сколько яблок осталось?
Вывод: не забывайте обнулять переменные.
|
|
|
|
18.12.2012, 20:12
|
#12
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Обнуление при старте.
Сообщение от Easyrider83
|
Есть такая задачка. В корзину положили три яблока. Два потом вынули. Сколько яблок осталось?
Вывод: не забывайте обнулять переменные.
|
При таких выводах у тебя неполное условие - не ясен статус корзины до старта задачи...
__________________
Осторожно , злой кот
|
|
|
|
18.12.2012, 20:36
|
#13
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Обнуление при старте.
Сообщение от dosikus
|
При таких выводах у тебя неполное условие - не ясен статус корзины до старта задачи...
|
Правильный ответ - одно или больше.
|
|
|
|
18.12.2012, 20:51
|
#14
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,539
Сказал спасибо: 172
Сказали Спасибо 1,561 раз(а) в 811 сообщении(ях)
|
Re: Обнуление при старте.
Сообщение от Easyrider83
|
Правильный ответ - одно или больше.
|
А может корзина однобитная Правильный ответ: ХЗ.
|
|
|
|
18.12.2012, 21:22
|
#15
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Обнуление при старте.
Сообщение от Easyrider83
|
Вывод: не забывайте обнулять переменные.
|
На АСМе переменных нет
ТС ясно сказал, в чем и на чем пишет
Читайте внимательней
|
|
|
|
18.12.2012, 21:57
|
#16
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Обнуление при старте.
Сообщение от niXto
|
На АСМе переменных нет
ТС ясно сказал, в чем и на чем пишет
Читайте внимательней
|
Круто !!! Одни константы что ль?
|
|
|
|
18.12.2012, 22:18
|
#17
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Обнуление при старте.
Да это уважаемый niXto не в духе сегодня.
|
|
|
|
18.12.2012, 22:55
|
#18
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Обнуление при старте.
Не в плане полемики, а просто выскажу свою точку зрения.
Когда-то много работал на ASM. Как то не приходило в голову инициализировать всё подряд. Инициализировалось, только то что нужно. При переходе на си, сразу и не понял, зачем полная инициализация. Пытался с ней бороться, типа там __no_init разные и так далее. Сейчас оцениваю это по другому.
Я по прежнему необходимое инициализирую сам и всегда. Даже если инициализирую это нулём. Для того, чтобы было видно, что данная переменная требует инициализации. Но никаких принудительных отключений инициализации не делаю. Пусть инициализирует. Я думаю, что это сделано, для полной повторяемости поведения изделия после старта. И я пришёл к выводу, что это действительно удобно. К сожалению, все мы совершаем ошибки. Порой это ошибки доступа. Например вчера пару раз менял переменную, не мог принять решение как с ней работать. В конце решил работать с ней как float. А объявление поменять забыл и она осталась как int16. Инициализировалась переменная из датафлэши, соответственно, я указал её адрес и длину как sizeof(float). В результате портилась соседняя переменная. В некоторых ошибках доступа, инициализация сама по себе не поможет, но поведение будет идентичным, от старта к старту. А в противном случае будет произвольным. Удобнее искать ошибку при повторяемом поведении.
|
|
|
|
19.12.2012, 14:08
|
#19
|
Гражданин KAZUS.RU
Регистрация: 06.04.2010
Адрес: Санкт-Петербург - Волжский
Сообщений: 529
Сказал спасибо: 74
Сказали Спасибо 56 раз(а) в 45 сообщении(ях)
|
Re: Обнуление при старте.
По поводу инициализации регистров , заметил за GCC компилятором небольшой косячек. В самом начале программы пишу:
Код:
|
void my_init (void) __attribute__ ((naked)) \
__attribute__ ((section (".init1")));
void my_init (void) // Код выполняется сразу после Сброса !!!
{
if ((MCUSR&(1‹‹BORF))&&!(MCUSR&(1‹‹PORF)))
{// переход в спящий режим Power-Down
MCUCR=(1‹‹PUD)|(1‹‹SE)|(1‹‹SM1);
MCUSR=0;
asm ("sleep");//sleep();
} |
и получаю код:
Код:
|
0: 4d c0 rjmp .+154 ; 0x9c ‹my_init›
if ((MCUSR&(1‹‹BORF))&&!(MCUSR&(1‹‹PORF)))
9c: 04 b6 in r0, 0x34 ; 52
9e: 02 fe sbrs r0, 2
a0: 07 c0 rjmp .+14 ; 0xb0 ‹__stack+0x11›
a2: 04 b6 in r0, 0x34 ; 52
a4: 00 fc sbrc r0, 0
a6: 04 c0 rjmp .+8 ; 0xb0 ‹__stack+0x11›
{// переход в спящий режим Power-Down
MCUCR=(1‹‹PUD)|(1‹‹SE)|(1‹‹SM1);
a8: 80 e7 ldi r24, 0x70 ; 112
aa: 85 bf out 0x35, r24 ; 53
MCUSR=0;
ac: 14 be out 0x34, r1 ; 52
asm ("sleep");//sleep();
ae: 88 95 sleep |
Обратите внимание на команду out 0x34, r1 регистр r1 перед этим не обнуляется. Но это исправимо.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:05.
|
|