Comments 18
В качестве тренировки написания своего это хорошо!
Но еще раз убеждаюсь, что электронщик и программист в микроконтроллерах это должны быть два разных человека.
Вот проще не бывает, порт для кооперативного super simple tasker. И проще и линтом проверен и кода меньше.
github.com/QuantumLeaps/qpc/tree/master/ports/arm-cm/qv/iar
www.state-machine.com/qpc/api.html#api_qv
Но еще раз убеждаюсь, что электронщик и программист в микроконтроллерах это должны быть два разных человека.
Вот проще не бывает, порт для кооперативного super simple tasker. И проще и линтом проверен и кода меньше.
github.com/QuantumLeaps/qpc/tree/master/ports/arm-cm/qv/iar
www.state-machine.com/qpc/api.html#api_qv
+4
электронщик и программист в микроконтроллерах это должны быть два разных человека.
Сильное заявление. И справедливое только для большого и сложного проекта, но 90% (цифра из головы) проектов не такие, поэтому лучше и денежней совмещать.
+2
Да уж, сказано сильно — только вот работодатели про это обычно не знают :-)…
Помнится, ходил на собеседку в «Электроприбор», хорошую для Питера зарплату предлагали, вполне на уровне для «Инженер, регулировщик РЭА».
В результате выяснилось, что они от работника хотят и программирование АРМ на С++, и для ПЛИС Ксайлинкс/Альтера на Верилог чтоб ошибки находил в коде…
Ну чтобы минимум за пару квалифицированных работников работал за одну зарплату.
Вот такие «скромные» хотелки у работодателей нередко встречаются.
Помнится, ходил на собеседку в «Электроприбор», хорошую для Питера зарплату предлагали, вполне на уровне для «Инженер, регулировщик РЭА».
В результате выяснилось, что они от работника хотят и программирование АРМ на С++, и для ПЛИС Ксайлинкс/Альтера на Верилог чтоб ошибки находил в коде…
Ну чтобы минимум за пару квалифицированных работников работал за одну зарплату.
Вот такие «скромные» хотелки у работодателей нередко встречаются.
+4
Мое мнение, что хороший продукт при этом получится может с вероятностью 50 на 50. Может получится, а может нет. Если делается поделка в двух экземплярах, то да так можно делать. Но если, делается электроника и софт для производства 10000 приборов в год. То боже упаси совмещать две эти роли. Один баг в софте или ошибка проектирования электроники и компания теряет 1 000 000 долларов при цене прибора 100 баксов. И кого вы думаете назначаи козлом отпущения?
+1
Не могу полностью согласится, я считаю, что тут дело в опыте и квалификации, и всех грести под одну гребенку я бы не стал. Если условный «Эмбеддер», к примеру, может понимать ассемблер для отлова багов, знать си для средних и мелких проектов, а также уметь в с++ для крупных (то бишь разрабатываемыми приличной командой), знает особенности архитектуры контроллера и именно встраиваемого программирования, понимает принципы RTOS(по необходимости), разбирается как в схемотехнике, так и в корректной трассировке плат, то почему бы и не совмещать эти роли. Тогда, это совсем не обязательно будет мелкая поделка. Очевидно, вышеописанный специалист всегда найдет себе работу с адекватными требованиями и соответствующей оплатой труда.
+1
Данную функцию невозможно написать на языке Си, так алгоритм ее работы полностью разрушает логику языка.
Да ладно, на раз такая функция пишется на чистом С, без ассемблера и без фаз луны:
void Sleep(unsigned long ms)
{
TaskList[TaskNum].TaskSleep = ms;
if (setjmp(TaskList[TaskNum].context) == 0)
{
while(1)
{
....
if(TaskList[TaskNum].TaskSleep==0)
longjmp(TaskList[TaskNum].context, 1);
...
}
}
+3
Не хиляет…
Как найти точку входа в задачу?
Как найти точку входа в задачу?
0
Как найти точку входа в задачу?
Есть варианты. Один — руками заполнить jmp_buf в InitTask. Для этого надо знать его структуру. Другой — в InitTask сделать что-то такое:
static void InitTask1(jmp_buf *buf, void (*TaskPointer)(void), unsigned long stack)
{
set_stack_pointer(stack); // установить указатель стека созданной задачи
if (setjmp(TaskList[TaskNum].context) == 0) {
longjmp(*buf, 1);
} else {
TaskPointer();
KillTask();
}
}
void InitTask(void (*TaskPointer)(void), unsigned long stack)
{
jmp_buf buf;
if (setjmp(buf) == 0) {
InitTask1(&buf, TaskPointer, stack);
}
}
Возможно лучше сделать это через третью промежуточную функцию на ассемблере, которая только и делает, что устанавливает указатель стека.
0
лет 10 назад для AVR была похожая оська YAVRTOS. сейчас сайт ее мертв, но архивы все еще находятся гуглом. в свое время оказалась очень полезной для меня к изучению…
0
0
в веб архиве лучше наверное искать. те ссылки что находят сейчас — не последняя версия. Если нужно, то могу в почту прислать сохраненную в свое время последнюю версию yavrtos (version 1.11, 2009 Apr 02)
0
Почему бы не на файлоомбенник, а то и на гитхаб.
0
положил на github github.com/poulch74/yavrtos
+1
UFO just landed and posted this here
OSA для исходно пиков аналогичная.
0
Sign up to leave a comment.
Операционная система выходного дня