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

Загрузчик + основная программа

Стоит задача организовать перепрошивку удаленно, через Ethernet, посредством загрузчика с TFTP сервером и UDP/IP стеком. Если запрос на перепрошивку не был получен в течении ограниченного промежутка времени, необходимо каким-то образом передать DHCP настройки через RAM и перейти на исполнение main() основной программы.

Как выделить место под структуру данных в одинаковых областях RAM для обоих проектов Keil?.

Какие еще выгодные реализации IAP over Ethernet вы можете посоветовать?

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


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

Как выделить место под структуру данных в одинаковых областях RAM для обоих проектов Keil?.

Через UNINIT-секцию в скрипте линкера.

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


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

Лежит в составе проекта (.scat), по умолчанию генерируется средой. Нужно будет написать свой.

 

UNINIT - секция, которая не инициализируется при старте приложения. Вам же не нужно, чтобы данные, переданные загрузчиком, были затерты?

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


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

Лежит в составе проекта (.scat), по умолчанию генерируется средой. Нужно будет написать свой.

Вы уверены? Я не могу найти ни одного фала scat, ни в одном своем проекте.

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


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

не могу найти ни одного фала scat, ни в одном своем проекте.

Плохо ищите значит. Смотрите в опциях проекта, где Ваш scatter файл живет по умолчанию.

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


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

Его может не быть, только если выбрана опция "Simple" в настройках линкера. Соответственно, нужно поменять на "Scattered".

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


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

Если у меня основная программа иницирует программный сброс (для того, чтобы передать управление загрузчику), будет ли содержимое оперативки в STM32 обнуляться? Нигде не могу найти это в документации.

Чему равно значение битов в оперативке по умолчанию после подачи питания?

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


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

будет ли содержимое оперативки в STM32 обнуляться?

Врядли. Скорее останется таким же как до сброса, но расчитывать на жто нельзя.

Чему равно значение битов в оперативке по умолчанию после подачи питания?

Скорее всего будет в неопределённом состоянии.

 

Вы сэкономить на обнулении ОЗУ хотите?

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


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

Если у меня основная программа иницирует программный сброс (для того, чтобы передать управление загрузчику), будет ли содержимое оперативки в STM32 обнуляться?

Нет, не будет.

 

Нигде не могу найти это в документации.

Это как бы подразумевается. Если бы обнулялось, у компиляторов была бы опция "не обнулять программно".

 

Чему равно значение битов в оперативке по умолчанию после подачи питания?

Мусор.

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


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

Если у меня основная программа иницирует программный сброс (для того, чтобы передать управление загрузчику), будет ли содержимое оперативки в STM32 обнуляться? Нигде не могу найти это в документации.

Чему равно значение битов в оперативке по умолчанию после подачи питания?

ОЗУ процессор не трогает. Периферийные регистры будут в значении "после сброса" (описаны в документации).

Странный вопрос, поскольку до вызова main() состояние ОЗУ должно измениться для инициализированных данных и обнулиться для неинициализированных. Все остальное мусор. Может затереться стеком в любой момент.

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


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

Судя по тому, что здесь написано, переменная в секции UNINIT будет инициализирована при переходе к main() или основной программе. А мне нужно, чтобы через переменную (структуру) можно было передать данные наверх: от загрузчика к оснвоной программе и обратно, когда программа инициирует программный сброс.

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


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

Судя по тому, что здесь написано, переменная в секции UNINIT будет инициализирована при переходе к main() или основной программе. А мне нужно, чтобы через переменную (структуру) можно было передать данные наверх: от загрузчика к оснвоной программе и обратно, когда программа инициирует программный сброс.

http://www.keil.com/support/man/docs/ca/ca_noinit.htm

 

проверять некое значение в структуре на валидность данных в ней (например, 0x55555555), в зависимости от этого либо инициализировать, либо использовать данные в ней

 

И еще тут

 

http://www.keil.com/support/docs/3480.htm

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


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

Судя по тому, что здесь написано, переменная в секции UNINIT будет инициализирована при переходе к main() или основной программе.

Во-первых, не всегда, а во-вторых, там же написано, как этого избежать.

 

Так CARM давно кончился.

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


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

Так CARM давно кончился.

точно, discontinued :)

я как-то не обратил внимание, там CA

но директивы-то наследственность не сохранили?

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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