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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Несколько программ в одной прошивке, Как проще сделать?
MALLOY2
сообщение Aug 9 2007, 17:07
Сообщение #16


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Не знаю зачем такое нужно ? да и еще на меге smile.gif, вы ведь на этом ничего не выиграете.
Лучший вариант:


Код
//типы функций прерывания
typedef  void(*irq_func_type)(void)

irq_func_type irq_function;

void irq_isr(void)  //глобальный обработчик
  {
   if (irq_function!=NULL) irq_function();
  }


void programm1_isr() //обработчик прерывания для 1 программы
  {

   }

void programm2_isr() //обработчик прерывания для 2 программы
  {

   }



void main(void)
  {
    //***************************
    //Здесь определяется какая программа должна выполнятся
    //***************************
    //назначем прерывания
    if (prigramm == 0) irq_function =   programm1_isr;
    else                       irq_function =   programm2_isr;
    while(1)
     {
           if (prigramm == 0)
             {
               //выполняем программу 1
             }
          else
             {
               //выполняем программу 2
             };
     }
  }
Go to the top of the page
 
+Quote Post
Redaer
сообщение Aug 15 2007, 14:38
Сообщение #17


Участник
*

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



Здравствуйте



Дабы не засорять конференцию похожими темами, задам свой вопрос здесь. Пытаюсь с помощью IAR 4.40 запрогать AT91SAM7S256. Так вот вопрос состоит в следующем: Можно ли с помощью иара залить во флешь процессора 2 разные программы переопределив в файлах at91SAM7S256_64KRAM.xlc и at91SAM7S256_NoRemap.xlc параметр -DROMSTART



В частности первую программку хочется залить по адресу 0x0 вторую же по адресу 0x2000

Я так понимаю, при запуске АРМ начинает работать с нулевого адреса. Так?

Собсно, хочется из первой программки(бутлоадер своеобразные) прыгнуть на вторую(основную)... Можно ли это сделать посредством ассемблеровской вставки asm("B 0x2000")



И ещё вопрос. При загрузке программы в АРМ посредством ИАРа какие-нть происходят действия с флеш (полностью ли она затирается или начиная с аддреса, обозначенного в xlc)?



Попробовал в бутлоадере сделать asm("B 0x2000"). Залил во флеш.

Потом в основной проге в обоих xcl изменяю -DROMSTART=0x00002000. Пытаюсь залить во флеш через дебагер. Ну и дебагер у меня подвисает, т.е. как я понимаю, прыжка не происходит на адрес 0x2000 со стороны бутлоадера.



Уж простите за сумбурное объяснение проблемы. Прошу вас, задавайте вопросы, попытаюсь раскрыть тему более полно.



Помогите советом или ссылкой на доки, пожалуйста help.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 15 2007, 16:24
Сообщение #18


Гуру
******

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



Цитата(Redaer @ Aug 15 2007, 17:38) *
Можно ли с помощью иара залить во флешь процессора 2 разные программы переопределив в файлах at91SAM7S256_64KRAM.xlc и at91SAM7S256_NoRemap.xlc параметр -DROMSTART
Теоретически да, причем поскольку во флешь, то использовать второй из перечисленных файлов и не забыть, что память стирается страницами, чтобы при стирании памяти под одну программу не затереть часть другой.
Цитата(Redaer @ Aug 15 2007, 17:38) *
Я так понимаю, при запуске АРМ начинает работать с нулевого адреса. Так?

Собсно, хочется из первой программки(бутлоадер своеобразные) прыгнуть на вторую(основную)... Можно ли это сделать посредством ассемблеровской вставки asm("B 0x2000")
Да, начинает с адреса 0. Не уверен, что команда "B" в асм-вставке поймет абсолютный адрес. Можно в .xcl первой программы определить символ, скажем -DApplication=0x2000, а в самой программе сделать extern void Application(); Application();
Цитата(Redaer @ Aug 15 2007, 17:38) *
И ещё вопрос. При загрузке программы в АРМ посредством ИАРа какие-нть происходят действия с флеш (полностью ли она затирается или начиная с аддреса, обозначенного в xlc)?
Затираются только те страницы, в которые записываются данные. Т.е. если программа заняла 1К, то только этот 1К будет стерт, даже если в .xcl под программу отведено 100К.
Цитата(Redaer @ Aug 15 2007, 17:38) *
Попробовал в бутлоадере сделать asm("B 0x2000"). Залил во флеш.

Потом в основной проге в обоих xcl изменяю -DROMSTART=0x00002000.
Это лишнее. Первый .xcl нужен только для отладки в RAM.
Цитата(Redaer @ Aug 15 2007, 17:38) *
Пытаюсь залить во флеш через дебагер. Ну и дебагер у меня подвисает, т.е. как я понимаю, прыжка не происходит на адрес 0x2000 со стороны бутлоадера.
Сначала убедитесь, что асм-вставка действует именно так, как вы хотите. Пройдите это место в симуляторе и убедитесь, что переход происходит. Команда "B" подразумевает в качестве аргумента смещение относительно PC.

P.S. Надо было все же в отдельную тему писать - предыдущее обсуждение шло про AVR.


--------------------
На любой вопрос даю любой ответ
"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
Redaer
сообщение Aug 16 2007, 07:11
Сообщение #19


Участник
*

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



Большое спасибо за развернутые ответыsmile.gif

Че-то я не сообразил по поводу темы про АВР.
Go to the top of the page
 
+Quote Post

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

 


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


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