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

 
 
> Загрузчик + основная программа, 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
 
Start new topic
Ответов
PoReX
сообщение Apr 18 2013, 12:58
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 112
Регистрация: 1-05-09
Из: Ростов-на-Дону
Пользователь №: 48 518



Цитата(_Макс @ Apr 7 2013, 22:38) *
.......необходимо каким-то образом передать DHCP настройки через RAM и перейти на исполнение main() основной программы.
........
Какие еще выгодные реализации IAP over Ethernet вы можете посоветовать?

Что за контроллер? Например, у STM'ов есть Backup регистры, которые сохраняют свое состояние после перезагрузки контроллера(без отключения питания), а если STM'му подключить батарейку, то состояние этих регистров сохраняется даже после отключения питания(пока не помрет батарейка).

Кстати, а зачем передавать настройки DHCP из bootloader'a в основную программу? Все равно в main'е инициализируете стек? У меня, например, в bootloader'e uip стек, а в основной программе lwip, и там, и там есть DHCP клиент, т.е. никакие настройки от botloader'a о DHCP, DNS, IP не передаются.


--------------------
«У современных мобильных телефонов такая же вычислительная мощь, что и у компьютеров NASA в 60-е годы. И в то время этого хватало, чтобы запустить человека в космос, а сегодня — только чтобы запускать птиц в свиней.»
Go to the top of the page
 
+Quote Post
_Макс
сообщение May 4 2013, 17:07
Сообщение #3


Знающий
****

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



Цитата(PoReX @ Apr 18 2013, 15:58) *
Кстати, а зачем передавать настройки DHCP из bootloader'a в основную программу? Все равно в main'е инициализируете стек? У меня, например, в bootloader'e uip стек, а в основной программе lwip, и там, и там есть DHCP клиент, т.е. никакие настройки от botloader'a о DHCP, DNS, IP не передаются.

STM32F1xx, но баттарейку никто не подлючал. DHCP параетры нужно передать, чтобы после перехода от бутлоадера к основной программе стек был инициализирован уже имеющимися параметрами сети, иначе если стек начнет запрашивать новые, то может получить иной IP, а этого быть не должно. Поэтому суть такова, что сетевые параметры сохраняются в области RAM, и если они там присутствуют и валидные, то стек инициализируются ими, а не по DHCP.
Оба стека lwIP.

Вот так объявлен IP адрес:
Код
struct ip_addr {
  PACK_STRUCT_FIELD(u32_t addr);
} PACK_STRUCT_STRUCT;
PACK_STRUCT_END


Вынес значение сетевых параметров в отдельный файл:
Код
static struct ip_addr g_ip;
static struct ip_addr g_gw;
static struct ip_addr g_mask;
static struct ip_addr g_checksum;


Делается проверка, что значения сетевых параметров в памяти не мусор:
Код
  if( (uint32_t) g_ip ^ (uint32_t) g_gw ^ (uint32_t) g_mask == g_checksum) {
        // Action
  }


Но компилятор отдает:
Код
src\netconf.c(82): error:  #171: invalid type conversion


Как правильно преобразовать тип, чтобы проверить валидность XOR`ом?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 4 2013, 18:48
Сообщение #4


Гуру
******

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



Может так:
Код
struct ip_t {
    uint8_t ip[4];
};


union un_ipAddr {
    struct ip_t IP;
    uint32_t IP_ul;
};
un_ipAddr ip, mask, gate, sum;
void main {
    if ((ip.IP_ul^mask.IP_ul^gate.IP_ul)==sum.IP_ul) {
    }
}





Цитата(_Макс @ May 4 2013, 20:07) *
Как правильно преобразовать тип, чтобы проверить валидность XOR`ом?

CRC бы тут какую, а не xor.
Go to the top of the page
 
+Quote Post
_Макс
сообщение May 5 2013, 09:06
Сообщение #5


Знающий
****

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



Цитата(_Артём_ @ May 4 2013, 21:48) *
Может так:
Код
struct ip_t {
    uint8_t ip[4];
};


union un_ipAddr {
    struct ip_t IP;
    uint32_t IP_ul;
};
un_ipAddr ip, mask, gate, sum;
void main {
    if ((ip.IP_ul^mask.IP_ul^gate.IP_ul)==sum.IP_ul) {
    }
}

Почему разработчик стека использовал выделенный тип для IP адреса вместо одного 32 битного числа? Что теперь нужно делать объединения. Можно как-то без них обойтись используя существующее объявление структуры?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 5 2013, 10:33
Сообщение #6


Гуру
******

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



Цитата(_Макс @ May 5 2013, 12:06) *
Можно как-то без них обойтись используя существующее объявление структуры?

Если очень хочется, то можно:
Код
if(
    (((*(uint32_t*)&g_ip) ^
    (*(uint32_t *)&g_gw)^
    (*(uint32_t *)&g_mask)))==
    (*(uint32_t *)&g_checksum)
  )
{
        // Action
  }
Go to the top of the page
 
+Quote Post
_Макс
сообщение May 5 2013, 13:33
Сообщение #7


Знающий
****

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



Цитата(_Артём_ @ May 5 2013, 13:33) *
Если очень хочется, то можно:
Код
if(
    (((*(uint32_t*)&g_ip) ^
    (*(uint32_t *)&g_gw)^
    (*(uint32_t *)&g_mask)))==
    (*(uint32_t *)&g_checksum)
  )
{
        // Action
  }

От чего звезды и амперсанд появился? У меня ведь переменная глобальная (статическая), и не передается в функцию по ссылке. И указатели тут причем не пойму.

Цитата(alexandermas @ May 5 2013, 13:00) *
потому что кроме ipv4 ,бывает ipv6. а там не 4 байта на адрес, и при подключении другого хедера там будет совершенно другая тема.

Меня это тоже заинтересовало. Можно заставить lwIP работать с IPv4 и IPv6 одновременно, как я понял там это статически задается.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- _Макс   Загрузчик + основная программа   Apr 7 2013, 18:38
- - aaarrr   Цитата(_Макс @ Apr 7 2013, 22:38) Как выд...   Apr 7 2013, 21:00
- - _Макс   Где этот скрипт лежит? Что это за секция такая?   Apr 8 2013, 08:08
- - aaarrr   Лежит в составе проекта (.scat), по умолчанию гене...   Apr 8 2013, 08:37
|- - _Макс   Цитата(aaarrr @ Apr 8 2013, 11:37) Лежит ...   Apr 10 2013, 14:09
|- - Lotor   Цитата(_Макс @ Apr 10 2013, 18:09) не мог...   Apr 10 2013, 15:09
- - aaarrr   Его может не быть, только если выбрана опция ...   Apr 10 2013, 16:23
- - _Макс   Если у меня основная программа иницирует программн...   Apr 11 2013, 14:04
|- - _Артём_   Цитата(_Макс @ Apr 11 2013, 17:04) будет ...   Apr 11 2013, 14:25
|- - scifi   Цитата(_Макс @ Apr 11 2013, 18:04) Если у...   Apr 11 2013, 14:27
|- - adnega   Цитата(_Макс @ Apr 11 2013, 18:04) Если у...   Apr 11 2013, 16:13
- - _Макс   Судя по тому, что здесь написано, переменная в сек...   Apr 12 2013, 14:21
|- - toweroff   Цитата(_Макс @ Apr 12 2013, 18:21) Судя п...   Apr 12 2013, 14:42
- - aaarrr   Цитата(_Макс @ Apr 12 2013, 18:21) Судя п...   Apr 12 2013, 16:05
|- - toweroff   Цитата(aaarrr @ Apr 12 2013, 20:05) Так C...   Apr 12 2013, 16:13
|- - aaarrr   Цитата(toweroff @ Apr 12 2013, 20:13) но ...   Apr 12 2013, 16:50
- - alexandermas   потому что кроме ipv4 ,бывает ipv6. а там не 4 ба...   May 5 2013, 10:00
- - aaarrr   Цитата(_Артём_ @ May 5 2013, 14:33) Если ...   May 5 2013, 13:47
|- - _Артём_   Цитата(aaarrr @ May 5 2013, 16:47) Так не...   May 5 2013, 13:53
||- - aaarrr   Цитата(_Артём_ @ May 5 2013, 17:53) И? Эт...   May 5 2013, 14:13
||- - _Артём_   Цитата(aaarrr @ May 5 2013, 17:13) Но воо...   May 5 2013, 14:16
||- - aaarrr   Цитата(_Артём_ @ May 5 2013, 18:16) Чтени...   May 5 2013, 14:24
||- - _Артём_   Цитата(aaarrr @ May 5 2013, 17:24) Оно. А...   May 5 2013, 14:44
||- - aaarrr   Цитата(_Артём_ @ May 5 2013, 18:44) Не по...   May 5 2013, 15:28
||- - _Артём_   Цитата(aaarrr @ May 5 2013, 18:28) Наприм...   May 5 2013, 15:45
|- - _Макс   Цитата(aaarrr @ May 5 2013, 16:47) Тут к ...   May 5 2013, 15:35
|- - aaarrr   Цитата(_Макс @ May 5 2013, 19:35) В моем ...   May 5 2013, 15:42
|- - _Макс   Цитата(aaarrr @ May 5 2013, 18:42) Констр...   May 5 2013, 21:22
|- - aaarrr   Цитата(_Макс @ May 6 2013, 01:22) Почему ...   May 5 2013, 21:31
- - _Макс   D имеющемся у меня коде, значение IP адреса присва...   May 6 2013, 17:23
- - aaarrr   1. Из-за эндианизма 2. Можете   May 6 2013, 17:29
- - _Макс   Можно ли написать вот так, чтобы не выдумывать имя...   May 7 2013, 13:09
|- - aaarrr   Цитата(_Макс @ May 7 2013, 17:09) Можно л...   May 7 2013, 17:22
- - toweroff   Нехилый парольчег На почти 80 мегов   May 7 2013, 14:16
- - _Макс   Как я понимаю, в scatter файле можно только для .o...   May 7 2013, 20:53
- - toweroff   В скаттере объявите именованную область и адрес с ...   May 7 2013, 21:04
- - _Макс   Почему LR_IROM1, содержит вложенные ER_IROM1 и RW_...   May 7 2013, 22:11
- - _Макс   У меня получился вот такой scetter file: КодLR_IRO...   May 9 2013, 17:41
- - toweroff   const в описании не забыли?   May 10 2013, 05:38


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 01:18
Рейтинг@Mail.ru


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