Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: В int ARM7TDMI-S - 8 байт?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
toweroff
Добрый день!

Наткнулся вот на такое и, честно говоря, мозг поехал...

Код
unsigned char data_code[8192];
unsigned int *pp;
    
    pp = (unsigned int*)&data_code;
    
    for (counter_en=0; counter_en<8*1024; counter_en++)
    {
        *pp++ = counter_en;
    }

...


встаю отладчиком за циклом, смотрю байтовый массив
Все значения появляются с 8-го байта (ну и т.д. - 16, 24, 32...)

Сделал указатель unsigned short - теперь 4 байта

Мой LPC2478 заделался атомом? sm.gif

У компилятора такая строка в параметрах:
Код
-c --cpu ARM7TDMI -D__MICROLIB -g -O0
-I "C:\Program Files (x86)\Keil\ARM\RV31\INC"
-I "C:\Program Files (x86)\Keil\ARM\CMSIS\Include"
-I "C:\Program Files (x86)\Keil\ARM\Inc\Philips"
-o "*.o" --omf_browse "*.crf" --depend "*.d"


UPD

В общем так
Будте аккуратнее и внимательнее. Если смотреть в отладчике, значения массива отображаются некорректно
Если смотреть кусок памяти, в котором лежит массив, то там все в порядке
Пока то, с чем это связано, непонятно. Скорее всего, глюк Keil
Сейчас проверю с ULINK2 (до этого был J-Link ULTRA)

Еще UPD
ULINK2 работает нормально
Кто глючит - 4.70a и J-Link - надо разбираться, кто там из них... но, скорее всего, Keil
winipuh
Цитата(toweroff @ May 14 2013, 22:09) *
Добрый день!

Наткнулся вот на такое и, честно говоря, мозг поехал...

Код
unsigned char data_code[8192];
unsigned int *pp;
    
    pp = (unsigned int*)&data_code;
    
    for (counter_en=0; counter_en<8*1024; counter_en++)
    {
        *pp++ = counter_en;
    }

...

А это ничего, что Вы в цикле за массив вылезаете?
размер data_code - 8kB (8192 байт)
В цикле - проходите через область 32kB (8*1024*sizeof(int) = 32768 байт)
...
И кстати - а что это такое "pp = (unsigned int*)&data_code" ? Конкретно вот это — &data_code?
Если бы было написано (unsigned int *)data_code или (unsigned int *)data_code[0] — вопросов бы не было... sm.gif
toweroff
Цитата(winipuh @ May 14 2013, 22:50) *
А это ничего, что Вы в цикле за массив вылезаете?
размер data_code - 8kB (8192 байт)
В цикле - проходите через область 32kB (8*1024*sizeof(int) = 32768 байт)
...
И кстати - а что это такое "pp = (unsigned int*)&data_code" ? Конкретно вот это — &data_code?
Если бы было написано (unsigned int *)data_code или (unsigned int *)data_code[0] — вопросов бы не было... sm.gif

по порядку.
Во-первых, глюки идут с начала массива, глубоко смотреть нет смысла, да и Keil ограничивает просмотр до 2К элементов
Во-вторых. Упс.. да. Это уже был кусок уже от байтов, подшаманил на ходу для int и не поменял число
В-третьих. А есть разница?
jcxz
Цитата(toweroff @ May 15 2013, 00:09) *
unsigned char data_code[8192];
unsigned int *pp;
pp = (unsigned int*)&data_code;
Прочитайте про выравнивание обращений к памяти в ARM7 и подумайте что вы сделали здесь не так.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.