Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: register unsigned char flags;
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Коляй
Хотел один регистр проца сделать регистром флагов (например R15), компилятор ругается -
Error[Pe149]: a global-scope declaration may not have this storage class
Или он глобальную переменную не может делать как register ?
И можно ли к байтам обращаться в R15 ? Или только начиная с R16 ?
(битовую структуру умею делать, но она в ОЗУ ложится).
rezident
А компилятор какой? Нужно указать компилятору, что этот регистр зарезервирован вами для личных нужд. А то он про это не знает и для своих целей использует. Потому и ругань в ответ на такое объявление дает.
WHALE
нифига подобного- кодвижине ее достаточно обьявить как bit,естественно,глобальную,и она автоматом
ляжет в регистр битовых переменных.
prottoss
Цитата(Коляй @ Aug 19 2006, 01:21) *
Хотел один регистр проца сделать регистром флагов (например R15), компилятор ругается - Error[Pe149]: a global-scope declaration may not have this storage class Или он глобальную переменную не может делать как register ? И можно ли к байтам обращаться в R15 ? Или только начиная с R16 ? (битовую структуру умею делать, но она в ОЗУ ложится).
Судя по коду Error Вы пользуетесь IARом. Чтобы зарезервировать под переменную регистр для начала надо зайти в Project->Options->C/C++ Compiler->Code и в поле Register Utilisation в Number of registers to lock for global variables установить количество необходимых регистров. Дорускается резервировать до 12 регистров (R4...R15)

Объявляте потом переменную как Вам вздумается. Если глобальная, то как __no_init char my_reg15 @15; если в функции то только как статическая, например: static __no_init char my_reg15 @15;
AVR
Цитата(WHALE @ Aug 18 2006, 22:17) *
нифига подобного- кодвижине ее достаточно обьявить как bit,естественно,глобальную,и она автоматом
ляжет в регистр битовых переменных.

Есть ли возможность создавать битовые переменные в iar'е? (и как smile.gif ?)
psw
Цитата(AVR @ Aug 19 2006, 01:43) *
Цитата(WHALE @ Aug 18 2006, 22:17) *

нифига подобного- кодвижине ее достаточно обьявить как bit,естественно,глобальную,и она автоматом
ляжет в регистр битовых переменных.

Есть ли возможность создавать битовые переменные в iar'е? (и как smile.gif ?)

я делаю так:

typedef volatile union
{
volatile unsigned char byte;
struct
{
volatile unsigned char bit_0:1;
volatile unsigned char bit_1:1;
volatile unsigned char bit_2:1;
volatile unsigned char bit_3:1;
volatile unsigned char bit_4:1;
volatile unsigned char bit_5:1;
volatile unsigned char bit_6:1;
volatile unsigned char bit_7:1;
} bit;
Коляй
Спасибо. Всё заработало сразу.
Совсем позабыл компилятор указать IAR 4.12 Битвую структуру так объявлял раньше/

volatile struct
{
unsigned Enter :1;
unsigned Key :1;
unsigned Menu :1;
unsigned LCD :1;
unsigned Auto :1;
unsigned Light :1;
unsigned Xz :1;

} flag;

Потом обращение уже в майне.
например/

flag.Key=1;
flag.Enter=0;
....
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.