Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Инициализация данных в IAR.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
helicopter
Нужно написать полностью собственную первичную инициализацию вместо __iar_program_start.
Попытался сделать это, как делал в GCC - .bss от начала до конца забивается нулями, а .data_init (flash) копируется в .data (sram).
Тут обнаружилась первая странность - данные в .data_init начинаются не с начала секции, а с __section_begin(".data_init") + 1 байт.
(т.е. по выравненному адресу). Сдвиг начального адреса на этот один байт ситуацию улучшил, но не полностью. Большая часть
данных теперь инициализировалась нормально, но в некоторых структурах (связанных с usb) оказался какой-то жуткий мусор, в
результате чего прошивка стала падать в из прерывания usb в FaultISR из-за обращения по несуществующему адресу.
Пытался дизассемблировать встроенную иаровскую инициализацию, но там в части копирования данных какая-то жесть. Разобраться
полностью сходу не удалось. Может кто уже сталкивался ? По какому принципу у IAR уложены данные в память ?

Контроллер LM3S5R31
scifi
У меня в папке iar\arm\src\lib\init лежат исходники процедур инициализации данных. Может быть, у вас тоже?
helicopter
Цитата(scifi @ Mar 7 2013, 08:20) *
У меня в папке iar\arm\src\lib\init лежат исходники процедур инициализации данных. Может быть, у вас тоже?

Спасибо, но к сожалению я не нашёл там функцию __iar_packbits_init3.

P.S. В первом сообщении опечатался, где "(т.е. по выравненному адресу)" - я хотел написать: "т.е. по невыравненному адресу". Потому этот факт меня сильно удивил.
helicopter
Может существует способ как-то заставить его укладывать данные в память по человечески ? В скрипте линкера указать или ещё как-нибудь ?

Кажется нашёл: http://en.wikipedia.org/wiki/PackBits
Вопрос: "Можно ли это как-то отключить ?", - остаётся в силе. Если у кого-то есть готовая реализация на си, тоже буду благодарен.
scifi
Цитата(helicopter @ Mar 9 2013, 22:54) *
Можно ли это как-то отключить ?

Почитайте документ "EWARM Development Guide". Ищите в тексте "initialize by copy".
helicopter
Scifi, большое спасибо. Замена initialize by copy на initialize manually with packing=none решило проблему.
ih_
День добрый!
И у меня проблема с инициализацией sm.gif
Вводные данные:
IAR XLINK 4.60K (4.60.11.0); IAR Assembler for MSP430 V4.10A/W32 (4.10.1.9); IAR C/C++ Compiler for MSP430 V4.10A/W32 [Evaluation] (4.10.1.1)

Описание шрифта
Код
typedef     const byte             cByte;
typedef struct fontDescriptor tFontDescriptor;
struct fontDescriptor{
    cByte    width;                                // width in pixels
    cByte    hight;                                // hight in pixels
    cByte    symbolStep;                            // in pixel beetween chars
    cByte    rowStep;                            // in pixel beetwen lines
    cByte    len;                                // symbol counts -1
    cByte    offset;                                // e.g. if only digits offset=0x30
};

typedef cByte tSymbol;

typedef struct font tFont;
struct font{
    tFontDescriptor    descriptor;
    tSymbol            symbol[];
};

Инициализация шрифта из десяти цифр
Код
//tFont font3x5_10={
cByte font3x5_10[]={
// descriptor    
    0x03,0x05,0x01,0x01,0x10,0x30,
// symbols        
    0x1f,0x11,0x1f,
    0x12,0x1f,0x10,
    0x1d,0x15,0x17,
    0x15,0x15,0x1f,
    0x07,0x04,0x1f,
    0x17,0x15,0x1d,
    0x1f,0x15,0x1d,
    0x01,0x01,0x1f,
    0x1f,0x15,0x1f,
    0x17,0x15,0x1f,
};

Применение
Код
tFont              *font;
font=&font3x5_10;

Вопрос. Если в процессе инициализации константу-шрифт описать как:
cByte font3x5_10[]={.....
то компилятор выдает предупреждение: "О не совместимости типов tFont и cByte". И все работатет.
А если описать как:
tFont font3x5_10={....
то компилятор принимает только первые шесть значений дескриптора, а на сами символы говорит:" Слишком много инициализирующих данных".

Видимо нельзя в одной структуре смешивать типы разной определенности длины. Как тогда можно реализовать один тип данных на шрифты разной длины? Прошу помощи? sm.gif Благодарю.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.