Ребят рассудите пожалуйста, Есть проект с несколькими камнями MSP430 и STM32F103 общающимися по uart. В STM работает ацп и uart а MSP430 принимает и выводит на дисплей и счелкает релюшками. Вишенкой на торте это то, что все это на плюсах и обильно так макросами полито. При этом всем мне доказывают что только так все делается ибо так правильно. Я человек не опытный но никак не пойму, ладно 32 битные микрухи дорогие но плюсы то зачем?
Комментарии: 28
Anonim
Шоб було
Andor
"Потому что можем"?
Nikita
Или я на С пишу и отсталый уже
Andor
"Во-первых это красиво"
Nikita
Где красиво?
Andor
Вообще кресты в эмбедед не редкость
Artem
переносимость на с++ лучше
Andor
Но за программирование еа шаблонах я бы убивал
Artem
так за счет шаблонов и достигается переносимость. boost и stl на них стоят
Shtolcman
Мне кажется, что шаблоны в МК - это уже перебор
Anonim
neiver как то показывал ОЧЕНь годный код на шаблонах который в итоге компилируется в нечто ураганное. Я на ассемблере так не напишу.
Shtolcman
А про что он был?
Anonim
про порты
Artem
А чем перебор то? Пишешь шаблонную функцию и без ппоблем скармливаешь ей данные любых типов. Хоть инты хоть флоаты, а оно разворачивается в нужный уод нв этапе компиляции. На камнях где памяти десятки и сотни килобайт паркуа бы и не па? Плюсы намного удобнее С в определенных случаях
Nikita
мне сейчас достался проект где один только main 4561 строка, где используется только 200 включая объявления функций
Artem
а какая разница? Это же все на этапе компиляции только имеет значение, дальше генериться объектный файлы, в которых никаким боком, никаких шаблонов нету.
Nikita
а отлаживать код такой нужно отдельный софт писать?
Artem
Ооо... чувствую там были всякие специализированные шаблоны и мета-программирования С отладочными сообщениями проблемы, согласен. Говорят комитет C++ уже думает ,как все это в более удобоворимый вид привести
Nikita
ага scratch embded edition
Anonim
Классовое представление удобнее, легче дебажится, проще дорабатывается. Макросы не использую ибо хз зачем они нужны. Но это только в тгм случае, если требуется оперировать более чем одним объектом класса, в случае одиночного обрабоочика Си предостаточно.
Sergey
только если делать не применяя моск, получится рантайм оверхед template
class GPIOPin {
inline static void Set()
{
GPIO()->BSRRL = 1 << P;
}
GPIOPin::Set()
вот так например оверхеда 0 FUEL_SUPPLY1 GPIOPin
FUEL_SUPPLY1::Set() class Timer {
public:
Timer()
: is_set(false)
{
}
inline bool IsExpired() { return (!is_set || (systick_t)(systick_counter - set_tick) >= interval); }; // Expired after construction
inline void Set(systick_t t) { is_set = true; set_tick = systick_counter; interval = t; };
inline void Wait(systick_t t) { Set(t); while (!IsExpired()) asm volatile ("nop"); };
protected:
bool is_set;
systick_t set_tick;
systick_t interval;
};
template
bool _try_until_timeout(T lambda, systick_t timeout)
{
Timer t;
t.Set(timeout);
while (!lambda()) {
if (t.IsExpired()) {
return false;
}
}
return true;
}
#define try_until_timeout(X, timeout) _try_until_timeout([&]{ return X; }, timeout)
Anonim
Хорошо, когда стм родил хал и пару макросов оперирования битами, которые можно скопипастить при необходимости А вот это бррр
Artem
Классно, но ночью лучше не смотреть:D
Samuil
Pastebin.com и кидай портянки кода туда а сюда ссылку
Artem
Есть один момент. Классы и вся эта приплюснутая штука она больше месте занимает нежели сишная. И она тормазнутее.
Ilya
Есть статья на Хабре, нет различий особых
Andrew
можно не использовать виртуальные сущности в критических местах
Anonim
По моему опыту при должном подходе все работает столь же быстро и занимает столько же места, что и сишное, но при этом не выглядит как чебурек