Goofy 0 3 декабря, 2008 Опубликовано 3 декабря, 2008 · Жалоба Не имея опыта в портировании и построения системы на RTOS возникает ряд вопросов по безопасности. Портировал FreeRTOS на sam7s и кейл. С переключением контекстов вроде как разобрался, простые задачи переключаются, с непростыми пока проблемы. На что следует обратить особое внимание при написании задач (tasks), упуская вопросы обработчиков прерываний. Просто в моей системе они отсутствуют. Проблема с одновременным доступом решается вроде как queue. CS ряда чипов на шине SPI работают программным ногодрыганием, все участки обращения по SPI короткие. Обращения может идти в задачах разных приоритетов. Поможет ли тут enter_CRITICAL, exit_CRITICAL от ситуаций когда несколько CS могут оказаться низкими? Проверял и судя по всему не спасает... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zltigo 0 3 декабря, 2008 Опубликовано 3 декабря, 2008 · Жалоба С переключением контекстов вроде как разобрался, простые задачи переключаются, с непростыми пока проблемы. Постановка вопроса с простыми "не" совершенное непонятна. Принципиально задачи с точки зрения системы все одинаковы по "сложности". На что следует обратить особое внимание при написании задач (tasks), упуская вопросы обработчиков прерываний. Просто в моей системе они отсутствуют. Ну для начала один присутствует :). Посему проблема одна - дабы не переключили задачу по таймеру, когда нельзя. Проблема с одновременным доступом решается вроде как queue. Как один из вариантов. Поможет ли тут enter_CRITICAL, exit_CRITICAL от ситуаций когда несколько CS могут оказаться низкими? Поможет, если эти функции написаны праввильно в Вашем порте. В штатных, если мне память не изменяет, это работает на __disable/enable_interrupt, что дубово, но (если опять-таки обеспечена компенсация документированных багов работы с CPSR в части запрета прерываний)обеспечивает непрерываемость критической секции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Goofy 0 3 декабря, 2008 Опубликовано 3 декабря, 2008 · Жалоба Постановка вопроса с простыми "не" совершенное непонятна. Принципиально задачи с точки зрения системы все одинаковы по "сложности". Процессор сваливается в дАборт когда работает процесс, где имеется процедура с длительными (в маштабах периода цикла системы) вычислениями: плавающая запятая, тригонометрия, матричные операции. Признаки переполнения стека отсутствуют. Там нет даже никаких обращений к переферии, математика одна. Ну для начала один присутствует . Посему проблема одна - дабы не переключили задачу по таймеру, когда нельзя. Этот один не считается, ему всё можно и вроде не создаёт проблем... :) Как один из вариантов. По поводу "очередей". Тк пока я просто перестраиваю уже имеющуюся систему, то IPC пока идёт у меня напрямую через глобальные переменные. Не касаясь адекватности обработки данных, насколько безопасен такой подход? Поможет, если эти функции написаны праввильно в Вашем порте. В штатных, если мне память не изменяет, это работает на __disable/enable_interrupt, что дубово, но (если опять-таки обеспечена компенсация документированных багов работы с CPSR в части запрета прерываний)обеспечивает непрерываемость критической секции. Пока что в обрамлении критической секции у меня только отключение\включение прерываний. А можно по-подробнее про дубовость и баги ? :) В том же контексте ликбеза :) Сейчас я диагностировал у себя две проблемы: неадыкватная работа SPI в силу неясности работы ЧипСелектов (зацикливается в ожидании окончания передачи SPI), падение в датаАборт одной из процедур. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rlab 0 4 декабря, 2008 Опубликовано 4 декабря, 2008 · Жалоба Процессор сваливается в дАборт ... Там нет даже никаких обращений к переферии, математика одна. Деление на 0 тоже вызывает abort, правда это было под iar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Goofy 0 4 декабря, 2008 Опубликовано 4 декабря, 2008 · Жалоба Деление на 0 тоже вызывает abort, правда это было под iar Проверил в Кейле, не вылетает. Возвращает бесконечность. ( по крайней мере так пишет симулятор ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться