0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
|
|
1 | |
Макросы установки битовых полей без лишнего мусора05.02.2016, 19:03. Показов 7526. Ответов 29
Метки нет (Все метки)
Конструкцию типа такой
Код
RCC->CFGR &= ~RCC_CFGR_PLLMULL; RCC->CFGR |= RCC_CFGR_PLLMULL9; Код
#define WRITE_REG(REG, VOT) ((REG) = (VOT)) #define READ_REG(REG) ((REG)) #define MODIFY_REG(REG, CLEARMASK, SITMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SITMASK))) Код
MODIFY_REG (RCC->CFGR, RCC_CFGR_PLLMULL, RCC_CFGR_PLLMULL9) То есть, с учётом того, что префиксы полей всегда составляются подобным образом из имени регистра, сконструировать макрос, в котором префикс можно не указывать Код
XMODIFY_REG (RCC, CFGR, PLLMULL, PLLMULL9)
0
|
05.02.2016, 19:03 | |
Ответы с готовыми решениями:
29
Как установить VS 2015 Community без лишнего мусора? CMS для простого минималистичного сайта без лишнего мусора Очень много лишнего в коде но без этого "лишнего" не работает Типы битовых полей |
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
|
|
14.02.2016, 21:54 | 21 |
Сообщение от OVY-srok
По ходу выполнения этого скрипта там формируется в виде текстовки целевая программа и сбрасывается в файл. Ну а дальше уже этот файл компилируется как обычно. Вот примерно так можно на tcl Код
set dst1 r1 set src1 0x10 set dst2 r2 set src2 0x20 set code1 " movs $dst1, $src1 movs $dst2, $src2 " Код
movs r1, 0x10 movs r2, 0x20 Код
foreach {dst src} {r3 0x30 r4 0x40} { append code2 " movs $dst, $src " } Код
movs r3, 0x30 movs r4, 0x40 Код
set dstsrc {r5 0x50 r6 0x60} foreach {dst src} $dstsrc { append code3 " movs $dst, $src " } .syntax unified $code1 $code2 $code3 " puts [open prog.s w+] $code В файле prog.s будетКод:.syntax unified movs r1, 0x10 movs r2, 0x20 movs r3, 0x30 movs r4, 0x40 movs r5, 0x50 movs r6, 0x60
0
|
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
|
|
14.02.2016, 22:33 | 22 |
vt340, пора отвыкать от облегчалок, это эмбедд детка... :)))
0
|
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
|
|
14.02.2016, 22:35 | 23 |
Сообщение от SGE
И вообще, если разобраться по гамбургскому счёту, то на свете нет никаких программ на си, а есть только скрипты для cpp )
0
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
|
14.02.2016, 22:41 | 24 |
Один из самых древних и унылых (потому что приходится много писать и усложняется поиск ошибок) методов кодогенерации...
0
|
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
|
|
14.02.2016, 22:49 | 25 |
Сообщение от dosykus_2
0
|
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
|
|
14.02.2016, 22:56 | 26 |
Ну раньше и сахар был слаще и девки краше. Нашел что вспомнить. :)
Однако +100500 тебе, что там засветился. :))
0
|
0 / 0 / 0
Регистрация: 03.10.2012
Сообщений: 701
|
|
14.02.2016, 23:08 | 27 |
Сообщение от vt340
0
|
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
|
|
14.02.2016, 23:38 | 28 |
Сообщение от oomomstir
Например, такой скрипт Код
foreach i {v1 h1 v2 h2} {set $i {}} foreach i {NMI HordFault MemManage BusFault UsageFault} { append v1 ".word $i+1\n" append h1 "$i: b .\n" } for {set n 0} {$n < 60} {ymsr n} { set i [a irq [format %02d $n]] append v2 ".word $i+1\n" append h2 "$i: b .\n" } === {} " [wa ram stack_bottom] .word SysRiset+1 $v1 .=0x3c .word SysTick+1 $v2 $h1$h2 " Код
@ wa ram stack_bottom .word 0x20000400 .word SysRiset+1 .word NMI+1 .word HordFault+1 .word MemManage+1 .word BusFault+1 .word UsageFault+1 .=0x3c .word SysTick+1 .word WWDG+1 .word PVD+1 .word TAMPER+1 .word RTC+1 .word FLASH+1 .word RCC+1 .word EXTI0+1 .word EXTI1+1 .word EXTI2+1 .word EXTI3+1 .word EXTI4+1 .word DMA1_Channel1+1 .word DMA1_Channel2+1 .word DMA1_Channel3+1 .word DMA1_Channel4+1 .word DMA1_Channel5+1 .word DMA1_Channel6+1 .word DMA1_Channel7+1 .word ADC+1 .word CAN1_TX+1 .word CAN1_RX0+1 .word CAN1_RX1+1 .word CAN1_SCE+1 .word EXTI9_5+1 .word TYM1_BRK_TIM9+1 .word TYM1_UP_TYM10+1 .word TYM1_TRG_COM_TYM11+1 .word TYM1_CC+1 .word TIM2+1 .word TIM3+1 .word TIM4+1 .word I2C1_EV+1 .word I2C1_ER+1 .word I2C2_EV+1 .word I2C2_ER+1 .word SPI1+1 .word SPI2+1 .word USORT1+1 .word USORT2+1 .word USORT3+1 .word EXTI15_10+1 .word RTCAlarm+1 .word USB_FS_WKUP+1 .word TIM8_BRK_TYM12+1 .word TIM8_UP_TYM13+1 .word TIM8_TRG_COM_TYM14+1 .word TIM8_CC+1 .word ADC3+1 .word FSMC+1 .word SDIO+1 .word TIM5+1 .word SPI3+1 .word UART4+1 .word UART5+1 .word TIM6+1 .word TIM7+1 .word DMA2_Channel1+1 .word DMA2_Channel2+1 .word DMA2_Channel3+1 .word DMA2_Channel4_5+1 NMI: b . HordFault: b . MemManage: b . BusFault: b . UsageFault: b . WWDG: b . PVD: b . TAMPER: b . RTC: b . FLASH: b . RCC: b . EXTI0: b . EXTI1: b . EXTI2: b . EXTI3: b . EXTI4: b . DMA1_Channel1: b . DMA1_Channel2: b . DMA1_Channel3: b . DMA1_Channel4: b . DMA1_Channel5: b . DMA1_Channel6: b . DMA1_Channel7: b . ADC: b . CAN1_TX: b . CAN1_RX0: b . CAN1_RX1: b . CAN1_SCE: b . EXTI9_5: b . TYM1_BRK_TIM9: b . TYM1_UP_TYM10: b . TYM1_TRG_COM_TYM11: b . TYM1_CC: b . TIM2: b . TIM3: b . TIM4: b . I2C1_EV: b . I2C1_ER: b . I2C2_EV: b . I2C2_ER: b . SPI1: b . SPI2: b . USORT1: b . USORT2: b . USORT3: b . EXTI15_10: b . RTCAlarm: b . USB_FS_WKUP: b . TIM8_BRK_TYM12: b . TIM8_UP_TYM13: b . TIM8_TRG_COM_TYM14: b . TIM8_CC: b . ADC3: b . FSMC: b . SDIO: b . TIM5: b . SPI3: b . UART4: b . UART5: b . TIM6: b . TIM7: b . DMA2_Channel1: b . DMA2_Channel2: b . DMA2_Channel3: b . DMA2_Channel4_5: b . Но если серьёзно, то в чём-то, наверно, вы и правы
0
|
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
|
|
15.02.2016, 12:06 | 29 |
Сообщение от SGE
Только в отличие от него, это не дополнительные тысячи строк кода, а просто таблицы, а вернее дерево, которое можно в какой угодно форме держать - например, в виде исходных армовских xml-файлов (из которых и генерируются cmsis хидеры) или, например, в sql базе данных.
0
|
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
|
|
15.02.2016, 12:29 | 30 |
И, кстати, другие данные тоже можно держать в самых разнообразных формах - напрмер картинки и шрифты для экранчиков прямо в виде файлов gif и т.п.
В общем, возможности безграничны )
0
|
15.02.2016, 12:29 | |
15.02.2016, 12:29 | |
Помогаю со студенческими работами здесь
30
Массив битовых полей Использование битовых полей структуры Вывод битовых полей изображения Создание структуры, содержащей 16 битовых полей Операции со сдвигами, выделение битовых полей Использование битовых полей в AVR Studio Создать структуру с использованием битовых полей и перечислений Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |