Vit (28.06.2013 10:01, просмотров: 114) ответил 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 вполне имеют право на жизнь. читать доки конечно же нужно, понимать, где чего дернуть - тоже. но ничто не мешает при этом почитать те же исходники функций (а до того хедера), которые должны делать наверно то, что Вам нужно, но, как Вы считаете, через задний проход(С), а может и не совсем так.
шлямбур и молот не всегда эффективнее индусского перфоратора:)