|
Загадочное поведение SAM7S64 & IAR 4.40a |
|
|
|
Jul 27 2006, 21:43
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Зацените вырезку из отладчика: Код 0x00002C88 E3A01001 MOV R1, #0x1 0x00002C8C E1A00006 MOV R0, R6 0x00002C90 EBFFFFD3 BL proc2 ; 0x2BE4 0x00002C94 EA00003D B 0x002D90 else if ((PutBufVar >= NET_VAR_DOUT1) && (PutBufVar < NET_VAR_DOUT1 + DIG_OUTPUTS)) 0x00002C98 E3500048 CMP R0, #0x48 0x00002C9C BA00000D BLT 0x002CD8 0x00002CA0 E3500054 CMP R0, #0x54 0x00002CA4 AA00000B BGE 0x002CD8 { if (varsize != 4) // ïàðàìåòð float - âðåìÿ (ñåê) 0x00002CA8 E3560004 CMP R6, #0x4 0x00002CAC 1AFFFFE4 BNE 0x002C44 varsize = PutBufVar - NET_VAR_DOUT1; 0x00002CB0 E2406038 SUB R6, R0, #0x38 proc(varsize); 0x00002CB4 E1A00006 MOV R0, R6 0x00002CB8 EBFFFFC6 BL proc ; 0x2BD8 Касательно константы NET_VAR_DOUT1, которая реально описана как: #define NET_VAR_DOUT1 64+8 __________________________________ Ой, бл@@! Тока щас понял в чём косяк. Таки мой косяк >:( Надо было этот сраный дефайн в скобки заключить.
Сообщение отредактировал GetSmart - Jul 27 2006, 21:57
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 27 2006, 22:27
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(GetSmart @ Jul 28 2006, 02:01)  Я как бы извиняюсь, что воду тут намутил. Зря. А я только собрался про скобки написать  Драку я, к сожалению, пропустил, но скажу пару слов о столь любимом мной и господином d__ компиляторе от ARM Ltd. Точнее, не о компиляторе даже, а о линкере. Так вот, этот линкер имеет прелестную привычку глухо виснуть при ошибках, особенно в сложных скриптах с ROPI/RWPI. Не мало он крови мне в свое время испортил. Я к тому, что глюки есть у всех, а не только у IAR'а, но это еще не повод бросать что-либо об стенку.
|
|
|
|
|
Jul 28 2006, 08:02
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(SpiritDance) А еще может кто-нибудь все-таки объяснит возможно ли в реалвью исполнять код из RAM. Даже в gcc это есть, сегмент fast кажется. Конечно возможно. Я такое делал в IAR. перед процедурой пишется __ramfunc. Мне надо было обрабатывать прерывания прямо во время записи во флэш LPC213x. Только в раме они и могут обрабатываться.
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Jul 28 2006, 09:53
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата Я имел ввиду RealVeiw от ARM, сколько не смотрел в их гайды так ничего и не нашел относительно преноса кода в память. Почитайте мануал на линкер, там должна быть глава "Using Scatter-loading description files". Вот пример скрипта для AT91SAM7S64 без Remap'а: Код FLASH 0x00000000 0x00010000 { FLASH 0x00000000 0x00010000 { start.o (startup, +First) * (+RO) } RAM 0x00200000 0x00004000 { * (+RW, +ZI) * (fastcode) } } Если нужно поместить функцию в RAM, пишем: Код #pragma arm section code = "fastcode"
void my_func(void) { }
#pragma arm section code
|
|
|
|
|
Aug 7 2006, 14:00
|

Шаман
     
Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221

|
Цитата(zltigo @ Jul 24 2006, 18:51)  Цитата(ig_z @ Jul 24 2006, 16:18)  А генераторы делают лицензии для евалюшн версий
Я пользую: 2.1_WIN\0EWARM\0\0.... Готовый выложил в первоначальную ветку: http://electronix.ru/forum/index.php?showt...mp;#entry137296Да нет там ничего вложенного, только намерение выложить.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|