|
WinAVR криво собирает код... |
|
|
|
 |
Ответов
|
Apr 9 2009, 18:45
|
Участник

Группа: Участник
Сообщений: 55
Регистрация: 17-04-08
Пользователь №: 36 850

|
А я столкнулся с таким глюком: есть бутлоадер с эмуляцией STK500. Пишу через него - пишется нормально. Читаю - бывают ошибки, по адресу 0x4000 ошибок нет. Читаю ISP программатором - тех ошибок что показывал бутлоадер нет, по адресу 0x4000 лежит слово FFFF. Вроде помогла такая штука: Было: Код n_bytes = ((*(rx_pntr + 1) * 256) + *(rx_pntr + 2)); // number of databytes to read from flash Стало: Код *(((unsigned char *)&n_bytes) + 1) = *(rx_pntr + 1); *(((unsigned char *)&n_bytes) + 0) = *(rx_pntr + 2); Пробовал каждый раз на разных файлах, поэтому "вроде"...
|
|
|
|
|
Apr 9 2009, 19:32
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(Nick_Shl @ Apr 9 2009, 22:45)  А я столкнулся с таким глюком: Вот ЭТО написано человеком который поленился прочитать документацию: Код unsigned char readBits(unsigned int address) { asm volatile( "mov r31,r25 \n\t" "mov r30,r24 \n\t" "lds r24,%0 \n\t" "ori r24,0x09 \n\t" "sts %0,r24 \n\t" "lpm \n\t" "mov r24,r0 \n\t" : "=m" (SPMCSR) ); return address&0xFF; } Это баг не в комптляторе, это баг в коде. Анатолий.
Сообщение отредактировал aesok - Apr 9 2009, 19:54
|
|
|
|
|
Apr 9 2009, 20:38
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(aesok @ Apr 9 2009, 23:32)  Вот ЭТО написано человеком который поленился прочитать документацию: Код unsigned char readBits(unsigned int address) { asm volatile( "mov r31,r25 \n\t" "mov r30,r24 \n\t" "lds r24,%0 \n\t" "ori r24,0x09 \n\t" "sts %0,r24 \n\t" "lpm \n\t" "mov r24,r0 \n\t" : "=m" (SPMCSR) ); return address&0xFF; } Это баг не в комптляторе, это баг в коде. Если readBits вызывается как функция то проблем не возникнет, так как регистры r24, r25, r30 и r31 являются CALL_USED регистрами и в коде вызывающей функции предполагаться что они не содержат те значения, что были в них перед вызовом readBit. Когда же код этой функции инлайнится то могут возникнуть проблемы, так как регистры r24, r25, r30 и r31 искажаются в ассемблерной вставке, но компилятор об этом не предупрежден. Может генерироваться код записывающий информацию в эти регистры до ассемблерной вставки и использующий эту информацию после, не смотря на то что она искажена. Регистры r24, r25, r30 и r31 должны быть добавлены в clobber list. Анатолий.
|
|
|
|
Сообщений в этой теме
Alexey Belyaev WinAVR криво собирает код... Apr 4 2009, 16:03 SysRq Да вроде бы в этом куске кода GCC как обычно распи... Apr 4 2009, 20:03 Alexey Belyaev А можете дать результат сборки вашей? lss и hex... Apr 4 2009, 20:15 SysRq Цитата(Alexey Belyaev @ Apr 5 2009, 00:15... Apr 4 2009, 20:30 Alexey Belyaev Но всё же какой-то косяк...
К примеру вот такой ls... Apr 6 2009, 04:06 _Pasha Цитата(Alexey Belyaev @ Apr 6 2009, 07:06... Apr 6 2009, 05:44  Alexey Belyaev Цитата(_Pasha @ Apr 6 2009, 12:44) Вероят... Apr 6 2009, 05:56   _Pasha Цитата(Alexey Belyaev @ Apr 6 2009, 08:56... Apr 6 2009, 06:10    Alexey Belyaev Цитата(_Pasha @ Apr 6 2009, 13:10) Дык по... Apr 6 2009, 08:42 Сергей Борщ Цитата(Alexey Belyaev @ Apr 6 2009, 07:06... Apr 6 2009, 08:04 _Pasha Скачал. Собрал. Посмотрел. Описанного глюка не был... Apr 6 2009, 15:21 ReAl Цитата(_Pasha @ Apr 6 2009, 18:21) Неполе... Apr 6 2009, 15:46 Сергей Борщ Цитата(_Pasha @ Apr 6 2009, 18:21) Неполе... Apr 6 2009, 15:46 Alexey Belyaev Спасибо за разъяснения. Будем продолжать учиться. Apr 7 2009, 04:17 ARV Было бы просто замечательно, если бы кто-то из глу... Apr 7 2009, 05:25 _Pasha Я б выбрал для симуляции другой камень типа м168, ... Apr 7 2009, 06:06 Сергей Борщ Цитата(ARV @ Apr 7 2009, 08:25) Было бы п... Apr 7 2009, 06:52 ARV Уважаемый Сергей Борщ!
Я прочитал в документа... Apr 7 2009, 15:55  ReAl Цитата(ARV @ Apr 7 2009, 18:55) Я прочита... Apr 7 2009, 16:58   ARV Цитата(ReAl @ Apr 7 2009, 20:58) Вообще-т... Apr 7 2009, 17:48    ReAl Цитата(ARV @ Apr 7 2009, 20:48) если его ... Apr 7 2009, 19:35     _Pasha Цитата(ReAl @ Apr 7 2009, 22:35) *) при т... Apr 7 2009, 20:14 SysRq ARV, а Proteus версии у вас какой? Пробегавший мим... Apr 7 2009, 22:20 _Pasha Цитата(SysRq @ Apr 8 2009, 01:20) Т.е. ... Apr 8 2009, 04:34  SysRq Цитата(_Pasha @ Apr 8 2009, 08:34) О чем ... Apr 9 2009, 22:48 ARV протеус у меня точно такой же.
я активно применяю... Apr 8 2009, 04:23 ARV с -mno-wrap вообще странность какая-то... вот сейч... Apr 8 2009, 05:14 ReAl Цитата(ARV @ Apr 8 2009, 08:14) -relax ус... Apr 8 2009, 18:29 manul78 ... Народ !!! У меня еще прикольнее..... Apr 8 2009, 18:43 zltigo Цитата(manul78 @ Apr 8 2009, 21:43) Атмег... Apr 8 2009, 19:22 Petka Цитата(manul78 @ Apr 8 2009, 22:43) ... Н... Apr 8 2009, 19:23 Rst7 Цитатаабстрактному среднему писателю GCC лишь-бы н... Apr 8 2009, 20:12 manul78 Блин, у меня теперь еще интересней проблема !
... Apr 8 2009, 22:06 Сергей Борщ Цитата(manul78 @ Apr 9 2009, 01:06) C:... Apr 9 2009, 07:41  manul78 Цитата(Сергей Борщ @ Apr 9 2009, 11:41) П... Apr 9 2009, 16:56 ARV по поводу увеличения размера кода "свежими... Apr 9 2009, 05:57 _Pasha Цитата(ARV @ Apr 9 2009, 08:57) и вот в п... Apr 9 2009, 06:17 ReAl Цитата(ARV @ Apr 9 2009, 08:57) раньше, н... Apr 9 2009, 07:29 ARV "старый" - это какой-то старый я всегда... Apr 9 2009, 07:42 ARV и все-таки, почему никто из гуру не ответит на воп... Apr 9 2009, 09:57  Nick_Shl Цитата(aesok @ Apr 9 2009, 21:32) Вот ЭТО... Apr 9 2009, 20:06   Nick_Shl Цитата(aesok @ Apr 9 2009, 22:38) Если re... Apr 9 2009, 21:17 _Pasha Цитата(Nick_Shl @ Apr 9 2009, 21:45) А я ... Apr 10 2009, 00:03  Nick_Shl Цитата(_Pasha @ Apr 10 2009, 02:03) Заинт... Apr 10 2009, 04:23
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|