LINUX.ORG.RU

Сообщения MiDWalkeR

 

embedded software engineer requirements

Форум — Job

Всем привет! Стало интересно сколько стоит embedded software engineer в рамках двух больших городов: Минск и Санкт-Петербург. Может ли человек со следующим списком знаний претендовать на зп в 2,5к usd?

Skills:

  • Опыт разработки встраиваемого ПО 6,5 лет;
  • Знания и уровень владения ЯП: С (высокий уровень), Python (уровень джуниора).
  • Знание паттернов программирования: списки, деревья, протопотоки и т.д.
  • GNU Make - умение написать makefile для сборки проекта своими руками.
  • Опыт работы с RTOS - год (freertos, rtems).
  • Культура программирования, ключевые слова: git/svn, unit tests, GNU gdb, doxygen, Совершенный код.
  • Среды разработки: Vi, Eclipse.
  • Владение linux - достаточное, для разработки ПО в unix средах.
  • Уровень владения английского языка: Intermediate.

 , ,

MiDWalkeR
()

RTEMS + NUCLEO stm32f446re

Форум — Development

Всем привет. Топик не совсем по теме линукса. В надежде найти хоть какую помощь в решении проблемы.

Установил RTEMS для stm32f446re. В качестве hello world, решил понажимать на кнопку и по прерыванию от этой кнопки вывести текст в консоль. Я не использую HAL, взял свой драйвер gpio и exti(проверялись, работают), немножко дописал makefile для примера hello_world_c(RTEMS) и получил следующую проблему, от которой уже башка кипит далеко уже не первый день.

Вот сам проект try_rtems. Коротко что делаю: 1. создаю задачу

rtems_task init(__attribute__((unused)) rtems_task_argument ignored)
{
    rtems_id tid = 0;
    rtems_task_create(
        rtems_build_name('M', 'I', 'M', 'U'),
        1,
        RTEMS_MINIMUM_STACK_SIZE,
        RTEMS_INTERRUPT_LEVEL(0),
        RTEMS_LOCAL,
        &tid);

    rtems_task_start(tid, exti_event, 0);
    rtems_task_delete(RTEMS_SELF);
}
2. В задаче exti_event инициализирую свой exti драйвер. При инициализации настраиваются соответсвующие регистры и указывается callback функция - exti1_callback. Устанавливается приоритет для прерывания и включается прерывание для NVIC контроллера. Бит разрешающий прерывания в регистре IMR не устанавливается, т.е. прерывание пока не генерятся. 3. Используя директиву rtems_interrupt_handler_install, регистрирую прерывание, указывая для него вектор прерывания(EXTI_IRQn) и обрабочик, который будет вызван в случае прерывания. 4. Разрешаю прерывание в драйвере exti. Что в итоге: При запуске для одной единственной задачи в консоль выдаётся строка gcc макроса __LINE__ о текущей строке, т.е. задача работает. Если я нажимаю на кнопку всё замолкает - просто тишина, только кнопка reset возвращает всё обратно к жизни. Если я не регистрирую прерывание с помощью rtems_interrupt_handler_install, а просто в задаче разрешаю прерывания от драйвера и нажимаю кнопку, я получаю в консоль оповещение, что было словлено незарегистрированое прерывание (spurious interrupt: 40), отсюда я делаю вывод, что прерывание работает(хотя и без это было проверено, что прерывание работает корректно).

Что ещё: в доке от rtems'a в C user guide указан директива rtems_interrupt_catch, про rtems_interrupt_handler_install там ни слова. Узнал про неё лишь тогда когда написал в mail list rtems community. Там мне ответил человек, что у него всё ок - он используя hal, используя rtems_interrupt_handler_install у него всё работает. А у меня уже фантазия заканчивается в чём может быть проблема. Лазал по различным заголовочным файлам, чего только не пробовал, всё едино - не работает. Посему прошу помощи знающих людей, которые работают с RTEMS - как корректно проинициализировать менеджер прерываний?

З.Ы. прошу строго не судить код в репозитории, это всё таки пример, а не рабочий проект.

 , ,

MiDWalkeR
()

RSS подписка на новые темы