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

 
 
> IAR ARM C 4.20a - bug
Andy Mozzhevilov
сообщение May 25 2005, 03:28
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Потратил день времени на вылавливание следующего бага:

short mamont[128];
char slon1;
char slon2;

void mamont_init(void)
{
mamont[0] = 1;
slon1 = 0;
slon2 = 0;
}
\ mamont:
\ 00000000 DS8 256
2 char slon1;
\ slon1:
\ 00000100 DS8 1
3 char slon2;
\ slon2:
\ 00000101 DS8 1
4
...
5 void mamont_init(void)
6 {
7 mamont[0] = 1;
\ ??mamont_init:
\ 00000000 10009FE5 LDR R0,??mamont_init_1 ;; mamont
\ 00000004 0110A0E3 MOV R1,#+0x1
\ 00000008 B010C0E1 STRH R1,[R0, #+0]
8 slon1 = 0;
\ 0000000C 0010A0E3 MOV R1,#+0x0
\ 00000010 B010C0E1 STRH R1,[R0, #+256]
9 slon2 = 0;

slon1 и slon2 располагаются в памяти рядом. Компилятор, начиная с уровня оптимизации 6, считает, что раздельное обнуление этих переменных через STRB можно соптимизировать в одно обращение через STRH сразу для обеих переменных. При этом несколько забывая, что для STRH максимальный оффсет задается 8 битами и не может превышать 255. Баг проявляется, если нужно смещение 256,
если оффсет нужен больше, то там все нормально. В 4.11a этого бага нет.
regexp для поиска этого бага в lst файлах :
STRH R.+,\[R.+, #\+256\]


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post



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

 


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


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