|
Загрузчик + основная программа, IAP over Ethernet в MCU |
|
|
|
May 5 2013, 15:42
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(_Макс @ May 5 2013, 19:35)  В моем букваре таких конструкций нету, а в гугле, что не напишешь, так он про С++ только и говорит. Что посоветуете? Конструкция более чем стандартная: Код *(uint32_t*)&g_ip
&g_ip - берем адрес g_ip (uint32_t*) - преобразуем к указателю на uint32_t * - обращаемся к значению по новому указателю Все эти части в букваре точно должны быть.
|
|
|
|
|
May 5 2013, 21:22
|
Знающий
   
Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945

|
Цитата(aaarrr @ May 5 2013, 18:42)  Конструкция более чем стандартная: Код *(uint32_t*)&g_ip
&g_ip - берем адрес g_ip (uint32_t*) - преобразуем к указателю на uint32_t * - обращаемся к значению по новому указателю Почему делается через указатель, а не напрямую?
|
|
|
|
|
May 5 2013, 21:31
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(_Макс @ May 6 2013, 01:22)  Почему делается через указатель, а не напрямую? На этот вопрос Вам в свое время уже компилятор ответил: Цитата invalid type conversion Нельзя присвоить числу значение структуры. А вот через указатель можно, но при этом ответственность за допустимость и корректность такой операции целиком на программисте.
|
|
|
|
|
May 6 2013, 17:23
|
Знающий
   
Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945

|
D имеющемся у меня коде, значение IP адреса присваивается с помощью функции определенной директивой define Код #define IP4_ADDR(ipaddr, a,b,c,d) \ (ipaddr)->addr = htonl(((u32_t)((a) & 0xff) << 24) | \ ((u32_t)((b) & 0xff) << 16) | \ ((u32_t)((c) & 0xff) << 8) | \ (u32_t)((d) & 0xff)) Присвоение статического адреса: Код IP4_ADDR(&ipaddr, IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3); IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1 , NETMASK_ADDR2, NETMASK_ADDR3); IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); Почему? Могу ли я просто написать вот так, когда присваиваю имеющийся динамический адрес в runtime: Код ipaddr.addr = g_ip.addr;
|
|
|
|
|
May 7 2013, 13:09
|
Знающий
   
Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945

|
Можно ли написать вот так, чтобы не выдумывать имя для типа, который используется в одном экземпляре: Код static struct { u32_t build; u8_t login[16]; u8_t password[16]; } g_config; Компилятор ошибки не выдает, но я не припомню, чтобы где-то видел такого вида маневры.
Сообщение отредактировал _Макс - May 7 2013, 17:03
|
|
|
|
|
May 7 2013, 21:04
|

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

|
В скаттере объявите именованную область и адрес с диапазоном, куда это складывать В тексте можно пользоваться директивой Код __attribute__ ((section("NAMED_AREA"))) перед объявлением например, для складывания в SRAM не только RW данных, но и того, что нужно поместить именно туда (область RAMFUNC), скаттер будет примерно такого вида Код ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; *************************************************************
LR_IROM1 0x20000000 0x00080000 { ; load region size_region ER_IROM1 0x20000000 0x00080000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } RW_IRAM1 0x80000000 0x0000E000 { ; RW data *.o (RAMFUNC) .ANY (+RW +ZI) } }
|
|
|
|
|
May 9 2013, 17:41
|
Знающий
   
Группа: Участник
Сообщений: 691
Регистрация: 24-05-07
Пользователь №: 27 945

|
У меня получился вот такой scetter file: Код LR_IROM1 0x08000000 0x00040000 { ; load region size_region ER_IROM1 0x08000000 0x00040000 {; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } ER_IROM2 0x803F800 { *(G_CONFIG +RO) } RW_IRAM1 0x20000000 0x00010000 {; RW data .ANY (+RW +ZI) } RW_IRAM2 0x2000FFF4 {; IP Data *(G_IP) } } Данные с атрибутом G_CONFIG после компиляции, в map файле отображаются с типом RW, несмотря на то, что размещены во флеше и RO указано явно. Что неправильно?
Сообщение отредактировал _Макс - May 9 2013, 17:41
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|