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

 
 
> Как программно сгенерить ресет?
Karl
сообщение Jul 26 2005, 10:52
Сообщение #1


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

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Контроллер мега8535. Свободных выводов нет.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
singlskv
сообщение May 26 2008, 15:11
Сообщение #2


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Щаз я Вам все объясню smile.gif

Дело в том что у WinAVR есть такая бага/фича (бага с точки зрения стандарта)
что переход по ((void(*)(void))0x0)(); может осуществляться НЕ на нулевой адрес.

Это зависит от того сколько флеша есть у контроллера.
Если на проце >8Kb(4Кслов) , то такой вызов будет правильным call 0x0000 ,
если же на проце меньше или равно 8Kb то у проца просто нет инструкций
call/jmp а есть только rcall/rjmp те абсолютные адреса понимать он не может(на этапе компиляции),
поэтому для таких процов джамп будет не на 0 адрес.

Вот примеры одного и того же кода для mega16:
Код
int main(void)
{
  8e:    cf e5           ldi    r28, 0x5F; 95
  90:    d4 e0           ldi    r29, 0x04; 4
  92:    de bf           out    0x3e, r29; 62
  94:    cd bf           out    0x3d, r28; 61

  ((void(*)(void))0x0)();
  96:    0e 94 00 00     call    0x0 <__vectors>
Прыгнули куда надо!

и для mega8:
Код
int main(void)
{
  5c:    cf e5           ldi    r28, 0x5F; 95
  5e:    d4 e0           ldi    r29, 0x04; 4
  60:    de bf           out    0x3e, r29; 62
  62:    cd bf           out    0x3d, r28; 61

  ((void(*)(void))0x0)();
  64:    fb df           rcall    .-10     ; 0x5c <main>
Не знали куда надо прыгать, поэтому прыгнули на main!

А теперь добавляем функцию на мега8:
Код
void softreset()
{
  ((void(*)(void))0x0)();
  5c:    ff df           rcall    .-2      ; 0x5c <softreset>
  5e:    08 95           ret

00000060 <main>:
}

int main(void)
{
  60:    cf e5           ldi    r28, 0x5F; 95
  62:    d4 e0           ldi    r29, 0x04; 4
  64:    de bf           out    0x3e, r29; 62
  66:    cd bf           out    0x3d, r28; 61

  softreset();
  68:    f9 df           rcall    .-14     ; 0x5c <softreset>
ОБА-НА, прыжок то на адрес начала функции(интересно что будет
когда стек налезет на на регистры smile.gif )

Почему разработчики WinAVR не сделали вполне валидный в этом случае icall для меня
загадка, наверное регистры r31:r30 решили сэкономить smile.gif

итого для чипов с <=8Kb лучше так:
Код
__asm__ __volatile__("ldi r30,0\n\t"\
                       "ldi r31,0\n\t"\
                       "ijmp");
Go to the top of the page
 
+Quote Post
defunct
сообщение May 26 2008, 16:03
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(singlskv @ May 26 2008, 18:11) *
итого для чипов с <=8Kb лучше так:
Код
__asm__ __volatile__("ldi r30,0\n\t"\
                       "ldi r31,0\n\t"\
                       "ijmp");

А почему только до 8kb, а не до 128kb?
Этот код на m128 точно будет работать - значит это общий случай.
только если делать "asm" вставку, то что мешает написать

Код
asm( "jmp 0x0");

будет работать без ограничений для толтых чипов.

ЗЫ: зачем писать "__asm__ __volatile__" когда уже есть макрос "asm". придерживающийся одинакового синтаксиса и поддерживаемый всеми компиляторами для AVR (по крайней мере теми, которые я пробовал).
Go to the top of the page
 
+Quote Post
Палыч
сообщение May 26 2008, 16:14
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



А, ведь точно - прав singlskv!

Цитата(defunct @ May 26 2008, 19:03) *
А почему только до 8kb, а не до 128kb? Этот код на m128 точно будет работать. только если делать "asm" вставку, то что мешает написать
Код
asm( "jmp 0x0");
Наверное, отсутствие команды jmp в m8
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Karl   Как программно сгенерить ресет?   Jul 26 2005, 10:52
- - MALLOY2   1) можнро через вачдог если он есть 2) а можно ...   Jul 26 2005, 11:27
|- - Rock   Цитата(MALLOY2 @ Jul 26 2005, 15:27) 1) ...   May 21 2008, 13:52
|- - Палыч   Цитата(Rock @ May 21 2008, 16:52) В WinAV...   May 21 2008, 14:20
|- - Сергей Борщ   Цитата(Rock @ May 21 2008, 16:52) В WinA...   May 21 2008, 14:23
|- - IgorKossak   Цитата(Сергей Борщ @ May 21 2008, 17:23) ...   May 21 2008, 19:05
|- - zltigo   Цитата(IgorKossak @ May 21 2008, 21:05) Н...   May 21 2008, 19:27
|- - Rock   Цитата(zltigo @ May 21 2008, 23:27) ((voi...   May 26 2008, 12:10
|- - Сергей Борщ   Цитата(Rock @ May 26 2008, 15:10) А вот ...   May 26 2008, 12:15
|- - Rock   Цитата(Сергей Борщ @ May 26 2008, 16:15) ...   May 26 2008, 12:21
|- - aesok   Цитата(Rock @ May 26 2008, 16:21) 1361: ...   May 26 2008, 17:21
|- - Rock   Цитата(aesok @ May 26 2008, 21:21) Пожалу...   May 26 2008, 17:49
|- - aesok   Цитата(Rock @ May 26 2008, 21:49) WinAVR-...   May 26 2008, 18:01
|- - Rock   Цитата(aesok @ May 26 2008, 22:01) Извини...   May 26 2008, 18:13
|- - aesok   Цитата(Rock @ May 26 2008, 22:13) Код8...   May 26 2008, 18:51
|- - Rock   Цитата(aesok @ May 26 2008, 22:51) avr-gc...   May 26 2008, 19:16
|- - aesok   Цитата(Rock @ May 26 2008, 23:16) уточнит...   May 26 2008, 19:27
|- - singlskv   Цитата(aesok @ May 26 2008, 23:27) Потому...   May 26 2008, 20:26
|- - aesok   Цитата(singlskv @ May 27 2008, 00:26) ну ...   May 26 2008, 21:03
|- - singlskv   Цитата(aesok @ May 27 2008, 01:03) Давайт...   May 26 2008, 21:16
|- - defunct   Цитата(singlskv @ May 27 2008, 00:16) а 1...   May 26 2008, 21:36
|- - singlskv   Цитата(defunct @ May 27 2008, 01:36) пино...   May 26 2008, 21:51
- - nml   Цитата(Karl @ Jul 26 2005, 13:52)Контроллер м...   Jul 26 2005, 11:34
|- - Karl   Цитата(nml @ Jul 26 2005, 16:34)Цитата(Karl ...   Jul 27 2005, 03:22
- - lolikandr   В своё время удовлетворился таким решением - глоба...   Jul 28 2005, 06:18
|- - IgorKossak   Цитата(lolikandr @ Jul 28 2005, 09:18)В своё ...   Jul 29 2005, 07:04
- - lolikandr   ЦитатаНаверное, под важными регистрами имелась в в...   Jul 29 2005, 13:26
- - MrYuran   Ещё один способ: пишем ручками стартап со всеми не...   May 21 2008, 14:04
- - kada   Работающий пример на IARe: Код// Программный сбро...   May 21 2008, 16:39
- - Палыч   А, не выдаёт ли транслятор какого-либо сообщения п...   May 26 2008, 12:47
|- - Rock   Цитата(Палыч @ May 26 2008, 16:47) А, не ...   May 26 2008, 12:51
|- - VladimirYU   Цитата(Палыч @ May 26 2008, 16:47) АА, не...   May 26 2008, 12:52
- - Палыч   Цитата(Rock @ May 26 2008, 15:51) нет...   May 26 2008, 12:57
|- - Rock   Цитата(Палыч @ May 26 2008, 16:57) Странн...   May 26 2008, 13:05
- - _Pasha   Есть еще Кодint main(void) { ................   May 26 2008, 13:16
|- - Rock   Цитата(_Pasha @ May 26 2008, 17:16) Есть ...   May 26 2008, 13:45
|- - zltigo   Цитата(_Pasha @ May 26 2008, 15:16) Есть ...   May 26 2008, 13:58
|- - Rock   Цитата(zltigo @ May 26 2008, 17:58) Это н...   May 26 2008, 14:02
- - Палыч   Сейчас попробовал эту конструкцию в WinAVR - всё х...   May 26 2008, 13:50
|- - Rock   Цитата(Палыч @ May 26 2008, 17:50) Сейчас...   May 26 2008, 13:52
|- - Палыч   Цитата(Rock @ May 26 2008, 16:52) какую? ...   May 26 2008, 14:19
|- - zltigo   Цитата(singlskv @ May 26 2008, 17:11) Дел...   May 26 2008, 15:51
||- - defunct   Цитата(Палыч @ May 26 2008, 19:14) Наверн...   May 26 2008, 16:17
|- - singlskv   Цитата(defunct @ May 26 2008, 20:03) А по...   May 26 2008, 16:23
- - singlskv   Да, ну и конечно стоит еще добавить вариант которы...   May 26 2008, 16:00
- - _Pasha   Цитата(zltigo @ May 26 2008, 17:58) Это н...   May 26 2008, 17:02
|- - zltigo   Цитата(_Pasha @ May 26 2008, 19:02) Нет, ...   May 26 2008, 17:20
||- - _Pasha   Цитата(zltigo @ May 26 2008, 21:20) Карти...   May 26 2008, 17:49
|||- - zltigo   Цитата(_Pasha @ May 26 2008, 19:49) Не ве...   May 26 2008, 18:22
|||- - singlskv   Цитата(zltigo @ May 26 2008, 22:22) Ну и ...   May 26 2008, 18:36
||- - singlskv   Цитата(zltigo @ May 26 2008, 21:20) вещи ...   May 26 2008, 18:06
||- - aesok   Цитата(singlskv @ May 26 2008, 22:06) А 2...   May 26 2008, 18:11
|- - singlskv   Цитата(_Pasha @ May 26 2008, 21:02) 2sing...   May 26 2008, 19:14
- - _Pasha   Цитата(singlskv @ May 26 2008, 23:14) НО,...   May 27 2008, 03:45
- - singlskv   По мотивам этой темы озадачился вопросом кодогенер...   May 27 2008, 18:57


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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 06:25
Рейтинг@Mail.ru


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