|
Keil uVison + RTL, подробности и детали. |
|
|
|
Feb 13 2007, 16:43
|
Частый гость
 
Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905

|
Цитата(Bosicc @ Feb 13 2007, 16:23)  Ок, тогда добавлю еще одну формулировку вопроса. Есть ли какой нибуть графический интерфейс для удобного конфигурирования RTOS. Что то на подобе графического интерфейса в DSP. Или все нал делать ручками? Для файлов RTX_Config.c и Startup.s есть в uVision (Keil). Когда открываешь один из этих файлов то появляется закладочка с настройками
|
|
|
|
|
Feb 13 2007, 17:07
|
Частый гость
 
Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905

|
Цитата(Bosicc @ Feb 13 2007, 11:42)  Вот решил разобраться как работает компилятор и вообще весь аппарат создания прошивки под ARM. Просмотрев примеры от производителя я обзавелся парочкой вопросов:
1. Как работает функция printf()? Где есть описание что нужно подключить к проекту что б это зароботало.
2. Для чего нужен файл Retarget.c ?
3. Где можно почитать что такое #pragma import(__use_no_semihosting_swi); ?
4. Что происходит когда в настройках проекта я ставлю галочку использования RTX Kernel ? ( Я попробовал использовать в RTOSе функцию printf, а при линковке возникает ошибка bcsp.axf: Error: L6915E: Library reports error: __use_no_semihosting_swi was requested, but _sys_open was referenced )
5. Где можно почитать описание как работают стандартные фунуции и как их инициализировать. 1. Чтобы заработало нужно подключить #include <stdio.h> как и везде 2. Retarget.c - нужен для переназначения стандартных функций С (для того чтобы подставить свою функцию взамен библиотечной). Я в Retarget.c я переопределяю функции ввода/вывода UARTa, как раз для printf (Файл прилагаю). Кстати в примерах программ поставляемых с Keil есть примеры и с использованием printf в том числе и вместе с RTL(Если нужно укажу путь).
Сообщение отредактировал mihask - Feb 13 2007, 17:13
|
|
|
|
|
Feb 13 2007, 17:13
|

Частый гость
 
Группа: Свой
Сообщений: 160
Регистрация: 30-01-07
Из: Minsk
Пользователь №: 24 870

|
Цитата(Bosicc @ Feb 13 2007, 07:42)  Вот решил разобраться как работает компилятор и вообще весь аппарат создания прошивки под ARM. Просмотрев примеры от производителя я обзавелся парочкой вопросов:
1. Как работает функция printf()? Где есть описание что нужно подключить к проекту что б это зароботало. Вам необходимо 1 подключить stdio.h 2 описать ручками функцию putchar Посмотри для примера проект С:\Keil\ARM\RV30\Examples\Measure З,Ы Шустрый Вы,mihask, опередили с ответом.
Сообщение отредактировал KostyanPro - Feb 13 2007, 17:15
|
|
|
|
|
Feb 14 2007, 08:34
|

Частый гость
 
Группа: Свой
Сообщений: 93
Регистрация: 5-03-06
Из: Украина, Киев
Пользователь №: 14 970

|
Хорошо.... Рассмотрение данного примера значительно расширило мой кругозор но так и не дало желаемых знаний. Пример работает хорошо, задания запускаются и вроде бы его работа понятна. Только вот немогу понять, когда писал свою программку на моменте выполнения функции os_init_context() из файла RTX_Config.c, на моменте /* Allocate the memory space for the stack. */ p_TCB->stack = _alloc_box (m_stk); программа подвисает. Как можно понять и где почитать, как это все работает. Читал хелп, но из него понять что предварительно надо сделать для того что б это все заработало... И что самое парадоксальное, использование работающих файлов из одного проекта, не дает работоспособности в другом. А лепить свой проект из заготовок, работу которых я не понимаю, очень не хочеться. Может есть хорошее описание всего этого дела?
|
|
|
|
|
Feb 15 2007, 06:53
|
Частый гость
 
Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905

|
Цитата(Bosicc @ Feb 14 2007, 11:34)  Хорошо.... Рассмотрение данного примера значительно расширило мой кругозор но так и не дало желаемых знаний. Пример работает хорошо, задания запускаются и вроде бы его работа понятна. Только вот немогу понять, когда писал свою программку на моменте выполнения функции os_init_context() из файла RTX_Config.c, на моменте /* Allocate the memory space for the stack. */ p_TCB->stack = _alloc_box (m_stk); программа подвисает. Как можно понять и где почитать, как это все работает. Читал хелп, но из него понять что предварительно надо сделать для того что б это все заработало... И что самое парадоксальное, использование работающих файлов из одного проекта, не дает работоспособности в другом. А лепить свой проект из заготовок, работу которых я не понимаю, очень не хочеться. Может есть хорошее описание всего этого дела? Да действительно в хелпе не шибко подробно все описано.  Но если знать принципы работы операционных систем жесткого реального времени (ссылок на литературу об них этом форуме много ), то в общем то все более понятно становится.  Боле подробного описания на RTL-ARM Keil, я не нашел. Чтобы все заработало нужно: - В Target выбрать RTX Kernel - Настроить Startup.s - здесь инициализация железяки (Железяка описана в даташите на микросхему,настройка в хелпе, для филипса например есть еще книжка Тревора Мартина); - Настроить RTX_Config - здесь инициализация RTOS(описание в хелпе) (нужно обратить внимание на выделение размера стека дело в том что printf требует большого стека до 1.5 K(если float пользуете)); - Настроить Retarget.c (если есть необходимость) (описание в хелпе); - Создать задачу инициализации; - В задаче инициализации проинициализировать систему и создать задачи; - В конце задачи инициализации выполнить функцию удаления задачи инициализации;
|
|
|
|
|
Feb 15 2007, 10:42
|
Частый гость
 
Группа: Validating
Сообщений: 80
Регистрация: 7-12-05
Пользователь №: 11 905

|
Цитата(mihask @ Feb 15 2007, 09:53)  - Настроить Retarget.c (если есть необходимость) (описание в хелпе); Ну не "Настроить Retarget.c" - конечно  - а переписать некоторые библиотечные функции в случае необходимости.
|
|
|
|
|
Feb 16 2007, 23:45
|
Местный
  
Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675

|
Цитата(Bosicc @ Feb 16 2007, 16:10)  Но что самое интересное, что функция os_tsk_delete_self (); не выполняется. Мне казалось, что в документации - Keil\ARM\Hlp\RTL.chm --> RTX Kernel -> Function Reference -> Task Management -> os_tsk_create - все расписано. Почему Вы не читаете документацию? Все, о чем в этой ветке говорится - есть в доках. "... If the new task has a higher priority, then a task switch to the new task will immediately take place." void init (void) __task { os_tsk_prio_self (250); и, кстати, os_tsk_delete_self (); совершенно не обязательна - можно в этой задаче и дальше работать и не запускать лишнюю.
|
|
|
|
|
Feb 17 2007, 11:12
|

Частый гость
 
Группа: Свой
Сообщений: 93
Регистрация: 5-03-06
Из: Украина, Киев
Пользователь №: 14 970

|
Цитата(Andrew2000 @ Feb 16 2007, 22:45)  Почему Вы не читаете документацию? Все, о чем в этой ветке говорится - есть в доках.
"... If the new task has a higher priority, then a task switch to the new task will immediately take place."
void init (void) __task { os_tsk_prio_self (250);
и, кстати, os_tsk_delete_self (); совершенно не обязательна - можно в этой задаче и дальше работать и не запускать лишнюю. 1. Я думал что когда я запускаю новое задание оно не имеет никакого отношения к текущему, тоесть мое задание 100% должно дойти до конца. Теперь понял свою ошибку. Спасибо.
|
|
|
|
|
Feb 28 2007, 11:32
|

Частый гость
 
Группа: Свой
Сообщений: 93
Регистрация: 5-03-06
Из: Украина, Киев
Пользователь №: 14 970

|
Даже незнаю с чего и начать... Как работают таски я разобрался, номного поигрался с ивентами. приоритетами, написал тестик свой, все было ок. Потом решил что пора приступать к болие серьезной работе. Начали писать свой код. 3 дня собирал исходники в кучу, правил синтаксис... одним словом делал что б компилятор не ругался. После того как компилятор успокоился, начал бунтовать линковщик. Его удовлетворил тоже, но в самый последний момент, он мне выдал такое: Error: L6200E: Symbol __stdout multiply defined (by retarget.o and stdio.o).
Я заглянул в файлик retarget.с и закоментировал строку //FILE __stdout;
Все слинковалось и заработал. Но как только в одном из своих тасков, я попробовал вызвать свою функцию, я получил новую ошибку: Error: L6915E: Library reports error: __use_no_semihosting_swi was requested, but _sys_open was referenced
Уже перечитал все их мануалы и хелпы, но я так и не понял как эта штука включается и работает. Может кто нибуть рассказать на пальцах, или ткнуть в книгу умную. Буду очень благодарен, бо уже 3 дня как головой об стену. Все файли перелопатил, но даже незнаю в какую сторону смотреть...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|