Jump to content

    

Оцените возможность и целесообразность

Уважаемые Гуру,

 

Стоит довольно-таки простая задача: наш контроллер должен делать несколько простых действий по сбору и общету данных и потом выводить это на маленький дисплейчик. Устройство носимое, питание батарейное. Именно:

 

- раз в 10 миллисекунд передать/принять данные по SPI от датчика. Всего 48 бит. Время 10mS очень критично и хотелось бы, чтобы ничего не мешало этому процессу.

- принимать данные по уарту раз в секунду (около 1кб), передавать данные... раз в минуту (несколько байт).

- иногда (раз или два раза в минуту) записывать данные на флэш (atmel at45dbxxx).

- кнопки обслуживать (6 штук) желательно по прерываниям.

- 2 раза в секунду (если надо) обсчитывать данные и обновлять дисплей.

- раз в час или по мере необходимости синхронизировать внутренний тактовый генератор с внешним сигналом, чтобы более-менее синхронно (+-5mS) опрашивать внешний датчик по SPI!!!

 

На самом деле это раньше было сделано и без оси, правда датчик опрашивался раз в 50mS и обработка была значительно проще. Но тут, при уменьшении интервала опроса датчика до 10mS, столкнулись с проблемой обсчета данных - приходится использовать плавающую точку (ну никак в целочисленную дробную арифметику его не вписать) и обсчет не разбить на части, чтобы уложить каждую часть в 10mS, а весь счет длится около 120-130mS.

 

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

 

Мы предполагаем использовать stm32L151cb на 14МГц.

 

Вопрос - подойдет ли FreeRTOS для этой задачи? Ну очень жесткие требования к 10mS опросу датчика.

Возможно ли синхронизировать внутренний такт у этого проца?

 

И еще - хотелось бы использовать USB, а не уарт как сейчас, для обмена данными с компом. Для usb надо 48МГц. Можно ли как-нибудь, по внешнему прерыванию, переключать тактовую?

 

Есть ли примеры использования UART, SPI, etc. для этой оси и для этого проца?

 

Заранее благодарю

Share this post


Link to post
Share on other sites
Вопрос - подойдет ли FreeRTOS для этой задачи? Ну очень жесткие требования к 10mS опросу датчика.

Возможно ли синхронизировать внутренний такт у этого проца?

 

Подойдет. Но для жесткости надо будет все равно применить прерывания и DMA.

 

Любая RTOS позволяет ввести приоритизацию задач. А главное можно легко узнать насколько загружен процессор задачами.

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

Share this post


Link to post
Share on other sites
Подойдет. Но для жесткости надо будет все равно применить прерывания и DMA.

 

А можно ли вызывать время-критичесие задачи прямо из обработчика прерывания xPortSysTickHandler() ?

или будут какие-то грабли?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this