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

 
 
> Глюк компилятора или это я чего-то не понимаю?
Ahha
сообщение Jun 16 2007, 08:03
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 3-11-05
Пользователь №: 10 422



Доброго времени суток всем.
Недавно столкнулся со странным поведением IAR for AVR 4.21A. Была написана смешанная С/АСМ программа для меги8. И тут столкнулся со странным поведением компилятора. После вот такого объявления переменных в Сишной части кода:

volatile int *TaskPointer=&TaskBuf[0];
void (*StartPoint)(void);

компилятор, обработав мой ассемблерный код:

lds XL , TaskPointer // мой текст в АСМ функции
lds XH , (TaskPointer+1) // мой текст в АСМ функции

после дизассемблирования выдал следующее (не работает):

00007E 91A0 0060 LDS R26,TaskPointer // это выдал дизассемблер
000082 91B0 0061 LDS R27,StartPoint // это выдал дизассемблер

То есть получилось, что или компилятор почему-то наложил 2-ух байтные переменные друг на друга одним байтом, или же указатель на переменную типа int в С для мега8 - это однобайтная переменная? Просто тот же текст прекрасно работает при компиляции под мега164Р.
После длительного поиска этой ошибки и ломания головы "как же такое могло случится" выдумал вот такой вариант этого куска программы, который решил проблему:

Сишное объявление переменных:

volatile int TaskPointer=(int)&TaskBuf[0];
void (*StartPoint)(void);

мой ассемблерный код:

lds XL , TaskPointer // мой текст в АСМ функции
lds XH , (TaskPointer+1) // мой текст в АСМ функции

результат дизассемблирования (работает нормально) :

00007E 91A0 0060 LDS R26,TaskPointer
000082 91B0 0061 LDS R27,0x61

Вобщем проблема уже решена, но хотелось бы разобратся в этом вопросе основательно, чтоб не наступать позже на теже грабли sad.gif
Go to the top of the page
 
+Quote Post



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

 


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


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