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

SDCC и __sbit

Всем привет!

Помогите понять как работает __sbit в SDCC.
К примеру код из Keil:
Код
sfr FSR              = 0xF8;
/*  FSR  */
sbit  MCDIS        = FSR^7;
sbit  STP          = FSR^6;
sbit  WEN          = FSR^5;
sbit  RDYN         = FSR^4;
sbit  INFEN        = FSR^3;
sbit  RDIS         = FSR^2;
sbit  RDEND        = FSR^1;
sbit  WPEN         = FSR^0;

Как я понимаю в SDCC я должен описать что-то типа:
Код
__sfr _-at 0xF8 FSR;
__sbit __at 0xF8 WPEN;
__sbit __at 0xF9 RDEND;
__sbit __at 0xFA RDIS;

и так далее. правильно?
А тогда как быть, к примеру, с регистром sfr FPCR = 0xF9; ? Ведь к примеру sbit NUPP = FPCR^0; будет всё тем же __sbit __at 0xF9 NUPP;, что не отличается от __sbit __at 0xF9 RDEND;?
Не понимаю ничего crying.gif

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


Ссылка на сообщение
Поделиться на другие сайты
Ищите таблицу Special Function Register (SFR) Memory Map на свой контроллер и подставляйте нужные адресса, при использовании sbit обращение будет идти с битовой области памяти bdata

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Alexey Belyaev @ May 16 2015, 03:00) <{POST_SNAPBACK}>
А тогда как быть, к примеру, с регистром sfr FPCR = 0xF9; ? Ведь к примеру sbit NUPP = FPCR^0; будет всё тем же __sbit __at 0xF9 NUPP;, что не отличается от __sbit __at 0xF9 RDEND;?
Не понимаю ничего crying.gif


Обращение к битам есть только у регистров, чьи аддресса кратны 8:
0xF0, 0xF8 ...
0xF9 не умеет обращатся к битам

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация