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

 
 
 
Reply to this topicStart new topic
> register unsigned char flags;, как сделать регистр флагов?
Коляй
сообщение Aug 18 2006, 17:21
Сообщение #1


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

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



Хотел один регистр проца сделать регистром флагов (например R15), компилятор ругается -
Error[Pe149]: a global-scope declaration may not have this storage class
Или он глобальную переменную не может делать как register ?
И можно ли к байтам обращаться в R15 ? Или только начиная с R16 ?
(битовую структуру умею делать, но она в ОЗУ ложится).
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 18 2006, 18:11
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



А компилятор какой? Нужно указать компилятору, что этот регистр зарезервирован вами для личных нужд. А то он про это не знает и для своих целей использует. Потому и ругань в ответ на такое объявление дает.
Go to the top of the page
 
+Quote Post
WHALE
сообщение Aug 18 2006, 18:17
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



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


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post
prottoss
сообщение Aug 18 2006, 20:33
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(Коляй @ 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;


--------------------
Go to the top of the page
 
+Quote Post
AVR
сообщение Aug 18 2006, 20:43
Сообщение #5


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(WHALE @ Aug 18 2006, 22:17) *
нифига подобного- кодвижине ее достаточно обьявить как bit,естественно,глобальную,и она автоматом
ляжет в регистр битовых переменных.

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


--------------------
Go to the top of the page
 
+Quote Post
psw
сообщение Aug 19 2006, 07:09
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 8-06-06
Пользователь №: 17 866



Цитата(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;
Go to the top of the page
 
+Quote Post
Коляй
сообщение Aug 19 2006, 10:42
Сообщение #7


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

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



Спасибо. Всё заработало сразу.
Совсем позабыл компилятор указать 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;
....

Сообщение отредактировал Коляй - Aug 19 2006, 10:48
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 01:43
Рейтинг@Mail.ru


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