Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
электронщик и программист в микроконтроллерах это должны быть два разных человека.
Мое мнение, что хороший продукт при этом получится может с вероятностью 50 на 50. Может получится, а может нет. Если делается поделка в двух экземплярах, то да так можно делать. Но если, делается электроника и софт для производства 10000 приборов в год. То боже упаси совмещать две эти роли. Один баг в софте или ошибка проектирования электроники и компания теряет 1 000 000 долларов при цене прибора 100 баксов. И кого вы думаете назначаи козлом отпущения?
Данную функцию невозможно написать на языке Си, так алгоритм ее работы полностью разрушает логику языка.
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);
...
}
}Как найти точку входа в задачу?
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);
}
}
Операционная система выходного дня