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

 
 
> __attribute__((at(address))), не пойму, как правильно
toweroff
сообщение Mar 3 2015, 13:47
Сообщение #1


Гуру
******

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



Добрый день

пытаюсь сделать следующее:

Вне зависимости от размещения, переменная должна располагаться в коде (const uint32_t) с фиксированным смещением относительно от начала LoadRegion
Само начало экспортируется из стартапа в виде __Vectors


Код
                AREA    RESET, DATA, READONLY
                EXPORT  __Vectors

__Vectors       DCD     __initial_sp             ; Top of Stack
                DCD     Reset_Handler            ; Reset Handler
                DCD     NMI_Handler              ; NMI Handler
                DCD     HardFault_Handler        ; Hard Fault Handler


Код
#define FW_OFFSET 500
extern const uint32_t __Vectors;
const uint32_t    fw_version    __attribute__((at(__Vectors+FW_OFFSET))) = FW_VERSION;


на что получаю:
Код
App\boot.c(29): error:  #28: expression must have a constant value


компилятор не понимает, что оба значения (__Vectors и FW_OFFSET) -- константы?
или я вообще неправильно делаю и нужно как-то по-другому?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
редактор
сообщение Mar 4 2015, 08:57
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



Скорее всего __Vector не видится в данном файле.


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
adnega
сообщение Mar 4 2015, 09:23
Сообщение #3


Гуру
******

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



Может, правильнее выделить для этих целей секцию?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 4 2015, 09:36
Сообщение #4


Гуру
******

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



А почему бы не положить fw_version сразу после __Vectors, обеспечив ему тем самым фиксированное смещение? В чем сакральный смысл FW_OFFSET?
Go to the top of the page
 
+Quote Post
toweroff
сообщение Mar 4 2015, 12:47
Сообщение #5


Гуру
******

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



Здесь идея относительности вот в чем - допустим, я хочу поменять размещение. Я это делаю один раз в одном месте
Если бутлоадеру что-то нужно узнать, он просто лезет по фиксированным смещениям от начала и все, мне же не придется помнить все места, где я забыл поправить абсолютные адреса на новые
aaarrr, а я именно так и сделал, практически. Я импортирую в стартап имя таблицы, размещаю адрес таблицы сразу за векторами (то есть точно знаю расположение от начала), а уже в таблице имею и константы, и указатели на некоторые функции приложения. В принципе да, сакрального смысла в FW_OFFSET никакого, главное - точное расположение относительно начала (не абсолютное). В ASM я такое могу сделать, а вот в С - решение не нашел

Цитата(adnega @ Mar 4 2015, 12:23) *
Может, правильнее выделить для этих целей секцию?

да через секцию-то не проблема. Я думал, что есть возможность через __at сделать, не трогая скаттер
Go to the top of the page
 
+Quote Post

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

 


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


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