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

 
 
> Использование своих секций при компиляции
zuuuuk
сообщение Nov 23 2016, 07:00
Сообщение #1


Частый гость
**

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



Доброго времени суток.
Я применяю ARM freescale.
и в моем проекте я располагаю несколько функций в отдельной секции.
Код
uint8_t fn_ld () __attribute__ ((section(".name1")));
uint8_t fn_md () __attribute__ ((section(".name1")));
uint8_t fn_init () __attribute__ ((section(".name1")));

linker script
Код
..............
    .name1 :
    {
     . = ALIGN(4);
    *(.name1)
    . = ALIGN(4);
    } > m_name1
.............


Подскажите, а возможно расположить в одной секции несколько функций и переменную?
вот так
Код
uint8_t var __attribute__ ((section(".name1")));
uint8_t fn_ld () __attribute__ ((section(".name1")));
uint8_t fn_md () __attribute__ ((section(".name1")));
uint8_t fn_init () __attribute__ ((section(".name1")));


что для этого нужно поправить в коде или линковочном скрипте?





Прикрепленные файлы
Прикрепленный файл  attribute_electronix.zip ( 1.72 килобайт ) Кол-во скачиваний: 5
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
zuuuuk
сообщение Nov 23 2016, 10:00
Сообщение #2


Частый гость
**

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



дело в том, что передо мной стоит задача обновления устройства на базе ARM freescale.

Но канал для обновления медленный. Поэтому принято решение обновлять частично.
Я хочу создать программный модуль.
вот map файл
Код
.mod1           0x0000cc60       0x7c
                0x0000cc60                . = ALIGN (0x4)
*(.name1.all)
.name1.all     0x0000cc60       0x14 ./Sources/mod1.o
                0x0000cc60                fn_all
*(.name1.*)
.name1.var     0x0000cc74        0x1 ./Sources/mod1.o
*fill*         0x0000cc75        0x3
.name1.init    0x0000cc78       0x1c ./Sources/mod1.o
                0x0000cc78                fn_init
.name1.ld      0x0000cc94       0x24 ./Sources/mod1.o
                0x0000cc94                fn_ld
.name1.md      0x0000ccb8       0x24 ./Sources/mod1.o
                0x0000ccb8                fn_md
*(.name1)
                0x0000ccdc                . = ALIGN (0x4)


где функция fn_all () имеет фиксированный адрес и она вызывается из основной программы.
а все остальные функции могут меняться .
Код
uint8_t fn_all () {
  fn_ld ();
  fn_md ();
  return 0;
}


такой модуль будет меньше чем вся программа.
и замену производить только этого модуля.
вот примерно так..



Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 06:48
Рейтинг@Mail.ru


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