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

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

Send message
Для обычных пользователей, думаю — это все не принципиально (все равно все за ними следят :)), а вот для гос структур — очень даже. Думаю 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() вот так:
Да — согласен.
Ну это для себя было, точнее в свободное время для курса в университете(на волонтерских началах пока что), но чисто дома. К стандарту привык, потому что когда ревью кода делаю(сам писал давно очень, а ревью делаю переодически), моя задача проверить код на стандарт первым делом. Типы тоже указаны в стандарте.Скорее всего я его отдельно очень упрощенный для университета сделаю.
Это стандарт кодирования, обзначает class. Наследие использования Си и структур в качестве классов.
Да точно, еще раз вглянул стандарт С++
The parameter-declaration-clause determines the arguments that can be specified, and their processing,
when the function is called. [Note: the parameter-declaration-clause is used to convert the arguments
specified on the function call; see 5.2.2. ] If the parameter-declaration-clause is empty, the function takes
no arguments. The parameter list (void) is equivalent to the empty parameter list.
Да, вы правы, в С++ в нем смысла нет: (void) и () — это одно и то же. Но так написано в стандарте кодирования. А в стандарте написано, потому что видимо раньше писали на Си, и перетекло оттуда.
А еще lint ругается — но сам же пишет, что в С++ это означает тоже самое что с void, что без void. В общем, чтобы удовлетворить lint и пройти без замечаний.
1717 empty prototype for function declaration, assumed '(void)' — An empty prototype,
as in:
void f();
has a different meaning in C than in C++. In C it says nothing about the arguments of the function;
in C++, it says there are no arguments. This message is not given for member function
declarations or for function definitions. Rather, weaker Elective Notes (1917 and 1918) are
given. This is because the chance of ambiguity does not exist in these cases. [11 section 8.2.5]
Про студентов, возможно вы и правы. Но предполагалось, что все даваться им будет на последнем курсе, когда микроконтроллеры уже пройдены, у них отдельный курс по ним есть. Хотя да, предполагаю, что будет так как вы говорите — но попробуем, рассматриваю студентов, как выразился один мой коллега, в качестве стволовой клетки — можно сделать кого угодно, главное чтобы был интерес

По поводу IDE, тут стоит уточнить, что IDE мы используем только для отладки и очень редко. Для сборки используется обычный make файл, сборка прошивается сразу в плату где проходят смоке тесты. И только в случае, если что-то вдруг не работает, делает тестовый проект в IDE для отладки. Но на моей практике, такое было редко. Кстати мейк есть и в моем проекте, просто я не доделал и бросил — это не входило в мою задачу. Там и линтом, например обертка проверялась, чтобы более менее код чистый был.
С++ мы используем у себя во всех проектах, поэтому если студент пришел к нам скажем на практику, первым делом он должен хотя бы на начальном уровне знать его — дальше дело практики.
Основное требование — простота кода и его поддерживаемость, чтобы, скажем — через 3 года, любой инженер мог открыть архитектуру, посмотреть код и быстро все понять. Чистый Си в этом плане проигрывает С++, раньше мы на Си программировали как на С++ для этого, используя структуры в качестве классов. Но это тоже еще то извращение.
Здравствуйте,
IAR лицензионный мы используем на работе, и привыкли к нему, задача наша, найти толковыъ студнтов и потом по возможности взять на работу, а ведь хорошо, когда они уже знают среду в которой мы работаем.
Триал версия IAR для ARM доступна со всеми фичами для приложений до 30 кБ кода. Собтсвенно, это меня устраивает, код получился значительно меньше.
С++ мне нравится по одной простой причине — что при грамотном подходе код получается очень читабельным и понятным. Кроме того, поскольку кодирование это вообще у нас второстепенно :) на первом месте разработка архитектуры, а она у нас делается на UML. С диаграмм UML потом очень удобно все перекладывать в код и классы, чисто теоретически можно их потом автоматом генерить (но это моветон). Для коммерческих проектов, конечно все это делается вручную. Зато по архитектуре сразу понятна задумка автора и можно на раннем этапе указать на ошибки.
А вообще микроконтроллеры шагнули далеко вперед за 8 лет :) И вот микроконтроллер за 2 бакса с 16 кБатам ОЗУ и 128 ПЗУ. поэтому использование С++ тут как бы уже нормально, но если очень надо, можно использовать С++ и на более мелких микроконтроллерах, только надо будет например переопределить new, чтобы динамически память не выделялась, по возможности не использовать виртуальные функции и и еще ряд ухищрений, но думаю, что сейчас это уже не нужно — памяти хватит для любого нашего проекта :)
Он возможно и не проще, потому что я не спец по гиту.
В данном случае, если я вас правильно понял, то это можно сделать двумя путями в TFS, по нашему процессу.
1. Встать на ветку разработчика Foo J. Bar, нажать на файл foobar.c, и получить весь список changesetов. Берем чендсеты с аааа и смотрим до вввв… см картинку, там поле юзер скрыто… буква S. (это я он же lamerok), потому что к сожалению пользователя Foo J. Bar нету.
2. Тоже самое только с метками
Единственно проблема с описание, хотя оно есть, но фильтра по нему нет, хотя можно и отсорторовать. Но опять, же все зависит от того, как у вас построен процесс, вы его строите, так, чтобы не возникало желаний делать такие запросы :) Но это ИМХО.
image

Нет, я не говорю, что это решение лучше, я лишь хочу показать, что оно простое в использовании, свои задачи решает, и имеет свои плюсы, как впрочем и минусы.
Идеальной системы нет и не будет.
В принципе меня устраивал и ClearCase, но просто не дружит IBM с Microsoft, отсюда, куча проблем была с обоими…
Возможно, но опять же я не утверждаю что все компании :) Многие, возможно большинство, на этом построено и их развитие.
Сделал один раз, у тебя купили, купили поддержку, и платят каждый год, за то, чтобы у проблем не было, а возможно за 10 лет ничего и не случиться.
Это как страховка… купил, а в аварию не попал.
А ты на эти деньги живешь, обновляешь, всякие фичи каждые два года выпускаешь, все нормально, все довольны :)

Information

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