[an error occurred while processing this directive]
Re: опять про асм. вставки (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено уни 25 апреля 2006 г. 18:08

Ещё я использую вставку, чтобы сделать подобные комментарии
при инициализации различного рода регистров какой-либо
"аппаратуры" (т.к. не знаю как задать переменной значение
в двоичном коде на Си):

// Здесь пример Си-кода для AVR
...
uchar value;
...
// USART Control and Status Register B
asm volatile (
"ldi %0, 0b11111000;" : "=r"(value) : );
// ||||||||
// |||||||+- TXB8: Transmit Data Bit 8
// ||||||+-- RXB8: Receive Data Bit 8
// |||||+--- UCSZ2: Character Size
// ||||+---- TXEN: Transmitter Enable
// |||+----- RXEN: Receiver Enable
// ||+------ UDRIE: USART Data Register Empty Interrupt Enable
// |+------- TXCIE: TX Complete Interrupt Enable
// +-------- RXCIE: RX Complete Interrupt Enable
UCSRB = value; // включаем прерывания по приёму и передаче, пустой UDR
...

// Здесь пример Си-кода для ADSP
...
unsigned int value;
...
// Регистры маскирования (IMASK) и фиксации (IRPTL) прерываний
// Инициализация после сброса 0x0000
asm("%0 = b#0110000000000000;" : "=g"(value) : );
// ||||||||||||||||
// |||||||||||||||+- EMU (прерывание эмулятора (не маскируемо)), высший приоритет
// ||||||||||||||+-- PWDN (прерывание выключения питания, маскируемо)
// |||||||||||||+--- KERNEL (ядро эмулятора)
// ||||||||||||+---- STACK (прерывание стека). Генерируется при помещении или
// |||||||||||| извлечении данных из стека PC, переходе за границу уровня
// |||||||||||| стека PC, переполнении или потере значащих разрядов
// |||||||||||| стеков PC или состояния, переполнении любого стека.
// ||||||||||||
// |||||||||||| UDI (определяемые пользователем прерывания) каждый бит
// |||||||||||| отвечает за одно прерывание, бит 15 имеет низший приоритет.
// |||||||||||+----- Ведомый DMA/ Интерфейс хост-порта (Host Port DMA)
// ||||||||||+------ Приём SPORT0
// |||||||||+------- Передача SPORT0
// ||||||||+-------- Приём SPORT1
// |||||||+--------- Передача SPORT1
// ||||||+---------- Приём SPORT2 / SPI0
// |||||+----------- Передача SPORT2 / SPI1
// ||||+------------ Прием UART
// |||+------------- Передача UART
// ||+-------------- Таймер 0
// |+--------------- Таймер 1
// +---------------- Таймер 2, Программируемый флаг 0 & 1, Порт memDMA (Memory DMA)
sysreg_write(sysreg_IMASK, value); // Маскируем прерывания
...


В таком виде комментарий сам является кодом, я считаю это очень удобным моментом, чем рядом с hex значением писать комментарий. Обчыно hex много раз меняется, а вот комментарий заменить при этом лень и получается, что непосредственно записанное значение отличается от комментария. Хотя это, конечно, у кого как.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru