ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
12 июля
420638 Топик полностью
Vit (28.06.2013 10:01, просмотров: 105) ответил Blackbird_sunday на А есть ли мудроконтроллер в 32 разряда такой же мощный по ядру как тот же stm32 но у которого в среде можно спокойно влепить программу из одного файла не считая встроенных хедеров периферии и регистров (в которых ниче править не надо ручками). И
:) что касается прямого обращения к регистрам, то ничего сверхъестественного нет - имена регистров часто (но не всегда) описаны не как #define REGNAME (*(volatile type *)ADDRESS) где type это unsigned char, ну или, например, unsigned int, а как указатель #define REGNAME ((volatile type *)ADDRESS) где type это typedef-нутый struct. Потому к полям порта GPIO обращаются по смещению, что-то примерно так GPIOA->OUT = x; y = GPIOA->INP; IAR для AVR употребляла всякие нагромождения union с sfr и со структурами с битовыми полями по @ADDRESS и это было "незаметно". с Cortex компиляторостроители вроде как пытаются договариваться действовать в рамках CMSIS и между компиляторами многое в описаниях стало более похожим. при написании для Cortex появилось заметное отличие - функции обработчиков прерывания такие же по описанию, как обычные функции. но в природе есть модификатор weak. и имена функций, расставленные по векторам в стартапе, объявлены как weak, т.е. таким образом зарезервированы их имена. для всех векторов, кроме RESET, где-то:) есть weak функции-заглушки (всякие прерывания, исключения) - их можно заменять своими (не weak). По вектору RESET вызывается функция SystemInit - её нужно положить свою (ну или из поставки) - в ней обычно включают/настраивают тактовые генераторы. где-то чуть далее за ней стартап вызовет main. т.е. для начала работы "без всего" достаточно перед main вписать пустышку void SystemInit(void) { } Так как настраивать генераторы это очень увлекательно:), для разных демоплат раздают файлы с заточенным под них SystemInit. но рихтуется оно без особых проблем. хотя, если использовать либы от производителя, то для тех же STM32 бывает удобнее объявлять некоторые дефайны прям в соответствующем поле проекта, а не в исходниках. также очень увлекательно для инициализации USART-ов, которые между собой отличаются аж значением базового указателя набора регистров USART и, например, бодрейтом писать свои отдельные функции инициализации. а рядом будет лежать одна, чуток уговнокоденная assert-ами, такая же, но с параметрами - указателем на структуру типа UASRT*, ну и на структуру инициализационных параметров а-ля DCB в венде. её можно вызвать с этой DCB на стеке и забыть. я хочу сказать, что либы для STM32 вполне имеют право на жизнь. читать доки конечно же нужно, понимать, где чего дернуть - тоже. но ничто не мешает при этом почитать те же исходники функций (а до того хедера), которые должны делать наверно то, что Вам нужно, но, как Вы считаете, через задний проход(С), а может и не совсем так. шлямбур и молот не всегда эффективнее индусского перфоратора:)