Jump to content

    

uC/OS-II

Здравствуйте!

 

Подскажите, пожалуйста, человеку который только знакомится с uC-OS, какими компиляторами можно собрать проект, использузщий эту ОС под ARM? В первую очередь интересует насколько подходит GCC.

Share this post


Link to post
Share on other sites
Здравствуйте!

 

Подскажите, пожалуйста, человеку который только знакомится с uC-OS, какими компиляторами можно собрать проект, использузщий эту ОС под ARM? В первую очередь интересует насколько подходит GCC.

Большинство портов этой ОС ориентированы под IAR и GCC.

Share this post


Link to post
Share on other sites

Доброе время суток! Совсем недавно начал заниматься программированием МК, почти сразу (толком не разобравшись) подсел на uCOS: скачал ядро, порт для ARM, пару готовых проектов под IAR-ом, опираясь на них "собрал" ядро с портом, создал пару простеньких задач,- работает! Вот теперь хочется понять: а че я сделал? Пожалуйста, кто общался с данной ОС, подскажите:

1. Как корректно инициализировать таймер, необходимый для работы uCOS (по книге должен тикать с частотой 10- 100 Гц), не пойму взаимосвязь данных тиков операционки и, собственно, квареца-> Как точно определить время выполнения конкретной задачи?

2. Почему (в скачанных проектах) между OSInit() и OSStart люди создают одну задачу, а потом, уже из нее все остальные? По manual-у uCOS-а обязательно нужно создать ХОТЯ БЫ ОДНУ, но не одну единственную. Где тайный смысл?

3. В чем разница в использовании семафоров и динамическим управлением приоритетов?

Буду очень признателен за пояснения!

Share this post


Link to post
Share on other sites
Доброе время суток! Совсем недавно начал заниматься программированием МК, почти сразу (толком не разобравшись) подсел на uCOS: скачал ядро, порт для ARM, пару готовых проектов под IAR-ом, опираясь на них "собрал" ядро с портом, создал пару простеньких задач,- работает! Вот теперь хочется понять: а че я сделал? Пожалуйста, кто общался с данной ОС, подскажите:

1. Как корректно инициализировать таймер, необходимый для работы uCOS (по книге должен тикать с частотой 10- 100 Гц), не пойму взаимосвязь данных тиков операционки и, собственно, квареца->

Связь такая:

кварц задает тактовую uC. В зависимости от наличия PLL и его настроек эта тактовая "as is" или умноженная/поделенная на что-то поступает на тактирование ядра и периферии. Тактовая периферии тактирует аппаратный таймер, который вы настраиваете на генерацию периодичесикх прерываний с определенной частотой. Эти прерывания можно использовать для тиков ОС.

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

OSTimeTick()

 

Как точно определить время выполнения конкретной задачи?

Вопрос не понятен. В контексте embedded имеет смысл говорить о % процессорного времени, который среднестатистически необходим для выполнения задаче. Это можно вроде сделать при помощи встроенной в uCOS статистики. А проще банально дергая ноги порта и наблюдая скопом.

 

2. Почему (в скачанных проектах) между OSInit() и OSStart люди создают одну задачу, а потом, уже из нее все остальные? По manual-у uCOS-а обязательно нужно создать ХОТЯ БЫ ОДНУ, но не одну единственную. Где тайный смысл?

Тайный смысл здесь в том, что если хочется использовать задачу статистики, то нужно создать одну задачу, запустить ОС с ней и из нее вызвать OSStatInit()

Подробно об этом расписано в книге по uCOS.

Если задача статистики не нужна, то можно создавать скопом все задачи а потом запускать ОС.

 

3. В чем разница в использовании семафоров и динамическим управлением приоритетов?

Да как бы 2 совершенно разных понятия.

Или это вопрос из серии "чем каша от пионера отличается?" :)))

Share this post


Link to post
Share on other sites

Спасибо большое! А про семафоры я для себя понял так: приоритеты - регулируем порядок следования задач, семафоры - регулируют порядок доступа задач к каким-либо данным (общим).

Share this post


Link to post
Share on other sites

>> приоритеты - регулируем порядок следования задач

Порядок следования задач - вообще такого понятия быть не должно.

 

>> семафоры - регулируют порядок доступа задач

>> к каким-либо данным (общим).

Это делают мютексы (в общем-то тоже семафоры, но со своими свойствами)

 

Вообще рекомендую книжку почитать - там про основные спрособы взаимодействия и синхронизации задач доступно расписано:

http://www.pic24.ru/upload/RTC.rar (10 MB)

Share this post


Link to post
Share on other sites

Спасибо за ссылку! Буду изучать, может появятся более умные вопросы. :twak:

Share this post


Link to post
Share on other sites

Да, я наберусь наглости, и все-таки спрошу: А может есть у кого такая штука "uCOS-II-KA-CSpy"? Я нашел, но старая версия, работает только под IAR-ом 3.х, а под 4. - не хотит. Для "наглядности" не помешала бы! Может кто подскажет пути до'бычи данного чуда!? Или, может быть, способ модификации старой версии под IAR4.30?

Share this post


Link to post
Share on other sites
Да, я наберусь наглости, и все-таки спрошу: А может есть у кого такая штука "uCOS-II-KA-CSpy"? Я нашел, но старая версия, работает только под IAR-ом 3.х, а под 4. - не хотит. Для "наглядности" не помешала бы! Может кто подскажет пути до'бычи данного чуда!? Или, может быть, способ модификации старой версии под IAR4.30?

Новые версии IAR EW уже содержат в себе этот плагин.

См. Project->Options...->Plugins->uC/OS-II

Share this post


Link to post
Share on other sites

Хорошо, спасибо. Буду искать новый IAR. А вот 4.30 - в этом отношении попадает в раздел "старый". Возможно 4.40???, попробую.

Share this post


Link to post
Share on other sites
Хорошо, спасибо. Буду искать новый IAR. А вот 4.30 - в этом отношении попадает в раздел "старый".

Да, в нем этого плагина еще не было

Share this post


Link to post
Share on other sites

Доброе время суток! Небходима косультация... Возможно кто-нибудь работал с микросишными GUями!? Мне удалось подцепить эти GUI к своему "приложению": по шаблону в примерах, вроде как, удалось написать свой "драйвер" к LCD - фунциклирует, - все стандартные средства (типа линию нарисовать, полигон, текст со своим шрифтом и т.д.) отрабатывают. Хотел задействовать Windows Manager (WM) с последующей возможностью размещения всяких Widget-ов. Пробовал создавать разные widget-ы (буквально, копируя, куски кода из примеров), а в ответ тишина, приложение виснет наглухо (уже в железе), причем пробовал как с Осью, так и без нее. Может кто-нибудь сталкивался с подобной проблемой? Поделитесь пожалуйста! Заранее благодарен!

Share this post


Link to post
Share on other sites

Свершилось!

Прикрутил uCOS-VIEW V1.10 к uCOS 2.83 на LPC-2148-E (платка от IAR/OLIMEX)!

Пришлось кой-чего дописать ручонками и усё заработало. УРА!

Share this post


Link to post
Share on other sites

Доброе время суток! Многоуважаемые, кто-нибудь работал с менеджером таймеров в ucos-е? Сейчас я уперся в недостаток таймеров, решил разузнать что енто такое (timer manager?), сперва разузнав немного - обрадовался, но как далее выяснилось можно "создавать" таймеры с периодами, непревышающими перид тика самой операционки. Может я не прав? А операционка тикает 10-100 раз в сек (по мануалу, у меня 100), а мне нужны микросекунды!!! Подскажите, пожалуйста, как выйти из данной ситуации? И вообще может я могу периодически "отбирать" таймер у ОС? - ведь он мне требуется в критической секции кода, где я все равно запрещаю все прерывания средствами ОС (необходимы точные выдержки во времени). Буду признателен за любой совет!

Share this post


Link to post
Share on other sites
Доброе время суток! Многоуважаемые, кто-нибудь работал с менеджером таймеров в ucos-е? Сейчас я уперся в недостаток таймеров, решил разузнать что енто такое (timer manager?), сперва разузнав немного - обрадовался, но как далее выяснилось можно "создавать" таймеры с периодами, непревышающими перид тика самой операционки. Может я не прав? А операционка тикает 10-100 раз в сек (по мануалу, у меня 100), а мне нужны микросекунды!!! Подскажите, пожалуйста, как выйти из данной ситуации? И вообще может я могу периодически "отбирать" таймер у ОС? - ведь он мне требуется в критической секции кода, где я все равно запрещаю все прерывания средствами ОС (необходимы точные выдержки во времени). Буду признателен за любой совет!

 

Что-то я не помню менеджера таймеров, может в новых версиях ОС он появился, а у меня более старая.

Но, количество тиков ОС в секунду обусловлено в основном фактором загрузки процессора на обработку этих тиков. Если процессор быстрый, то количество тиков ОС в секунду можно и увеличить. Если взять к примеру ARM7 на 60МГц тактовой ядра, то можно вполне делать тики ОС с периодом 100 мкс, если это действительно необходимо. Можно попробовать даже 50 мкс, но нужно смотреть загрузку процессора. Если же вам нужны именно микросекунды, то тут необходимо использовать отдельный аппаратный таймер.

По поводу отбирания таймера у ОС. Так вы должны не отбирать таймер, а всего навсего периодически вызывать OSTimeTick(). Как вы это сделаете - ваше лично дело.

К примеру, вы можете запрограммировать таймер на 10 мкс, делать в прерывании все, что вам нужно, а дополнительно каждое 1000-е прерывание вызывать OSTimeTick().

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