Make_Pic 0 23 июня, 2018 Опубликовано 23 июня, 2018 · Жалоба Есть микроконтроллер - MSP430F2274, у него есть встроенные операционные усилители - Вопрос: Как компактнее и проще написать код на С для смены режимов работы этих OP, переключение входов и выходов, изменение включения внутренних резисторов? Просится оформить в виде структур, но как лучше сделать переключение/программирование режимов OP в зависимости от состояний программы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 23 июня, 2018 Опубликовано 23 июня, 2018 · Жалоба Просится оформить в виде структур Поскольку в этой Вашей теме нет запрета на C++, то тут напрашивается использование не структур, а классов, наделенных соотв. функционалом. Вот конкретный пример из моей библиотеки, в данном случае - аппаратных таймеров. "Лишнее" вырезано с целью упрощения понимания. Timer.hpp: #pragma once ..... #include "Include/stm32l1xx.h" #include "Interrupt.hpp" ..... namespace stm32l1 { class TimerBase { public: explicit TimerBase(TIM_TypeDef * registers, Interrupt::Index irqIndex); virtual ~TimerBase(); void installVector(stm32l1::Interrupt::Vector& vector); void run(); void stop(); void setPrescaler(uint16_t value); void setBaseFrequencyHz(uint32_t frequencyHz); ............. private: volatile TIM_TypeDef * timer; uint32_t baseFrequencyHz; Interrupt interrupt; ............. }; #ifdef TIM2 class TimerTIM2 : public TimerBase { public: TimerTIM2() : TimerBase(TIM2, TIM2_IRQn) { } Irq<TIM2_BASE, TIM_DIER_UIE, TIM_SR_UIF> irqUpdate; ................... }; #endif #ifdef TIM3 class TimerTIM3 : public TimerBase { public: TimerTIM3() : TimerBase(TIM3, TIM3_IRQn) { } ................... }; #endif // и так далее Если вырезать вообще все лишнее, то вот суть: class TimerBase { public: TimerBase(TIM_TypeDef * registers); // Вся реализация TimerBase в соотв. cpp файле } ...... class TimerTIM2 : public TimerBase { public: TimerTIM2() : TimerBase(TIM2) {} } На структурах в голом C это тоже возможно, но получится несколько колхозно что ли, но вполне реализуемо ))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Make_Pic 0 24 июня, 2018 Опубликовано 24 июня, 2018 · Жалоба Поскольку в этой Вашей теме нет запрета на C++, то тут напрашивается использование не структур, а классов, наделенных соотв. функционалом. Вот конкретный пример из моей библиотеки, в данном случае - аппаратных таймеров. "Лишнее" вырезано с целью упрощения понимания. ... На структурах в голом C это тоже возможно, но получится несколько колхозно что ли, но вполне реализуемо ))) А как на СИ такое сделать (не приходит что то вумное в голову)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 24 июня, 2018 Опубликовано 24 июня, 2018 · Жалоба А как на СИ такое сделать (не приходит что то вумное в голову)? В таком случае, имхо, разумнее использовать штатную библиотеку периферии от TI под нужный вам камень. Иначе выйдет "шило на мыло" ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Make_Pic 0 24 июня, 2018 Опубликовано 24 июня, 2018 · Жалоба В таком случае, имхо, разумнее использовать штатную библиотеку периферии от TI под нужный вам камень. Иначе выйдет "шило на мыло" ;) Я в IAR пишу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 24 июня, 2018 Опубликовано 24 июня, 2018 · Жалоба Я в IAR пишу. А я - в Keil. Но при чем тут это? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Make_Pic 0 25 июня, 2018 Опубликовано 25 июня, 2018 · Жалоба А я - в Keil. Но при чем тут это? Тогда так спрошу как чайник (да простит меня...) Как использовать либы от CCS в IAR тем более в Keil (MSP430 не поддерживает это ядро) в контексте данной темы? И есть еще какие либо варинты смены реимов OP операациоников на лету? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 25 июня, 2018 Опубликовано 25 июня, 2018 · Жалоба Как использовать либы от CCS в IAR тем более в Keil (MSP430 не поддерживает это ядро) в контексте данной темы? Вижу три варианта: 1. искать либу под IAR (например, на гитхабе), 2. переделывать существующую либу под IAR (нужные части), 3. писать проект целиком под CCS И есть еще какие либо варинты смены реимов OP операациоников на лету? Вооружившисть даташитом, изучить функционал существующих библиотек. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
k155la3 26 25 июня, 2018 Опубликовано 25 июня, 2018 · Жалоба Есть микроконтроллер - MSP430F2274, у него есть встроенные операционные усилители - Вопрос: Как компактнее и проще написать код на С для смены режимов работы этих OP, переключение входов и выходов, изменение включения внутренних резисторов? Просится оформить в виде структур, но как лучше сделать переключение/программирование режимов OP в зависимости от состояний программы? Учитывая достаточно скромные ресурсы по RAM для этого контроллера, CPP использовать возможно, но естественно при этом будет несколько больше расходоваться RAM и flash. Если алгоритм прикладной задачи и объем данных небольших, то вполне возможно. -- Для "упаковки" текста функционала вместо собственно функций можно использовать макросы. Их использование увеличит быстродействие, улучшит читабельность кода и его "портабельность", если все макро-определения делать в одном h-файле. (аналогично inline - функциям) #define PORT_CS P1OUT #define MASK_CS_FLASH 0x01 #define MASK_CS_RTC 0x02 #define CS_ACTIVE_FLASH ( PORT_CS &= ~MASK_CS_FLASH ) #define CS_OFF ( PORT_CS = 0xFF ) ps у Ti есть MSP430Ware == driverlib. Пробовал использовать их HAL, но "не пошло", выписывал потом все оптимально и компактно и собственноручно. В HAL-реализациях только подсматривал основы. И есть еще какие либо варинты смены реимов OP операациоников на лету? "на лету" - это термин, или как ? Самое близкое к этому (?) - аппаратное прерывание и изменение конфигурации в обработчике евойном. Поскольку из вопроса видно, что "не на лету" Вы уже реализовали, выкладывайте код. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 25 июня, 2018 Опубликовано 25 июня, 2018 · Жалоба Учитывая достаточно скромные ресурсы по RAM для этого контроллера, CPP использовать возможно, но естественно при этом будет несколько больше расходоваться Не пугайте народ: один и тот же код на CPP требует практически столько же RAM, как и голый C (разумеется, без дин. памяти). В больших и серьезных проектах эта разница может быть даже в пользу плюсов. А вот c ROM ситуация не такая однозначная - тут все сильно зависит от проекта и опыта программиста: криворукий может на плюсах нагородить такой огород, что никакого проца не хватит. зы. В контексте данной темы все равно не понятно, чего именно хочет ТС. Впрочем, как и в других его темах ;) Подобные темы будет порождать холивары и офф. Это практически неизбежно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 25 июня, 2018 Опубликовано 25 июня, 2018 · Жалоба Есть микроконтроллер - MSP430F2274, у него есть встроенные операционные усилители - Вопрос: Как компактнее и проще написать код на С для смены режимов работы этих OP, переключение входов и выходов, изменение включения внутренних резисторов?Ваш вопрос очень напоминает тему про 'Гайку М3' от уважаемого iosifik Вы хотите что то конкретное с этими усилителями сделать, или просто поиграться? На вопрос в его исходной постановке ответить невозможно - не хватает данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться