Easyelectronics.ru

Электроника для всех
Текущее время: 14 дек 2019, 21:35

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Bit-band - через линкер.
СообщениеДобавлено: 26 июн 2015, 08:24 
Старожил
Аватара пользователя

Зарегистрирован: 30 мар 2015, 23:56
Сообщения: 756
Может кому и пригодится...
Код для линкера GCC.
Код:
MEMORY
{
    ROM  (rx) : ORIGIN = 0x08000000, LENGTH = __
    RAM (rwx) : ORIGIN = 0x20000000, LENGTH = __
    BITRAM (rw) : ORIGIN = 0x22000000, LENGTH = 2048K // - LENGTH(RAM) * 128
}
----
/* SRAM base address in the bit-band region*/
   _sramflag = .;
   sflagadres =  ((_sramflag - ORIGIN(RAM)) << 5 );
    .flag  (NOLOAD):
    {
       . += sflagadres;
       . = ALIGN(4);
       _sflag = .;
       KEEP(*(.flag))
       . = ALIGN(128);
       _eflag = .;
    } > BITRAM
    _eramflag = ((_eflag - _sflag) >> 5);
/* SRAM base address in the bit-band region*/
   .bss (NOLOAD):
   {
      __bss_start__ = .;
        . += _eramflag;
      *(.bss*)
      *(COMMON)
      __bss_end__ = .;
   } > RAM


#define _FLAG __attribute__ ((section(".flag")))
После чего любой глобальный флаг автоматически становится атомарным. В добавок - уменьшается расход памяти. Но главное - простота объявления.
volatile uint32_t tmp_name_flag _FLAG;

_________________
Потоковая OS


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Bit-band - через линкер.
СообщениеДобавлено: 28 июн 2015, 23:08 
Старожил

Зарегистрирован: 27 мар 2015, 01:22
Сообщения: 1490
AVI-crak писал(а):
#define _FLAG __attribute__ ((section(".flag")))
После чего любой глобальный флаг автоматически становится атомарным. В добавок - уменьшается расход памяти. Но главное - простота объявления.
volatile uint32_t tmp_name_flag _FLAG;

Как-то я не заметил раньше этот топик. Красивый фокус ) А можно ещё и так
#define _FLAG volatile uint32_t __attribute__ ((section(".flag")))
и потом
_FLAG flag1, flag2, flag3;

_________________
less is more


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB