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

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


Знающий
****

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



Цитата(aaarrr @ May 5 2013, 16:47) *
Тут к букварю надо обратиться.

В моем букваре таких конструкций нету, а в гугле, что не напишешь, так он про С++ только и говорит. Что посоветуете?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 5 2013, 15:42
Сообщение #32


Гуру
******

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



Цитата(_Макс @ May 5 2013, 19:35) *
В моем букваре таких конструкций нету, а в гугле, что не напишешь, так он про С++ только и говорит. Что посоветуете?

Конструкция более чем стандартная:
Код
*(uint32_t*)&g_ip

      &g_ip - берем адрес g_ip
(uint32_t*) - преобразуем к указателю на uint32_t
          * - обращаемся к значению по новому указателю

Все эти части в букваре точно должны быть.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение May 5 2013, 15:45
Сообщение #33


Гуру
******

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



Цитата(aaarrr @ May 5 2013, 18:28) *
Например, DDI0337E_cortex_m3_r1p1_trm.pdf 8-35 (стр. 179):

Спасибо.
Go to the top of the page
 
+Quote Post
_Макс
сообщение May 5 2013, 21:22
Сообщение #34


Знающий
****

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



Цитата(aaarrr @ May 5 2013, 18:42) *
Конструкция более чем стандартная:
Код
*(uint32_t*)&g_ip

      &g_ip - берем адрес g_ip
(uint32_t*) - преобразуем к указателю на uint32_t
          * - обращаемся к значению по новому указателю

Почему делается через указатель, а не напрямую?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 5 2013, 21:31
Сообщение #35


Гуру
******

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



Цитата(_Макс @ May 6 2013, 01:22) *
Почему делается через указатель, а не напрямую?

На этот вопрос Вам в свое время уже компилятор ответил:
Цитата
invalid type conversion

Нельзя присвоить числу значение структуры. А вот через указатель можно, но при этом ответственность
за допустимость и корректность такой операции целиком на программисте.
Go to the top of the page
 
+Quote Post
_Макс
сообщение May 6 2013, 17:23
Сообщение #36


Знающий
****

Группа: Участник
Сообщений: 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;

Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 6 2013, 17:29
Сообщение #37


Гуру
******

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



1. Из-за эндианизма
2. Можете
Go to the top of the page
 
+Quote Post
_Макс
сообщение May 7 2013, 13:09
Сообщение #38


Знающий
****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
toweroff
сообщение May 7 2013, 14:16
Сообщение #39


Гуру
******

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



Нехилый парольчег sm.gif
На почти 80 мегов
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 7 2013, 17:22
Сообщение #40


Гуру
******

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



Цитата(_Макс @ May 7 2013, 17:09) *
Можно ли написать вот так, чтобы не выдумывать имя для типа...

Можно.
Go to the top of the page
 
+Quote Post
_Макс
сообщение May 7 2013, 20:53
Сообщение #41


Знающий
****

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



Как я понимаю, в scatter файле можно только для .o файлов задать место расположение. Я объявил и определил структуры в файле .h потому-что у меня там только данные. Каким изящным способом мне превратить его в индивидуальный .o файл для линкера?

Сообщение отредактировал _Макс - May 7 2013, 20:54
Go to the top of the page
 
+Quote Post
toweroff
сообщение May 7 2013, 21:04
Сообщение #42


Гуру
******

Группа: Свой
Сообщений: 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)
  }
}
Go to the top of the page
 
+Quote Post
_Макс
сообщение May 7 2013, 22:11
Сообщение #43


Знающий
****

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



Почему LR_IROM1, содержит вложенные ER_IROM1 и RW_IRAM1? Будто область оперативки является вложенной по отношению ко флешу.

Сообщение отредактировал _Макс - May 7 2013, 22:11
Go to the top of the page
 
+Quote Post
_Макс
сообщение May 9 2013, 17:41
Сообщение #44


Знающий
****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
toweroff
сообщение May 10 2013, 05:38
Сообщение #45


Гуру
******

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



const в описании не забыли?
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 Текстовая версия Сейчас: 27th June 2025 - 19:20
Рейтинг@Mail.ru


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