Pull to refresh
76
0.3
Сергей @lamerok

Хоккеист — на микроконтроллерах программист

Send message
Там ошибка изначально была, я её поправил, ассемблер еще нет — картинку надо делать новую.
Наследование, не показал согласен, но оно вообще когда не добавит, если вирутальные функции не использовать. Можно обойтись же без shared_ptr. Я тут старался показать, что код на намного С++ лаконичнее, и размер такой же. и это не просто Си с использование соврменного синтаксиса, так как на Си такое будет занимать больше места, я там написал, что можно структры использовать и указатели на функции, но это сразу + к размеру.
Про std, см комментарий от NightShad0w, при ключенной оптимизации все работает ОК.
habrahabr.ru/post/347980/#comment_10646698. Проверил на IAR, тоже код такой же. Поэтому её использовать можно, но не безздумно. unique_ptr например запросто, он ничего не добавит, а вот shared_ptr нет, он сразу добавит много накладных, хотя все зависит от задачи, если вы на Си будете решать, ту же задачу, что решает во многих случая shared_ptr, то возможно и кода будет больше.

) конечно, можно было использовать просто массивы или std::array. Vector слишком громоздкий, и юзает динамически выделяемую память. Сразу появляется куча, за которой следить нужно… Лучше динамически создаваемые объекты вообще не использовать.

С включенной оптимизацией, все вычислится на этапе компиляции и кода не будет.
Я, согласен, что это топорный пример, но я там написал, что это очень синтетический тест, его конечно можно улучшить, но я хотел показать, что если писать в лоб, примерно в одном стиле, то можно получить такой вот результат.

Оптимизация включена, при включенной код не имеет смысла, все вычисляется на этапе компиляции. Тут показано, что в общем случае for с обходом через итератор преобразуется в более эффективный код.

Разница в том что указатель изменяемый, его можно забыть про инициализировать, можно нечаянно поменять. Таких примеров предостаточно. Для этого в срр и придуманы были ссылки, и умные указатели, чтобы такие проблемы и закрывать.

Есть такой, на этой же плате с графическим индикатором и блутузом, но в статью не влезет.

Он не UB, но при включенной оптимизации, размер действительно 0. Можно сделать ввиде отдельной функции.

Хорошо было графики привести с результатами тестирования, а то текст плохо смотрится.
IAR 8.20 уже боле менее :) По крайней мере, отладичк на уровне, да и редактор подтянули.
Спасибо, я так понимаю первый шаг в направлении микроконтроллеров сделан. Если со временем его доведут до нормального состояния, то можно будет использовать в университете для обучения, а то сейчас приходится использовать Ломанные версии IAR 8.20, что не совсем правильно.
Согласен, хорошо написано, можно студентам показывать, для ознакомления — язык понятный, все разжевано — само то, что надо.
Раз уж вы рассказали про логические операции, то можно было так:
/* Моргаем светодиодами */
		GPIOC->ODR ^= (uint32_t)((GPIO_ODR_8 | GPIO_ODR_9);
		for (int i=0; i<DEL_COUNT; i++){}	// Искусственная задержка

А начальное состояние светодиодов задать разное — один горит, второй нет. Кода будет в два раза меньше, и за одно, исключаеещее или узучат.
Потому, что сейчас вы весь порт С портите, а не устанавливаете и скидываете нужные биты. т.е. вы меняете состояние всего порта.
Зато компилятор IAR С++ и С уж точно надежнее, и написан провренной конторой. Кроме того, на него получен сертификат надежности SIL4.
По коду, по вашим двум примерам и там и там надо лезть в спецификацию и читать про регистры, как миниму надо знать, что af7 отвечает за USART3 вот если бы было бы что-то типа этого:
Gpio *pUart3TxPort =  new Gpio(USART3_TX_PORT, USART3_TX_PIN);
pUart3TxPort->SetMode(PM_Alternate);
pUart3TxPort->SetAlternateFunction(AF_Uart3Tx);
Поддержу автора статьи. Разница в том что, одному богу известно, что делает HAL. Пример такой: инициализация происходила с помощью HAL, там есть ффункция System_Init(), вызываемая сразу по сбросу. В проекте использовалась RTOS, которая вешала свои обработчики на прерывания системного таймера, так вот этот систем инит инициализировал и запускал системный таймер, котороый уже начинал долбить до старта операционки, понятно, что ничего хорошего при вызове обработчика РТОС до её инициализации не получалось, и все падало. Понадобилось время, чтобы разобраться, что за… происходит. Смысл всего этого, насколько я понял, в том, что все под вашим контролем, вы инициализируете только то, что надо вам, и только так, как вам надо.
Ну поломали же, скажем в структуре службы Приставов и перевели всех на OpenOffice. Кроме того, безопасность иногда важнее отлаженной экосистемы. А в нынешней ситуации и подавно. Возможно перейти на условно бесплатное Линукс окружение, будет дешевле, чем одновлять все Миайрософтовское ПО + все под контролем будет.
Хаоса не будет, они постепенно все переходят, проект — национальная ОС, не на пустом же месте придумалась — именно из-за это. Вопрос врмени, мне кажется Кто лет 7-10 назад мог подумать, что Андроид захватит мир? и Микросот потеряет огромный рынок мобильных приложений?
Согласен, что гемор, что много бабла, половину которого своруют — но другого выхода нет.

Information

Rating
1,954-th
Location
Челябинск, Челябинская обл., Россия
Date of birth
Registered
Activity