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

 
 
 
Reply to this topicStart new topic
> uc/os IAR SRAM, Отладка из SRAM
quantum
сообщение Oct 1 2007, 02:13
Сообщение #1





Группа: Новичок
Сообщений: 12
Регистрация: 1-10-07
Пользователь №: 30 959



Доброе время суток!

Поставил на AT91SAM7X256-EK uCOS порт под IAR WB v4.1
Успешно запустил ОСь во Flash-памяти

Собственно вопрос - как запустить операционку в SRAM, для того чтоб отлаживаться? help.gif
Заранее благодарен smile.gif
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Oct 1 2007, 04:25
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(quantum @ Oct 1 2007, 08:13) *
Доброе время суток!

Поставил на AT91SAM7X256-EK uCOS порт под IAR WB v4.1
Успешно запустил ОСь во Flash-памяти

Собственно вопрос - как запустить операционку в SRAM, для того чтоб отлаживаться? help.gif
Заранее благодарен smile.gif


Точно так же, как и любую другую программу, не под ОС.
Слинковать проект в RAM, посмотреть по документации на контроллер, как для режима работы в
RAM настроить вектора прерываний, и вуаля.


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
quantum
сообщение Oct 1 2007, 05:09
Сообщение #3





Группа: Новичок
Сообщений: 12
Регистрация: 1-10-07
Пользователь №: 30 959



Цитата(Andy Mozzhevilov @ Oct 1 2007, 07:25) *
Точно так же, как и любую другую программу, не под ОС.
Слинковать проект в RAM, посмотреть по документации на контроллер, как для режима работы в
RAM настроить вектора прерываний, и вуаля.


я как-бы в этом деле начинающий...
а можно пример xcl-файла для адреса $200000 ?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 1 2007, 08:42
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(quantum @ Oct 1 2007, 08:09) *
я как-бы в этом деле начинающий...
а можно пример xcl-файла для адреса $200000 ?
Вот тут для SAM7S64. Поправьте под 256 самостоятельно, заодно и разберетесь wink.gif


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
IV_K
сообщение Oct 1 2007, 13:37
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 121
Регистрация: 17-06-05
Пользователь №: 6 087



и этта... mac файл из примера прицепить нужно
Go to the top of the page
 
+Quote Post
quantum
сообщение Oct 2 2007, 23:10
Сообщение #6





Группа: Новичок
Сообщений: 12
Регистрация: 1-10-07
Пользователь №: 30 959



любопытно, что рядовые программы запускаются с SRAM, а ucos - нет

вопрос - для чего нужен mac-файл? я его удаляю - всё равно в Flash работает! xcl- токо нужен

Я писал в startup.s79 код для remap и через ЖТАГ пронаблюдал, что вектора встают как надо - тоесть ремэп делается. Но ось всё равно не пашет! sad.gif

Может глюк кроется из-за того, что сегменты привязаны по определённому адресу?(например 0x200000)
а после ремэпа уже адрес 0x0 должен быть?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 3 2007, 07:55
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(quantum @ Oct 3 2007, 02:10) *
любопытно, что рядовые программы запускаются с SRAM, а ucos - нет
значит надо идти по шагам и выяснять - почему.
Цитата(quantum @ Oct 3 2007, 02:10) *
вопрос - для чего нужен mac-файл? я его удаляю - всё равно в Flash работает! xcl- токо нужен
Наверное, об этом стоит почитать в хелпе на Embedded workbench. Коротоко - через JTAG настраивает кое-какие регистры. В частности, делает REMAP перед загрузкой и после сброса, сбрасывает периферию. Конкретно - почитайте комментарии внутри этого файла.
Цитата(quantum @ Oct 3 2007, 02:10) *
Я писал в startup.s79 код для remap и через ЖТАГ пронаблюдал, что вектора встают как надо - тоесть ремэп делается. Но ось всё равно не пашет! sad.gif
Остается непонятными, как startup.s79 получит управление, если до ремапа код исполняется из флеш.
Цитата(quantum @ Oct 3 2007, 02:10) *
Может глюк кроется из-за того, что сегменты привязаны по определённому адресу?(например 0x200000)
а после ремэпа уже адрес 0x0 должен быть?
Во-первых маловероятно. Объясните - какая разница, из какого адреса доставать команду или данные. Во-вторых - если вы взяли те файлы, на которые я давал ссылку - то там программа заливается после ремапа в нулевые адреса.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
romashko
сообщение Oct 4 2007, 03:49
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 85
Регистрация: 25-12-06
Пользователь №: 23 865



Цитата(quantum @ Oct 3 2007, 10:10) *
...любопытно, что рядовые программы запускаются с SRAM, а ucos - нет...
...Я писал в startup.s79 код для remap и через ЖТАГ пронаблюдал, что вектора встают как надо - тоесть ремэп делается. Но ось всё равно не пашет! sad.gif...


не нужно ничего в стартапе писать!
в своё время я тоже на такие грабли натыкался!
JTAG помог - в ходе отладки зарулил на bsp.c на функцию BSP_IntCtrlInit

Во-первых:
в ней код, который делает ремэп, если ОН УЖЕ СДЕЛАН!!! - идёт проверка чт./зап. ячейки RAM - таким образом проверяется - если кто-то отремэпил (mac-файл при отладке), то отремэпить назад:
Код
BSP_RAM_REMAP_TEST_BYTE=0xAA;    //Write a byte to RAM
if(BSP_RAM_REMAP_TEST_BYTE==0xAA)
//Check if the write to RAM worked
{
AT91C_BASE_MC->MC_RCR=1;          //If so, toggle REMAP register
}

в итоге нужный Вам ремэп не происходит!

Во-вторых:
в той же функции есть функция инициализации векторов прерываний - так вот, прохождение
JTAG'ом показало, что он НЕ ВЫПОЛНЯЕТСЯ, так как условная директива компиляции RAM_REMAPPED ложна:
Код
#ifdef RAM_REMAPPED //BEGIN CODE RUNNING OUT OF RAM
BSP_InitExceptVect();
#endif

Отсюдова ТТРИ вывода:
1. Разрешить сделать ремэп ОДИН раз
2. Проинициализировать вектора прерываний (аля просто их сдвинуть куда надо)
3. Подправить xcl-файл линкера


Вот пример, изменённого файла bsp.c:
Код
static  void  BSP_IntCtrlInit (void)
{
  CPU_INT16U  i;
  [b]AT91C_BASE_MC->MC_RCR=1; //REMAP
  BSP_InitExceptVect(); //Prepare Vectors[/b]
  AT91C_BASE_AIC->AIC_EOICR=0x00000000; //End-of-interrupt
  for (i = 0; i < 32; i++) //Disable all ISRs
  {                    
   AT91C_BASE_AIC->AIC_SVR[i]=(CPU_INT32U)BSP_DummyISR_Handler;
   AT91C_BASE_AIC->AIC_SMR[i]=0;
  }
}


Кусок xcl-файла (отточен для SAM-BA SRAM start address 0x202000):
Код
-carm
//Тут код и инициализированные данные
-DROMSTART=00202040
-DROMEND=00206FFF
//Тут переменные и стеки
-DRAMSTART=00207000
-DRAMEND=0020FFFF
//А тут вектора
-Z(CODE)INTVEC=202000-20203F
...
//далее без изменений
...


Цитата(quantum @ Oct 3 2007, 10:10) *
вопрос - для чего нужен mac-файл? я его удаляю - всё равно в Flash работает! xcl- токо нужен


он нужен для дебугера - в нём тоже можно ремэп описать и настроить контроллер и JTAG

Цитата(quantum @ Oct 3 2007, 10:10) *
Я писал в startup.s79 код для remap и через ЖТАГ пронаблюдал, что вектора встают как надо - тоесть ремэп делается. Но ось всё равно не пашет! sad.gif


потому что из-за вышеопианных причин в bsp.c он ищё раз делается! стартап - НЕ ТРОГАТЬ!

P.S. надеюсь, исчерпывающе ответил на ваш вопрос.
Во всяком случае у меня работает wink.gif
Go to the top of the page
 
+Quote Post
quantum
сообщение Oct 12 2007, 05:21
Сообщение #9





Группа: Новичок
Сообщений: 12
Регистрация: 1-10-07
Пользователь №: 30 959



УРА!!!!!!!!!!!!
работает! smile.gif

romashko, спасибо! a14.gif beer.gif
Go to the top of the page
 
+Quote Post

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

 


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


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