Open source
Industrial Programming
Robotics development
Programming microcontrollers
Manufacture and development of electronics
Comments 18
+4
В качестве тренировки написания своего это хорошо!
Но еще раз убеждаюсь, что электронщик и программист в микроконтроллерах это должны быть два разных человека.
Вот проще не бывает, порт для кооперативного super simple tasker. И проще и линтом проверен и кода меньше.
github.com/QuantumLeaps/qpc/tree/master/ports/arm-cm/qv/iar

www.state-machine.com/qpc/api.html#api_qv
+2
электронщик и программист в микроконтроллерах это должны быть два разных человека.

Сильное заявление. И справедливое только для большого и сложного проекта, но 90% (цифра из головы) проектов не такие, поэтому лучше и денежней совмещать.
+4
Да уж, сказано сильно — только вот работодатели про это обычно не знают :-)…
Помнится, ходил на собеседку в «Электроприбор», хорошую для Питера зарплату предлагали, вполне на уровне для «Инженер, регулировщик РЭА».
В результате выяснилось, что они от работника хотят и программирование АРМ на С++, и для ПЛИС Ксайлинкс/Альтера на Верилог чтоб ошибки находил в коде…
Ну чтобы минимум за пару квалифицированных работников работал за одну зарплату.
Вот такие «скромные» хотелки у работодателей нередко встречаются.
+1

Мое мнение, что хороший продукт при этом получится может с вероятностью 50 на 50. Может получится, а может нет. Если делается поделка в двух экземплярах, то да так можно делать. Но если, делается электроника и софт для производства 10000 приборов в год. То боже упаси совмещать две эти роли. Один баг в софте или ошибка проектирования электроники и компания теряет 1 000 000 долларов при цене прибора 100 баксов. И кого вы думаете назначаи козлом отпущения?

+1
Не могу полностью согласится, я считаю, что тут дело в опыте и квалификации, и всех грести под одну гребенку я бы не стал. Если условный «Эмбеддер», к примеру, может понимать ассемблер для отлова багов, знать си для средних и мелких проектов, а также уметь в с++ для крупных (то бишь разрабатываемыми приличной командой), знает особенности архитектуры контроллера и именно встраиваемого программирования, понимает принципы RTOS(по необходимости), разбирается как в схемотехнике, так и в корректной трассировке плат, то почему бы и не совмещать эти роли. Тогда, это совсем не обязательно будет мелкая поделка. Очевидно, вышеописанный специалист всегда найдет себе работу с адекватными требованиями и соответствующей оплатой труда.
+3
Данную функцию невозможно написать на языке Си, так алгоритм ее работы полностью разрушает логику языка.

Да ладно, на раз такая функция пишется на чистом С, без ассемблера и без фаз луны:

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);
            ...
    }
}
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
Возможно лучше сделать это через третью промежуточную функцию на ассемблере, которая только и делает, что устанавливает указатель стека.


Что я и делаю без этих хлопот…
0
Что я и делаю без этих хлопот…

Я не сомневаюсь. Мой комментарий был о
Данную функцию невозможно написать на языке Си
.
0
лет 10 назад для AVR была похожая оська YAVRTOS. сейчас сайт ее мертв, но архивы все еще находятся гуглом. в свое время оказалась очень полезной для меня к изучению…
0
в веб архиве лучше наверное искать. те ссылки что находят сейчас — не последняя версия. Если нужно, то могу в почту прислать сохраненную в свое время последнюю версию yavrtos (version 1.11, 2009 Apr 02)
+1
Мне кажется, что для большинства задач, для решения которых, собственно, и стоит использовать ОСРВ, необходима вытесняющая многозадачность. Кооперативная ОСРВ со статическими задачами ничего особо не дает в сравнении даже с банальной машиной состояний. Наверное, поэтому большинство кооперативных ОСРВ и умерли давно и безвозвратно.
0
Мне ОС нужна для возможности использования чужих исходников, написанных в блокирующем стиле.
Only those users with full accounts are able to leave comments. , please.