Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: __attribute__((at(address)))
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
toweroff
Добрый день

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

Вне зависимости от размещения, переменная должна располагаться в коде (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) -- константы?
или я вообще неправильно делаю и нужно как-то по-другому?
редактор
Скорее всего __Vector не видится в данном файле.
adnega
Может, правильнее выделить для этих целей секцию?
aaarrr
А почему бы не положить fw_version сразу после __Vectors, обеспечив ему тем самым фиксированное смещение? В чем сакральный смысл FW_OFFSET?
toweroff
Здесь идея относительности вот в чем - допустим, я хочу поменять размещение. Я это делаю один раз в одном месте
Если бутлоадеру что-то нужно узнать, он просто лезет по фиксированным смещениям от начала и все, мне же не придется помнить все места, где я забыл поправить абсолютные адреса на новые
aaarrr, а я именно так и сделал, практически. Я импортирую в стартап имя таблицы, размещаю адрес таблицы сразу за векторами (то есть точно знаю расположение от начала), а уже в таблице имею и константы, и указатели на некоторые функции приложения. В принципе да, сакрального смысла в FW_OFFSET никакого, главное - точное расположение относительно начала (не абсолютное). В ASM я такое могу сделать, а вот в С - решение не нашел

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

да через секцию-то не проблема. Я думал, что есть возможность через __at сделать, не трогая скаттер
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.