coolibin
Jun 5 2009, 09:15
IAR 4.41A, JLink, AT91sam7s256. Запускаю дебаг своей програмулины, прошивается флешка, все работает нормально, включаю девайс без IAR'а т. е. обычным передергиванием питания, нихотит работать((( В чем разница этих двух случаев?
LessNik
Jun 5 2009, 09:42
А у Вас точно флеш прошивается? Может отладка в RAM происходит? С какого адреса стартует программа в отладчике?
причиной можте быть что нет сигнала rst при включении питания, а при запуске в отладчике сигнал сброса формирует jlink
coolibin
Jun 5 2009, 10:09
А как узнать с какого адреса запускается прога?
Флэшка шьется точно! Диодиками я моргаю и тат и так, т. е. прога стартапится, запускается, а вот с микрухой "пообщатся" не удается во втором случае. Я не правильно задал вопрос, должна ли вообще быть какая нить разница или это одно и тоже?
Сергей Борщ
Jun 5 2009, 10:11
Цитата(coolibin @ Jun 5 2009, 12:15)

В чем разница этих двух случаев?
Если в настройках дебагера прописан какой-то .mac, то разница в том, что под дебагером при некоторых действиях исполняются команды из этого файла. В частности, там могут быть какие-то команды, исполняемые при сбросе или сразу после загрузки. Эти команды могут как-то настраивать периферию.
coolibin
Jun 5 2009, 10:41
Да, .mac файл указан и там прописаны команды reset, watchdog disable и т. д., но я считал что при дебаге из флэш он не юзается
LessNik
Jun 5 2009, 10:55
Посмотрите, может там есть команда Remap, например __writeMemory32(0x00000001,0xFFFFFF00,"Memory");
Если она присутствует, то память RAM отобразится на адрес 0x00 и программа будет выполняться из RAM, иначе Flash отобразится на адрес 0x00 и программа будет выполняться из Flash. При передергивании питания Remap не произойдет и программа запустится из Flash
coolibin
Jun 5 2009, 11:10
Файлы .mac я брал стандартные атмеловские для RAM и отдельно для FLASH, хотя в файле для флеш есть такая функция:
CheckRemap()
{
//* Read the value at 0x0
__mac_i =__readMemory32(0x00000000,"Memory");
__mac_i =__mac_i+1;
__writeMemory32(__mac_i,0x00,"Memory");
__mac_pt =__readMemory32(0x00000000,"Memory");
if (__mac_i == __mac_pt)
{
__message "------------------------------- The Remap is done ----------------------------------------";
//* Toggel RESET The remap
__writeMemory32(0x00000001,0xFFFFFF00,"Memory");
} else {
__message "------------------------------- The Remap is NOT -----------------------------------------";
}
}
т. е. при определенном условии он сделает remap. Но, вопрос уже в другом. Моя программа должна вести себя одинаково в обоих вышеописанных случаях, например, время выполнения?
LessNik
Jun 5 2009, 11:41
Программа из RAM выпоняется быстрее, чем из Flash. Нужно настраить wait state(0-3) при выпонении программы из Flash.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.