|
отладка из RAM в кейл |
|
|
|
Aug 7 2006, 15:12
|

Дух погибшего транзистора
   
Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288

|
Цитата Собрать проект для работы из RAM и отлаживаться Я не понял. Как это сделать? С помощью скаттер файла? Если да то киньте пример для работы в ОЗУ. Второй вопрос достаточно ли отладчику поставить галочку load application at startup чтобы загрузилось именно ОЗУ.
--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
|
|
|
|
|
Aug 22 2006, 11:17
|

Дух погибшего транзистора
   
Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288

|
Все-таки я чего-то не понимаю. Скаттер-файл Цитата LR_IROM1 0x00000000 0x00004000 { ; load region RW_IRAM1 0x00200000 0x00004000 { ; RW data *.o (RESET, +First) * (+RO +RW +ZI) } } Вижу ругань Цитата usarttest.axf: Error: L6202E: __main.o(!!!main) cannot be assigned to non-root region 'RW_IRAM1' usarttest.axf: Error: L6202E: anon$$obj.o(Region$$Table) cannot be assigned to non-root region 'RW_IRAM1' Я правильно понимаю что RO - код RW - данные ZI - стек? Что означает строчка *.o (RESET, +First)? Ну и самый главный вопрс что не так? Почему не нравится load-регион с нулевым начальным адресом?Размер пробовал изменять до 0x00204000 результат тот же.
--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
|
|
|
|
|
Aug 22 2006, 11:54
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(SpiritDance @ Aug 22 2006, 15:17)  Все-таки я чего-то не понимаю. Скаттер-файл Наверное, нужно написать что-то вроде: Код LR_IROM1 0x00000000 0x00004000 { ; load region RO_IROM1 0x00000000 0x00004000 { *.o (RESET, +First) __main.o (*) * (Region$$Table) * (ZISection$$Table) } RW_IRAM1 0x00200000 0x00004000 { ; RW data * (+RO +RW +ZI) } } Цитата(SpiritDance @ Aug 22 2006, 15:17)  Что означает строчка *.o (RESET, +First)? Это значит, что секция RESET будет расположена в начале адресного пространства.
Сообщение отредактировал aaarrr - Aug 22 2006, 11:55
|
|
|
|
|
Aug 23 2006, 06:17
|

Дух погибшего транзистора
   
Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288

|
Не-а. Не угадали. Цитата usarttest.axf: Error: L6202E: __scatter.o(!!!scatter) cannot be assigned to non-root region 'RW_IRAM1' usarttest.axf: Error: L6202E: __scatter_copy.o(!!handler_copy) cannot be assigned to non-root region 'RW_IRAM1' usarttest.axf: Error: L6202E: __scatter_zi.o(!!handler_zi) cannot be assigned to non-root region 'RW_IRAM1' Объясните что значит это шаманство если нетрудно. Насколько я понял часть кода, включая то что находится в main грузится во флеш, которая в начале адресного пространства до ремапа? если так то почему так криво?
--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
|
|
|
|
|
Aug 23 2006, 15:52
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(SpiritDance @ Aug 23 2006, 10:17)  Не-а. Не угадали. Бывает  Цитата(SpiritDance @ Aug 23 2006, 10:17)  Объясните что значит это шаманство если нетрудно. Это отнюдь не шаманство. Просто нужно указать линкеру, что загрузчик (scatter) нужно оставить во флеш, для ADS было достаточно указать __main.o (*). Попробуйте добавить в RO_IROM1 строку __scatter* (*) - должно помочь, по-идее. Цитата(SpiritDance @ Aug 23 2006, 10:17)  Насколько я понял часть кода, включая то что находится в main грузится во флеш, которая в начале адресного пространства до ремапа? если так то почему так криво? Во-первых, это не тот main, что int main(void), это __main из стартапа. Во-вторых забудьте слово "remap" применительно к процессору AT91SAM7S64. Не нужен он.
|
|
|
|
|
Aug 25 2006, 13:32
|

Дух погибшего транзистора
   
Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288

|
Уряяя! Получилось! Код LR_IROM1 0x00000000 0x00004000 {; load region RO_IROM1 0x00000000 0x00004000 { *.o (RESET, +First) __main.o (*) __scatter*.o (*) * (Region$$Table) * (ZISection$$Table) } RW_IRAM1 0x00200000 0x00004000 {; RW data * (+RO +RW +ZI) } }
Сообщение отредактировал SpiritDance - Aug 25 2006, 13:33
--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
|
|
|
|
|
Oct 4 2007, 18:29
|

Местный
  
Группа: Свой
Сообщений: 322
Регистрация: 13-12-05
Пользователь №: 12 147

|
Ну с отладкой в рам, это понятно. (После того что здесь написано). Так вот, неочень ясно, это что хоть я и отлаживаю программу с Рам. Тока всеравно придется писать заголовки в ром. А ром ведь не бесконечный цикл перезаписи имет. Так я невижу особой пользы отладки программы в рам, если всеравно портиться ром. И еще имею Ulink и lpc2148 Keil. Вот ворос, я мож непонял чего, но перед тем sкак начать отладку, требуется программу сперва туда записать, Flash->Download, А потом начинать отладкую. Верно? Просто после АВР, когда заливаласьпрошивка вседа при одкладке, это неного приятно удивтло. А чего я спрашиваю, казалось уже ответив. Просто когда я запускаю отладку с параметрами Download to Flash, то он неможет залить прошивку, пишет /----------------------/ Ulink ARM Error |X| /----------------------/ Memory Missmatch! Adress: 0x00000000 Value =0xFF Expected = 0x18
Это как понимать? А через Flash->Download шьется.
|
|
|
|
|
Oct 5 2007, 02:35
|
Частый гость
 
Группа: Свой
Сообщений: 85
Регистрация: 25-12-06
Пользователь №: 23 865

|
Цитата(zorromen @ Oct 5 2007, 05:29)  Тока всеравно придется писать заголовки в ром. А ром ведь не бесконечный цикл перезаписи имет. Так я невижу особой пользы отладки программы в рам, если всеравно портиться ром. ничего там не надо писать! и скатер править тоже не надо! далее для примера с AT91SAM7****: в Project/Options for Target/Target заполняем поля: Read/Only memory areas фишка на IROM1 указываем start: 0x202000 size:0x2000 Read/Write memory areas фишка на IRAM1 указываем start: 0x204000 size:0x2000 в Project/Options for Target/Linker ставим галку use memory layout from Target Dialog (чтоб со всякими катерами не трахаца) в стартапе коментим директивы условной компиляции (remap/copy vectors): Код ; Copy Exception Vectors to Internal RAM ADR R8, Vectors ; Source LDR R9, =RAM_BASE ; Destination LDMIA R8!, {R0-R7} ; Load Vectors STMIA R9!, {R0-R7} ; Store Vectors ; Remap on-chip RAM to address 0 MC_BASE EQU 0xFFFFFF00 ; MC Base Address MC_RCR EQU 0x00 ; MC_RCR Offset LDR R0, =MC_BASE MOV R1, #1 STR R1, [R0, #MC_RCR] ; Remap далее получаем бинарник и пишем его самбой в SRAM по адресу 0x202000 и делаем Go 0x202000 для приличия снести в сатртапе асм-инструкции, переводящие арм в режим юзера а супервизору разрешить irq,fiq (убрать биты в CPSR I_bit, F_bit) и плеш для дебуга в срам не нужна!
|
|
|
|
|
Oct 5 2007, 03:01
|
Частый гость
 
Группа: Свой
Сообщений: 172
Регистрация: 5-08-06
Из: Владивосток
Пользователь №: 19 343

|
Это мой стандартный скаттер для отладки. Код RAM_LOAD 0x200000// начало озу в SAM7S { EXE +0 0x6000// длина для исполняемого кода и констант { *.o (RESET, +FIRST)// первым в эту область линкуем модуль RESET * (+RO)// затем все остальные readonly объекты } DATA 0x206000 0x2000// регион для данных (см. выше) { * (+RW +ZI)// кладем все изменяемые данные сюда } ISR_EXE 0x208000 0x2000// и отдельный регион для функций из объектного файла interrupt.o // в этот регион попадут все функции, определенные в файле interrupt.c. { interrupt.o (+RO) } } Для отладки из озу в кейле надо прогрузить полученный файл в память контроллера и не забыть сделать ему РЕМАП: Код // грузим файл в контроллер Load obj\vm_ram.axf INCREMENTAL //делаем ремап _WDWORD(0xFFFFFF00,0x00000001);//* Toggle RESET The remap - содрано в ините // кейловского примера Этот файл надо скормить кейлу под соусом "ини-файл для отладчика" на вкладке настройки последнего в свойствах проекта.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|