Перейти к содержанию
    

Ликбез по портированию ОС на МК

Не имея опыта в портировании и построения системы на RTOS возникает ряд вопросов по безопасности.

Портировал FreeRTOS на sam7s и кейл. С переключением контекстов вроде как разобрался, простые задачи переключаются, с непростыми пока проблемы.

 

На что следует обратить особое внимание при написании задач (tasks), упуская вопросы обработчиков прерываний. Просто в моей системе они отсутствуют.

 

Проблема с одновременным доступом решается вроде как queue.

 

CS ряда чипов на шине SPI работают программным ногодрыганием, все участки обращения по SPI короткие. Обращения может идти в задачах разных приоритетов. Поможет ли тут enter_CRITICAL, exit_CRITICAL от ситуаций когда несколько CS могут оказаться низкими?

 

Проверял и судя по всему не спасает...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С переключением контекстов вроде как разобрался, простые задачи переключаются, с непростыми пока проблемы.

Постановка вопроса с простыми "не" совершенное непонятна. Принципиально задачи с точки зрения системы все одинаковы по "сложности".

На что следует обратить особое внимание при написании задач (tasks), упуская вопросы обработчиков прерываний. Просто в моей системе они отсутствуют.

Ну для начала один присутствует :). Посему проблема одна - дабы не переключили задачу по таймеру, когда нельзя.

Проблема с одновременным доступом решается вроде как queue.

Как один из вариантов.

Поможет ли тут enter_CRITICAL, exit_CRITICAL от ситуаций когда несколько CS могут оказаться низкими?

Поможет, если эти функции написаны праввильно в Вашем порте. В штатных, если мне память не изменяет, это работает на __disable/enable_interrupt, что дубово, но (если опять-таки обеспечена компенсация документированных багов работы с CPSR в части запрета прерываний)обеспечивает непрерываемость критической секции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Постановка вопроса с простыми "не" совершенное непонятна. Принципиально задачи с точки зрения системы все одинаковы по "сложности".

 

Процессор сваливается в дАборт когда работает процесс, где имеется процедура с длительными (в маштабах периода цикла системы) вычислениями: плавающая запятая, тригонометрия, матричные операции. Признаки переполнения стека отсутствуют. Там нет даже никаких обращений к переферии, математика одна.

 

Ну для начала один присутствует . Посему проблема одна - дабы не переключили задачу по таймеру, когда нельзя.

 

Этот один не считается, ему всё можно и вроде не создаёт проблем... :)

 

Как один из вариантов.

 

По поводу "очередей".

Тк пока я просто перестраиваю уже имеющуюся систему, то IPC пока идёт у меня напрямую через глобальные переменные. Не касаясь адекватности обработки данных, насколько безопасен такой подход?

 

Поможет, если эти функции написаны праввильно в Вашем порте. В штатных, если мне память не изменяет, это работает на __disable/enable_interrupt, что дубово, но (если опять-таки обеспечена компенсация документированных багов работы с CPSR в части запрета прерываний)обеспечивает непрерываемость критической секции.

 

Пока что в обрамлении критической секции у меня только отключение\включение прерываний. А можно по-подробнее про дубовость и баги ? :) В том же контексте ликбеза :)

 

Сейчас я диагностировал у себя две проблемы: неадыкватная работа SPI в силу неясности работы ЧипСелектов (зацикливается в ожидании окончания передачи SPI), падение в датаАборт одной из процедур.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Процессор сваливается в дАборт ... Там нет даже никаких обращений к переферии, математика одна.

Деление на 0 тоже вызывает abort, правда это было под iar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Деление на 0 тоже вызывает abort, правда это было под iar

 

Проверил в Кейле, не вылетает. Возвращает бесконечность. ( по крайней мере так пишет симулятор )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...