Pull to refresh
75
0
Сергей@lamerok

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

Send message
Хорошо было графики привести с результатами тестирования, а то текст плохо смотрится.
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 назад мог подумать, что Андроид захватит мир? и Микросот потеряет огромный рынок мобильных приложений?
Согласен, что гемор, что много бабла, половину которого своруют — но другого выхода нет.
Для обычных пользователей, думаю — это все не принципиально (все равно все за ними следят :)), а вот для гос структур — очень даже. Думаю 10 винда поставит на себе крест в госструктурах и те полностью перейдут на отечественную Linux подобную операционку. Досвидания Windows! :)
Тоже вначале была такая идея, я проверил, не получилось. Но даже если бы и вышло, то имена функций в стартапе выглядили бы ужасно :) и не понятно для нормального человека.
Присоединяюсь — автор молодец, очень интересно!
Да, вначале статьи были на хабре, но потом разделы «Програмирование микроконтроллеров» и Сделай сам сюда переехали, а С++ там остался. А больше на Хабре, я ничего подходящего не нашел… И вообще, походу я что-то напутал, у меня и там и там статья опубликовалась.
То что все делают ошибки и такую тоже, это факт, я немного о другом, как такую ошибку пропустили вообще, что вы её нашли, т.е. по другому говоря, код вообще похоже не проверялся ничем, а значит процесс разработки был похож на быстрее-дешевле-некачественнее. Такой ошибки не должно быть в продуктовой коде — вот к сему я.
анализаторы кода очень хорошая и нужная вещь, но ещё более важная по- моему мнению — это peer review кода, а такое ощущение, что этот код никто не ревьюил, ну как можно break пропустить? походу процесс разработки у данной программ — как получится
Спасибо за книгу, обязательно почитаю.
Извиняюсь нажал на Enter случайно…
1. Да по поводу динамического выделения памяти — согласен, в 3 части как раз фильтр реализовал, без него.
По поводу создания объектов с main(), тут есть особенность freeRTOS, если объявлять в main() вот так:
void main (void)
{
  cLedsDirector oLedsDirector;
  ...
  oRTOS.creatTask(&oLedsDirector...) ;
  oRTOS.startScheduler();
 
}

То вообще из-за особенностей работы freeRTOS, ничего работать не будет, посколько oLedsDirector создан на стеке, а при запуске планировщика и первой задачи, весь стек идет к чертям собачим, так как freeRTOS указатель стека перезаписывает на начало.
Поэтому тут надо будет либо немного «патчить» операционку, либо создавать объект oLedsDirector глобально. А глобальные объекты, тоже как то не по понятиям.
Поэтому нью тут решение подходящее, можно его переопределить, если уж совсем надо.
Из-за этой особенности операционки, нельзя создавать локальные переменные в мейне, ну точнее можно, но надо знать, что их потом нельзя использовать.
Ну и в данном проекте, все объекты создаются один раз в одном месте. и живут пока ресет не нажмут. Поэтому тут ничего плохого в этом нет. Никакого переполнения памяти не будет.

2. В лоу левел инит, скинул, только, то что не надо для конкретного проекта перенастраивать никогда. Но конечно, же это просто так мне захотелось, можно сделать и настройку отдельно, но я не хотел вообще железо(которое не перенастраивается) нигде трогать — настроил и забыл, а в классы вынес только, то что по ходу меняется. Там в регистр записать что-то, проверить и так далее…
Да по поводу динамического выделения памяти — согласен, в 3 части как раз фильтр реализовал, без него.
По поводу создания объектов с main(), тут есть особенность freeRTOS, если объявлять в main() вот так:
Да — согласен.

Information

Rating
Does not participate
Location
Челябинск, Челябинская обл., Россия
Date of birth
Registered
Activity