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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Как сделать перезагрузку программно?, сходу не смог понять
VladimirYU
сообщение Jul 9 2007, 10:00
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



[quote name='singlskv' date='Jul 9 2007, 02:49' post='270177']
так делать нельзя...
По крайней мере Atmel на этот счет говорит четко, НИЗЯ!

Можно по подобней, аппарвтный сброс еще никто не запрещал, ИМХО.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 9 2007, 10:12
Сообщение #17


Гуру
******

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



Цитата(singlskv @ Jul 9 2007, 12:16) *
Сергей, а это проверенное решение для WinAVR ?
Оно одинаково работает на контроллерах с call/rcall и тех у которых только rcall ?
Оно проверено на вызове загрузчика, который живет по адресу 0x1800 и другой функции по другому адресу. Конкретно на адрес 0x0000 не переходил, но не вижу особой разницы - с точки зрения компилятора это вызов обычной функции, о расположении которой он ничего не знает и не должен знать. С точки зрения линкера адреса функций - обычные symbols, ему тоже все равно чему этот адрес равен конкретно. А опцией -Wl мы просто ему говорим "этот символ (метку) мы определили за тебя"
Цитата(singlskv @ Jul 9 2007, 12:16) *
В inderect jump ничего по воле компилятора уже поменятся не может...
Да, но оно требует загрузки R30:R31 и IJMP вместо обычного ®JMP.


--------------------
На любой вопрос даю любой ответ
"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
singlskv
сообщение Jul 9 2007, 10:44
Сообщение #18


дятел
*****

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



Цитата
Можно по подобней, аппарвтный сброс еще никто не запрещал, ИМХО.

Вот официальное мнение Atmel по этому вопросу:

Software Reset
Question
How can I reset my AVR through software?

Answer
If you want to perform a software reset of your AVR you should use the internal Watchdog. Simply enable it and let it time out. When the Watchdog triggers it resets the program counter back to 0, clears all the registers and performs all the other tasks. This operation gives the same result as pulling the RESET line low.

You should not try to:
- Use another pin of the AVR to pull the external RESET line. The pins of the AVR are tristated halfway through the minimum reset time, this releases the RESET line and hence nothing happens.
- Jump to program location 0. Jumping to program location 0 does not clear all the registers and hence you do not have a "clean" reset.



Цитата(Сергей Борщ @ Jul 9 2007, 14:12) *
Оно проверено на вызове загрузчика, который живет по адресу 0x1800 и другой функции по другому адресу. Конкретно на адрес 0x0000 не переходил, но не вижу особой разницы - с точки зрения компилятора это вызов обычной функции, о расположении которой он ничего не знает и не должен знать. С точки зрения линкера адреса функций - обычные symbols, ему тоже все равно чему этот адрес равен конкретно. А опцией -Wl мы просто ему говорим "этот символ (метку) мы определили за тебя

Вот в этом и вопрос знает или не знает ?
линкер должен знать smile.gif
Попробую найти/воспроизвести код с "неправильным" вызовом функции по адресу 0x0000,
а потом попробую Ваш вариант.
Цитата
"Да, но оно требует загрузки R30:R31 и IJMP вместо обычного ®JMP.

Ну вроде как в IAR для этого можно воспользоваться "__z" ?
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jul 9 2007, 11:56
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(singlskv @ Jul 9 2007, 13:44) *
Вот официальное мнение Atmel по этому вопросу:
..
How can I reset my AVR through software?
...
You should not try to:
...
- Jump to program location 0. Jumping to program location 0 does not clear all the registers and hence you do not have a "clean" reset.[/i]

А оценить нужность "чистоты" регистров способен только один ATMEL, один раз для всех проектов, программист just "should not try"! biggrin.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Jul 9 2007, 12:04
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



[quote name='singlskv' date='Jul 9 2007, 14:44' post='270332']
Вот официальное мнение Atmel по этому вопросу:

Software Reset
Question
How can I reset my AVR through software?

Answer
If you want to perform a software reset of your AVR you should use the internal Watchdog. Simply enable it and let it time out. When the Watchdog triggers it resets the program counter back to 0, clears all the registers and performs all the other tasks. This operation gives the same result as pulling the RESET line low.

You should not try to:
- Use another pin of the AVR to pull the external RESET line. The pins of the AVR are tristated halfway through the minimum reset time, this releases the RESET line and hence nothing happens.
- Jump to program location 0. Jumping to program location 0 does not clear all the registers and hence you do not have a "clean" reset.


Естественно, требования к аппаратному сбросу никто не отменял, поэтому ATMEL и не рекомендует "самострел". Ну о то что переход на 0х0000 это не эквивалент RESET ИМХО очевидно.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jul 9 2007, 13:50
Сообщение #21


дятел
*****

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



Цитата(Dog Pawlowa @ Jul 9 2007, 15:56) *
А оценить нужность "чистоты" регистров способен только один ATMEL, один раз для всех проектов, программист just "should not try"! biggrin.gif

biggrin.gif biggrin.gif biggrin.gif
Ну дык Вы же сами намекнули
Цитата(Dog Pawlowa @ Jul 9 2007, 13:01) *
Использую оба решения, но при использовании программного сброса легко упустить инициализацию портов. Например, оставить на выход сигналы программного I2C.

почему они Вас боятся 08.gif
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jul 9 2007, 14:00
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(singlskv @ Jul 9 2007, 16:50) *
почему они Вас боятся 08.gif

Я не люблю наступать на грабли, но даже ATMEL не отнимет мое право сделать ЭТО maniac.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 Текстовая версия Сейчас: 26th July 2025 - 07:44
Рейтинг@Mail.ru


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