реклама на сайте
подробности

 
 
> WinAVR криво собирает код...
Spider
сообщение Apr 4 2009, 16:03
Сообщение #1


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



Писал себе и писал прошивку и вдруг в один прекрасный момент она начала собираться "криво" и откатить назад не получается. Всё пропало. Помогите, что я натворил то?
А именно кривость проявляется в следующем. если после сборки открыть и посмотреть листинг вокруг строки sei(); перед циклом майна. То там какие-то хаотические куски кода, на которых проц то делает переполнение то ребутится. В общем ведёт себя неадекватно, а в main.c этого кода нет. Точнее есть но не в этом месте.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Nick_Shl
сообщение Apr 9 2009, 18:45
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 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);
Пробовал каждый раз на разных файлах, поэтому "вроде"...
Прикрепленные файлы
Прикрепленный файл  BootLoader.zip ( 20.45 килобайт ) Кол-во скачиваний: 19
 
Go to the top of the page
 
+Quote Post
aesok
сообщение Apr 9 2009, 19:32
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
aesok
сообщение Apr 9 2009, 20:38
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 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.

Анатолий.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 19:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01429 секунд с 7
ELECTRONIX ©2004-2016