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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Загрузчик + основная программа, IAP over Ethernet в MCU
_Макс
сообщение Apr 7 2013, 18:38
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



Стоит задача организовать перепрошивку удаленно, через Ethernet, посредством загрузчика с TFTP сервером и UDP/IP стеком. Если запрос на перепрошивку не был получен в течении ограниченного промежутка времени, необходимо каким-то образом передать DHCP настройки через RAM и перейти на исполнение main() основной программы.
Как выделить место под структуру данных в одинаковых областях RAM для обоих проектов Keil?.
Какие еще выгодные реализации IAP over Ethernet вы можете посоветовать?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 7 2013, 21:00
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(_Макс @ Apr 7 2013, 22:38) *
Как выделить место под структуру данных в одинаковых областях RAM для обоих проектов Keil?.

Через UNINIT-секцию в скрипте линкера.
Go to the top of the page
 
+Quote Post
_Макс
сообщение Apr 8 2013, 08:08
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



Где этот скрипт лежит? Что это за секция такая?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 8 2013, 08:37
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



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

UNINIT - секция, которая не инициализируется при старте приложения. Вам же не нужно, чтобы данные, переданные загрузчиком, были затерты?
Go to the top of the page
 
+Quote Post
_Макс
сообщение Apr 10 2013, 14:09
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



Цитата(aaarrr @ Apr 8 2013, 11:37) *
Лежит в составе проекта (.scat), по умолчанию генерируется средой. Нужно будет написать свой.

Вы уверены? Я не могу найти ни одного фала scat, ни в одном своем проекте.
Go to the top of the page
 
+Quote Post
Lotor
сообщение Apr 10 2013, 15:09
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866



Цитата(_Макс @ Apr 10 2013, 18:09) *
не могу найти ни одного фала scat, ни в одном своем проекте.

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


--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 10 2013, 16:23
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Его может не быть, только если выбрана опция "Simple" в настройках линкера. Соответственно, нужно поменять на "Scattered".
Go to the top of the page
 
+Quote Post
_Макс
сообщение Apr 11 2013, 14:04
Сообщение #8


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



Если у меня основная программа иницирует программный сброс (для того, чтобы передать управление загрузчику), будет ли содержимое оперативки в STM32 обнуляться? Нигде не могу найти это в документации.
Чему равно значение битов в оперативке по умолчанию после подачи питания?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Apr 11 2013, 14:25
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(_Макс @ Apr 11 2013, 17:04) *
будет ли содержимое оперативки в STM32 обнуляться?

Врядли. Скорее останется таким же как до сброса, но расчитывать на жто нельзя.
Цитата(_Макс @ Apr 11 2013, 17:04) *
Чему равно значение битов в оперативке по умолчанию после подачи питания?

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

Вы сэкономить на обнулении ОЗУ хотите?
Go to the top of the page
 
+Quote Post
scifi
сообщение Apr 11 2013, 14:27
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(_Макс @ Apr 11 2013, 18:04) *
Если у меня основная программа иницирует программный сброс (для того, чтобы передать управление загрузчику), будет ли содержимое оперативки в STM32 обнуляться?

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

Цитата(_Макс @ Apr 11 2013, 18:04) *
Нигде не могу найти это в документации.

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

Цитата(_Макс @ Apr 11 2013, 18:04) *
Чему равно значение битов в оперативке по умолчанию после подачи питания?

Мусор.
Go to the top of the page
 
+Quote Post
adnega
сообщение Apr 11 2013, 16:13
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(_Макс @ Apr 11 2013, 18:04) *
Если у меня основная программа иницирует программный сброс (для того, чтобы передать управление загрузчику), будет ли содержимое оперативки в STM32 обнуляться? Нигде не могу найти это в документации.
Чему равно значение битов в оперативке по умолчанию после подачи питания?

ОЗУ процессор не трогает. Периферийные регистры будут в значении "после сброса" (описаны в документации).
Странный вопрос, поскольку до вызова main() состояние ОЗУ должно измениться для инициализированных данных и обнулиться для неинициализированных. Все остальное мусор. Может затереться стеком в любой момент.
Go to the top of the page
 
+Quote Post
_Макс
сообщение Apr 12 2013, 14:21
Сообщение #12


Знающий
****

Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945



Судя по тому, что здесь написано, переменная в секции UNINIT будет инициализирована при переходе к main() или основной программе. А мне нужно, чтобы через переменную (структуру) можно было передать данные наверх: от загрузчика к оснвоной программе и обратно, когда программа инициирует программный сброс.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Apr 12 2013, 14:42
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(_Макс @ Apr 12 2013, 18:21) *
Судя по тому, что здесь написано, переменная в секции UNINIT будет инициализирована при переходе к main() или основной программе. А мне нужно, чтобы через переменную (структуру) можно было передать данные наверх: от загрузчика к оснвоной программе и обратно, когда программа инициирует программный сброс.

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

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

И еще тут

http://www.keil.com/support/docs/3480.htm
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 12 2013, 16:05
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(_Макс @ Apr 12 2013, 18:21) *
Судя по тому, что здесь написано, переменная в секции UNINIT будет инициализирована при переходе к main() или основной программе.

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

Цитата(toweroff @ Apr 12 2013, 18:42) *

Так CARM давно кончился.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Apr 12 2013, 16:13
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(aaarrr @ Apr 12 2013, 20:05) *
Так CARM давно кончился.

точно, discontinued sm.gif
я как-то не обратил внимание, там CA
но директивы-то наследственность не сохранили?
Go to the top of the page
 
+Quote Post

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

 


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


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