Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
поэтому работу с битовыми полями рассмотрим в части 2, если тема интересная.
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)
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);
}
Работа с регистрами внешних устройств в языке C, часть 1