Перейти к содержанию
    

Начал разбираться с IAR AVR

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

например вот так

SFR_B(FLAG, Addr)

 

но вот вопрос какое значение записывать в Addr?!

Или это как то по другому делается?!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

например вот так

SFR_B(FLAG,  Addr)

 

но вот вопрос какое значение записывать в Addr?!

Или это как то по другому делается?!

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

подробнее пжлста

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я про то как мне организовать собственные битовые переменные?!

я где то здесь на форуме встречал как это делается, но вот забыл где?!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я про то как мне организовать собственные битовые переменные?!

я где то здесь на форуме встречал как это делается, но вот забыл где?!

 

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

 

//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 - доступ сразу ко всему байту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я про то как мне организовать собственные битовые переменные?!

я где то здесь на форуме встречал как это делается, но вот забыл где?!

 

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

 

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-й час, домой пора.

Успехов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

подробнее пжлста

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...