ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
4 мая
610616 Топик полностью
Adept (23.07.2015 01:54 - 01:57, просмотров: 415) ответил SERHIO на ЗАМЕЧАТЕЛЬНО!
а я в ассемлере аврстудии вложенными макросами вполне пользуюсь. Действительно удобно :) примерно выглядит так: (в общем не так уж и параноидально :)) и вполне даже красиво (на мой взгляд :)) ;---------------------------------------------------------------------------- ;Макросы управления тактовой частотой (с сохранением BaudRate коммуникационных портов (только UART!!) ;SystemClock_GrownUp - для рабочего режима ;SystemClock_SlowDown - для режима пониженного энергопотребления ; ;Синтаксис: SystemClock_SlowDown/SystemClock_GrownUp ;(C) Novus-Лаб (VK) 20/IX.13 .macro SystemClock_SlowDown ldi TMP,IdleClock_ratio ;Поместим в TMP параметр кратости системной частоты для Idle-режима call Set_SystemClock ;Настроим систему тактирования на новую частоту и засинхронизируемся от неё call Refresh_UARTs_BaudRate ;Перенастроим BaudRate портов (в т.ч. и iAP порта), чтобы сохранить их скорость на новой тактовой частоте. .endmacro ;---------------- .macro SystemClock_GrownUp ldi TMP,WorkClock_ratio ;Поместим в TMP множитель PLL для Work-режима call Set_SystemClock ;Настроим систему тактирования на новую частоту и засинхронизируемся от неё call Refresh_UARTs_BaudRate ;Перенастроим BaudRate портов (в т.ч. и iAP порта), чтобы сохранить их скорость на новой тактовой частоте. .endmacro сами П/П тоже сожержат макросы :) или так: прям макрос в макросе без взяких подпрограмм :) ;Макрос считывания блока данных заданой длины из EEPROM в RAM для контроллера XMEGA ;NVM контроллер в П/П чтения д.б. сконфигурирован так, чтобы можно было использовать команды ld/st (MAPPED EEPROM) ; EEPROM_Address - Адрес размещения блока данных в EEPROM ; RAM_Address - Адрес размещения считанных данных в RAM ; QNTY - Длина считываемого блока (до 256 байт) 1..256 ;Синтаксис: ;XRead_EEPROM_to_RAM RAM_Address,EEPROM_Address,QNTY ;05/VIII.14 .macro XRead_EEPROM_to_RAM PUSH_X PUSH_Z LDZ MAPPED_EEPROM_START+@1 ;Адрес начала размещения считываемых данных в EEPROM LDX @0 ;Адрес размещения считанных данных в RAM ldi TMP,@2-1 ;Длина блока считываемых данных call ReadEEPROM_ZX ;Вызов П/П блочного чтения EEPROM-->RAM POP_Z POP_X .endmacro
...делать нужно так, как нужно. А как ненужно - делать не нужно (С) Винни-Пух :)