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

 
 
> IAR и объединения, Где-то хомут, по-моему ....
SasaVitebsk
сообщение May 19 2006, 00:01
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Что-то я по видимому не понял в данной теме.
Привожу выдержку из программы:

int16_t ix,iy;
union {
uint16_t w; // Ñìåùåíèå îòíîñèòåëüíî ñëîâà
uint8_t b; // Ñìåùåíèå îòíîñèòåëüíî áàéòà
} id,maska;

Данное объявление находится в п/п. Конструкцию union я применил с целью сэкономить память/время исполнения. Т.к. у меня работают две ветки. В одной работа со словом, а во второй - с байтом. Одновременно - никогда. При отладке обнаружил что переменной id присвоен адрес 0x1e9. Работа происходит с atmega2560 в которой ОЗУ начинается с 0х200. Сохранение выполняется операцией std y+5,r16. Т.е. компилятор предполагает что переменная id.b находится в RAM. Где я допустил ошибку?

Привожу выдержку из обращения

338: id.b = *(((uint8_t __flash *)symbol[tekfonts])+(Znak*Fonts[tekfonts][2])+iy);
+0000224E: D07D RCALL PC+0x007E Relative call subroutine
+0000224F: 0D20 ADD R18,R0 Add without carry
+00002250: 1D31 ADC R19,R1 Add with carry
+00002251: 0D2C ADD R18,R12 Add without carry
+00002252: 1D3D ADC R19,R13 Add with carry
+00002253: 01F9 MOVW R30,R18 Copy register pair
+00002254: 9104 LPM R16,Z Load program memory
+00002255: 830D STD Y+5,R16 Store indirect with displacement
339: maska.b=0x80;
+00002256: E800 LDI R16,0x80 Load immediate
+00002257: 8308 STD Y+0,R16 Store indirect with displacement

Кстати в результате maska тоже равна 0.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 04:17
Рейтинг@Mail.ru


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