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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Массив по заданному адресу MDK-ARM (Keil)
quandr
сообщение Jul 8 2018, 16:40
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 4-09-10
Пользователь №: 59 282



Цитата(Forger @ Jul 8 2018, 19:08) *
Эх, совсем молодежь обленела .... angry.gif
http://www.keil.com/support/man/docs/armli...62066000571.htm

Имхо, вместо размещения объектов по конкретному адресу, лучше использовать размещение в секциях, а размещение самих секций делать в соотв. scatter файле (скрипт линкера).

Если бы молодость, было бы веселее. А так полтинник, и башка занята чем попало... Кейл только вкусов в коктейль добавил ))
Go to the top of the page
 
+Quote Post
Forger
сообщение Jul 8 2018, 16:45
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 186
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(quandr @ Jul 8 2018, 19:40) *
Если бы молодость, было бы веселее. А так полтинник, и башка занята чем попало...

Сочувствую 05.gif
Все когда-то начнем тупить на абсолютно ровном месте ...



--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
__inline__
сообщение Jul 9 2018, 03:26
Сообщение #18


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 5-09-17
Пользователь №: 99 126



Цитата(Forger @ Jul 8 2018, 17:08) *
Эх, совсем молодежь обленела .... angry.gif
http://www.keil.com/support/man/docs/armli...62066000571.htm

Имхо, вместо размещения объектов по конкретному адресу, лучше использовать размещение в секциях, а размещение самих секций делать в соотв. scatter файле (скрипт линкера).


Выше я дал пример (который почему-то все проигнорировали), что размещение в секции - ещё не гарантирует фактического туда попадания.
Поэтому размещение по конкретному адресу - способ надёжнее
Go to the top of the page
 
+Quote Post
Forger
сообщение Jul 9 2018, 06:20
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 186
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(__inline__ @ Jul 9 2018, 06:26) *
Выше я дал пример (который почему-то все проигнорировали), что размещение в секции - ещё не гарантирует фактического туда попадания.


В вашем примере не объявлена секция SRAM3, а объявлен регион с таким названием.
Короче, вот тут почитайте: http://www.keil.com/support/man/docs/armcl...62066000009.htm

Для примера вот так в Keil я делал RAM функции ("стандартный" метод меня не устраивает):

scatter:
Код
RW_IRAM1 0x20000000 0x00004000; RW data
{  
    *.o (RAM_FUNCTION)    
    .ANY (+RW +ZI)
}


в исходниках:

Код
#define RAM_FUNCTION __attribute__ ((section("RAM_FUNCTION")))

static RAM_FUNCTION Status getStatus() ...
RAM_FUNCTION Status waitForLastOperation(uint32_t timeout) ...
RAM_FUNCTION void stm32l1::Flash::enableRunPowerDown() ....


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jul 9 2018, 06:21
Сообщение #20


Гуру
******

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



Цитата(__inline__ @ Jul 8 2018, 15:50) *
Что я сделал не так?

В приведенном скаттер-файле нет секции SRAM3.
Go to the top of the page
 
+Quote Post
HardEgor
сообщение Jul 9 2018, 06:31
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 218
Регистрация: 3-03-06
Из: Tomsk
Пользователь №: 14 925



Цитата(__inline__ @ Jul 9 2018, 10:26) *
Выше я дал пример (который почему-то все проигнорировали), что размещение в секции - ещё не гарантирует фактического туда попадания.

Пример неудачный - естественно массив в 1024 байте никто не сможет разместить в секцию размером 8 байт.
Но в общем случае да, если свободной памяти под ноль, то при оптимизации может в другую секцию засунуть.
Go to the top of the page
 
+Quote Post
Forger
сообщение Jul 9 2018, 06:34
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 186
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(HardEgor @ Jul 9 2018, 09:31) *
Пример неудачный - естественно массив в 1024 байте никто не сможет разместить в секцию размером 8 байт.
Но в общем случае да, если свободной памяти под ноль, то при оптимизации может в другую секцию засунуть.

Не засунет, линкер просто выкинет соотв. ошибку, бинарник не будет создан.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
__inline__
сообщение Jul 9 2018, 09:36
Сообщение #23


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 5-09-17
Пользователь №: 99 126



ок, попробую разобраться
Go to the top of the page
 
+Quote Post
__inline__
сообщение Jul 9 2018, 13:22
Сообщение #24


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 5-09-17
Пользователь №: 99 126



Цитата(Forger @ Jul 9 2018, 07:34) *
Не засунет, линкер просто выкинет соотв. ошибку, бинарник не будет создан.

Разобрался. Ошибка была в том, что сделал регионы, но секции не засунул. Потому что считал что регион=секция. Оказалось сложнее.
Получилось вот так:
Код
; Scatter-Loading Description File

LR_FLASH 0x08000000 0x00200000
{

ER_FLASH 0x08000000 0x00200000
{
  *.o (RESET, +First)
  *(InRoot$$Sections)
  .ANY (+RO)
}

DTCM 0x20000000 0x00020000
{
  *.o (DTCM)
}

AXI 0x24000000 0x00080000
{
  .ANY (+RW +ZI)
}

SRAM12 0x30000000 0x00040000
{
  *.o (SRAM12)
}

SRAM3 0x30040000 0x00008000
{
  *.o (SRAM3)
}

; SRAM4 0x38000000 0x00010000
; {
;  *.o (SRAM4)
; }

}


Я доволен : всё пихается куда надо и работает sm.gif
Go to the top of the page
 
+Quote Post
Forger
сообщение Jul 9 2018, 13:26
Сообщение #25


Профессионал
*****

Группа: Свой
Сообщений: 1 186
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(__inline__ @ Jul 9 2018, 16:22) *
Разобрался.

Дык, это и не удивительно, когда комрады тут все разжевали до косточек и осталось лишь проглотить sm.gif

Scatter файл позволяет делать очень интересные вещи ... , а это - лишь цветочки wink.gif

Вместо такой записи, где две области примыкают друг к другу:
Код
SRAM12 0x30000000 0x00040000
{
  *.o (SRAM12)
}

SRAM3 0x30040000 0x00008000
{
  *.o (SRAM3)
}


можно писать чуть проще:

Код
SRAM123 0x30000000 0x000С0000
{
  *.o (SRAM12)
  *.o (SRAM3)
}


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
__inline__
сообщение Jul 9 2018, 13:28
Сообщение #26


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 5-09-17
Пользователь №: 99 126



Цитата(Forger @ Jul 9 2018, 14:26) *
Дык, это и не удивительно, когда комрады тут все разжевали до косточек и осталось лишь проглотить sm.gif

Scatter файл позволяет делать и не такое, а это - лишь цветочки wink.gif

Вам спасибо персонально! sm.gif С ваших слов понял, что секция и регион -не одно и тоже
Go to the top of the page
 
+Quote Post
Forger
сообщение Jul 9 2018, 13:38
Сообщение #27


Профессионал
*****

Группа: Свой
Сообщений: 1 186
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(__inline__ @ Jul 9 2018, 16:28) *
Вам спасибо персонально! sm.gif С ваших слов понял, что секция и регион -не одно и тоже

Пожалуйста ))

Но в принципе, все это есть в мануале, довольно популярно расписано.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
__inline__
сообщение Jul 16 2018, 05:26
Сообщение #28


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 5-09-17
Пользователь №: 99 126



Продолжая о скаттерах...

Понадобилось мне сделать буфер в RAM, который не трётся при сбросе CPU (для сохранения состояния).

Объявил регион, секцию - обязательно указываем UNINIT:

Код
AXI3 0x2405B500 UNINIT 0x00024B00;STATE
{
  *.o (STATE)
}


В программе - обязательно указываем zero_init:

Код
u8 STATE[0x00024B00] __attribute__((section("STATE"),zero_init));


Кейла тут говорит, что zero_init обязателен - типа косяк: SYMPTOM/ CAUSE/ RESOLUTION/ => http://www.keil.com/support/docs/3480.htm

Проверил, действительно без указания zero_init память трётся при сбросе CPU.

Сообщение отредактировал __inline__ - Jul 16 2018, 05:38
Go to the top of the page
 
+Quote Post
Forger
сообщение Jul 16 2018, 07:57
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 186
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(__inline__ @ Jul 16 2018, 08:26) *
Продолжая о скаттерах...

Полезная инфа!
Судя по приписке, это справедливо только для маленьких объектов размером до 8 байт.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd September 2018 - 08:07
Рейтинг@Mail.ru


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