Перейти к содержанию
    

загрузка программы

В общем, вопрос просто как заставить грузиться программу в микроконтроллере с нужного мне места (точнее быть увереным что сначала запускается прогрмамма) (при условии, что в программе есть запись во флешь)? Просто при запуске устройства программа не каждый раз функционирует, а именно включил-выключил устройство, то работает, то нет. На устройстве есть ключ, переключая который вы включаем светодиод и вкл. бипер, затем принимаем данные и записываем во флешь. По ощущением просто программа запускается в произвольном месте. Почему я думаю что это программа? Да потому-то если убрать запись во флешь и оставить вектора прерываний на своих местах, а не переносить в область NRWW, тогда все выполняется нормально (за исключением записи естественно :))

З.Ы. я понимаю что написано довольно "расплывчато" но все же я надеюсь мне кто-нибудь поможет :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По идее у Вас должен быть адрес с которого начинается выполнение программы, например, нулевой. По этому адресу надо разместить переход на начало программы. Иногда по стартовому адресу находится бутлоадер, который говорит куда прыгнуть в зависимости от разных условий, напрмер, от того как включены перемычки. Ну и еще, какой контроллер используется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для начала нужно указать тип МК. Выполнение программы у большинства МК начинается с адреса, указанного по вектору сброса. Если у вас сброс формируется нестабильно (например, отсутствует супервизор, формирующий сигнал сброса, а встроенной в МК схемы BOR/BOD нету), то может быть все что угодно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По идее у Вас должен быть адрес с которого начинается выполнение программы, например, нулевой. По этому адресу надо разместить переход на начало программы. Иногда по стартовому адресу находится бутлоадер, который говорит куда прыгнуть в зависимости от разных условий, напрмер, от того как включены перемычки. Ну и еще, какой контроллер используется.

 

контролер ATmega8. Бутлоадер у него начинаеться с адресов 1С00 (BOOTSZ=00).

 

 

если использовать стандартный файл настроек то lnkm8s.xcl

-Z(CODE)INTVEC=0-25 
-H1895 -h(CODE)0-25
-Z(CODE)INITTAB =26-1FFF
-Z(CODE)CODE=26-1FFF
-Z(CODE)TINY_FLASH=1C26-1FFF
-Z(CODE)CHECKSUM#1FFF

 

То программа работает прекрасно (за исключением записи во флешь) … Но если перенести вектора прерываний(даже без записи) в NRWW область то тут начинаются проблемы(описанные выше) …

 

-Z(CODE)INTVEC=1C00-1C25 
-H1895 -h(CODE)1C00-1C25

-Z(CODE)INITTAB=0-1FFF
-Z(CODE)CODE=0-1FFF
-Z(CODE)TINY_FLASH=1C26-1FFF
-Z(CODE)CHECKSUM#1FFF

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но если перенести вектора прерываний(даже без записи) в NRWW область то тут начинаются проблемы(описанные выше) …
А вы не забыли во втором случае запрограммировать фуз BOOTRST? иначе как контроллер узнает, что ветор старта вы ему перенесли?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вы не забыли во втором случае запрограммировать фуз BOOTRST? иначе как контроллер узнает, что ветор старта вы ему перенесли?

Полность согласен! ... нет придела человеческой невнимательности :(

 

Стало работать довольно стабильно НО (как всегда есть это но) иногда слитает некоторые значения флешь памяти,

post-38096-1221489835_thumb.jpg

(желтым отмечены "слетевшая" часть памяти) из-за чего бы это могло быть?

Изменено пользователем TookeR

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

(желтым отмечены "слетевшая" часть памяти) из-за чего бы это могло быть?
Похоже она не слетела, а не записалась.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похоже она не слетела, а не записалась.

 

Ну с самых первых моментов она же была записана туда ... а после нескольких перезапусков (вкл. выкл. питания) оказываеться стертой/ незаписаной.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а после нескольких перезапусков (вкл. выкл. питания) оказываеться стертой/ незаписаной.
Супервизор (BOD) включен? Похоже, ваша программа при просадке питания начинает выполнять случайные участки кода и попадает на процедуру стирания.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я тоже так что BOD отключен ... проверил включен был ... взял другую микросхему провожу тесты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость Цыкетчик
при просадке питания начинает выполнять случайные участки кода и попадает на процедуру стирания.

 

Ну я на этот случай непосредственно перед SPM делаю проверку было ли санкционировано выполнение SPM команды. И для безопасности у меня в программе всего одна команда SPM

Изменено пользователем Цыкетчик

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Слетания флеши больше не происходит на новом микрике, но все же тот эффект (писк бипера и/или не реагирования на переключения ключа) остались, хотя стали намного - намного реже! ... Как же от них избавиться полностью ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...