Комментарии 15
поэтому работу с битовыми полями рассмотрим в части 2, если тема интересная.
Давайте рассмотрим, тема интересная.
А как же volatile?
Вставлю свои пять копеек.
Я не объявляю переменную, просто define, также добавляю volatile, чтобы компилятор не оптимизировал нашу переменную.
Пример использования
Я не объявляю переменную, просто define, также добавляю volatile, чтобы компилятор не оптимизировал нашу переменную.
typedef struct Uart_s {
UInt irqEn;
UInt irq;
UInt addr;
UInt data;
UInt num;
} Uart;
#define UART ((volatile Uart *)UART_ADDR)
Пример использования
UART->irqEn = UART_IRQ_EN_TX;
irq = UART->irq;
НЛО прилетело и опубликовало эту надпись здесь
оператор @ (и директива #pragma location)
ТАК ВОТ ЧТО ЭТО ЗА ХРЕНЬ!
А разве в студии нет *.h файлов для процессоров с #define всей периферии?
Вчера перед сном пришло в голову, например для установки последовательно идущих регистров:
int setRegister(int *base, char *fmt, ...)
{
va_list st;
va_start(st,fmt);
while (*fmt)
{
if (*fmt == '%')
{
fmt++;
switch(*fmt)
{
case 'i':
{
*base = va_arg(st,int);
base++;
fmt++;
continue;
} break;
default:
fprintf(stderr,"unknown option '%c' \n",*fmt);
exit(EXIT_FAILURE);
break;
}
}
fmt++;
}
va_end(st);
}
и пример использования
setRegister(TIM1,«PERIOD: %i PREDDIV: %i TOV2: %i»,1001,1002,1003);
setRegister(TIM1,«PERIOD: %i PREDDIV: %i TOV2: %i»,1001,1002,1003);
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Работа с регистрами внешних устройств в языке C, часть 1