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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Начал разбираться с IAR AVR, появились и будут появляться вопросы
eXeC001er
сообщение Sep 9 2005, 10:57
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 23-02-05
Из: Краснодар
Пользователь №: 2 848



скажите битовые переменные можно объявлять через встроенный макрос, как это сделано для регистров контроллера, а потом обращатся к ним
например вот так
SFR_B(FLAG, Addr)

но вот вопрос какое значение записывать в Addr?!
Или это как то по другому делается?!
Go to the top of the page
 
+Quote Post
BVU
сообщение Sep 9 2005, 11:18
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(eXeC001er @ Sep 9 2005, 14:57)
скажите битовые переменные можно объявлять через встроенный макрос, как это сделано для регистров контроллера, а потом обращатся к ним
например вот так
SFR_B(FLAG,  Addr)

но вот вопрос какое значение записывать в Addr?!
Или это как то по другому делается?!
*


Объявите сначала Ваши переменные, а потом через #define переобозначтесь.


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
eXeC001er
сообщение Sep 9 2005, 11:25
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 23-02-05
Из: Краснодар
Пользователь №: 2 848



подробнее пжлста
Go to the top of the page
 
+Quote Post
BVU
сообщение Sep 9 2005, 11:51
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(eXeC001er @ Sep 9 2005, 15:25)
подробнее пжлста
*


Это стандарт языка С. Почитайте любую книжку (учебник) по С, и посмотрите, как можно организовать макрос. Я Вам дам лучше другое ценное замечание: что бы избежать ошибок параметры макроолределения всегда необходимо заключать в скобки: #define xxx (xxx/xxx * ... + ... - xxx)


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
eXeC001er
сообщение Sep 9 2005, 12:01
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 23-02-05
Из: Краснодар
Пользователь №: 2 848



я про то как мне организовать собственные битовые переменные?!
я где то здесь на форуме встречал как это делается, но вот забыл где?!
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 9 2005, 12:14
Сообщение #21


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата(eXeC001er @ Sep 9 2005, 15:01)
я про то как мне организовать собственные битовые переменные?!
я где то здесь на форуме встречал как это делается, но вот забыл где?!
*


Из исходника:

//TCP заголовок
struct
{
unsigned int rport; //От какого порта
unsigned int lport; //В какой
unsigned long SEQ;
unsigned long ACK;
char hlen;
union
{
char CTL; //Флаги
struct
{
char FIN:1,
SYN:1,
RST:1,
PSH:1,
_ACK:1,
F5:1,
F6:1,
F7:1;
};
};
unsigned int wsize;
} TCP_HDR;

FIN, SYN, RST и т.д. - ото оно, CTL - доступ сразу ко всему байту.


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
PaulS
сообщение Sep 9 2005, 13:21
Сообщение #22





Группа: Новичок
Сообщений: 9
Регистрация: 28-01-05
Пользователь №: 2 265



Цитата(eXeC001er @ Sep 9 2005, 15:01)
я про то как мне организовать собственные битовые переменные?!
я где то здесь на форуме встречал как это делается, но вот забыл где?!
*


ИМХО лучше всего так, например:

typedef union isd_status {
unsigned int word;
struct {
unsigned char powerUP_delay : 1;
unsigned char record_start : 1;
unsigned char play_start : 1;
unsigned char record_process : 1;
unsigned char play_process : 1;
unsigned char pause_stop : 1;
};
} isd_status;

Если будет больше chara, смело пиши word или long.

В программе:

обьява:
isd_status ISD_status = {0};

Модификация бита:
ISD_status.pause_stop = SET;

Модификация всей структуры:
ISD_status.word = CLR;

Проверка бита:
if (ISD_status.pause_stop);
Так же и байта.

Передача параметром в функцию:
number_operation = GetNumberBit(ISD_status.word);

Ну и т.д.

Так 6-й час, домой пора.
Успехов.
Go to the top of the page
 
+Quote Post
ObitJr
сообщение Sep 9 2005, 16:59
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 16
Регистрация: 23-07-05
Пользователь №: 7 043



Цитата(BVU @ Sep 9 2005, 13:51)
Цитата(eXeC001er @ Sep 9 2005, 15:25)
подробнее пжлста
*


Это стандарт языка С. Почитайте любую книжку (учебник) по С, и посмотрите, как можно организовать макрос. Я Вам дам лучше другое ценное замечание: что бы избежать ошибок параметры макроолределения всегда необходимо заключать в скобки: #define xxx (xxx/xxx * ... + ... - xxx)
*


я б даже сказал вот так #define ...(xxx) ((xxx)/(xxx) * ... + ... - (xxx)), если речь шла о параметрах
Go to the top of the page
 
+Quote Post

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

 


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


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