Easyelectronics.ru

Электроника для всех
Текущее время: 23 авг 2019, 01:52

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



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

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

Зарегистрирован: 30 мар 2015, 23:56
Сообщения: 720
Может кому и пригодится...
Код для линкера 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
Сообщения: 1405
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;


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

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


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

Сейчас этот форум просматривают: Атарасий


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

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

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