|
Как это делается средствами Си или IAR C |
|
|
|
 |
Ответов
|
Dec 21 2006, 05:49
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Цитата(SasaVitebsk @ Dec 21 2006, 07:24)  При программировании однокристалок иногда приходится обрабатывать глобальные ошибки. Или, к примеру, реагировать на существенное изменение конфигурации.
В этом случае самый простой а чаще и найболее надёжный способ, - это рестарт программы. Во всяком случае я пользовался таким способом под ASM и, несмотря на "некрасивость", не хочу обходится без этого и на СИ.
На Си я делаю это так: asm("jmp 0"); // Начать сначала
У меня это единственный оператор ASM на всё прогу. Может существует специальный вызов для IAR, что-то вроде __restart(); ?
И ещё один вопрос. Компилятор вопреки моему мнению скомпилировал его не в jmp. Это зачем? В бутлоадере исплользовал такое объявление функции: Код void (*start_application)( void ) = 0x0000; //pointer to application //at flash start Далее, в произвольном месте программы, мы можем ее вызвать и соответственно перейти по адресу 0. З.Ы. Работает. Использую компилятор GCC.
--------------------
Выбор.
|
|
|
|
|
Dec 22 2006, 05:19
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Цитата(zltigo @ Dec 21 2006, 15:45)  Цитата(haker_fox @ Dec 21 2006, 04:49)  В бутлоадере исплользовал такое объявление функции: void (*start_application)( void ) = 0x0000; //pointer to application Далее, в произвольном месте программы, мы можем ее вызвать и соответственно перейти по адресу 0.
RAM зачем расходовать попусту? Сразу и пишите. (void (*)(void))(0x0000)(); Спасибо! Я не задумывался об этом. Теперь буду знать. А компилятор не оптимизирует, приведенное мной выражение?
--------------------
Выбор.
|
|
|
|
Сообщений в этой теме
SasaVitebsk Как это делается средствами Си или IAR C Dec 21 2006, 02:24   aaarrr Цитата(haker_fox @ Dec 22 2006, 05:19) А ... Dec 22 2006, 05:39   zltigo Цитата(haker_fox @ Dec 22 2006, 04:19) А ... Dec 22 2006, 11:36 SasaVitebsk Цитата(haker_fox @ Dec 21 2006, 05:49) В ... Dec 25 2006, 01:53  aaarrr Цитата(SasaVitebsk @ Dec 25 2006, 01:53) ... Dec 25 2006, 02:19   zltigo Цитата(aaarrr @ Dec 25 2006, 01:19) Проци... Dec 25 2006, 12:38    IgorKossak Цитата(zltigo @ Dec 25 2006, 11:38) 8. Эт... Dec 26 2006, 12:01 dxp Цитата(SasaVitebsk @ Dec 21 2006, 05:24) ... Dec 21 2006, 08:11 jorikdima ну в данном то случае и goto() подойдет, верно?
... Dec 22 2006, 12:20 zltigo Цитата(jorikdima @ Dec 22 2006, 11:20) ну... Dec 22 2006, 13:08 jorikdima Тормознул
goto ведь на метку идет, а не по ад... Dec 22 2006, 15:30 zltigo Цитата(jorikdima @ Dec 22 2006, 14:30) от... Dec 22 2006, 16:17  _Bill Цитата(zltigo @ Dec 22 2006, 16:17) Цитат... Dec 22 2006, 17:37   zltigo Цитата(_Bill @ Dec 22 2006, 16:37) Можно ... Dec 22 2006, 18:41    _Bill Цитата(zltigo @ Dec 22 2006, 18:41) Цитат... Dec 22 2006, 23:01     zltigo Цитата(_Bill @ Dec 22 2006, 22:01) перехо... Dec 22 2006, 23:25 _artem_ У прямого перехода по адресу есть свои минусы - не... Dec 22 2006, 17:27
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|