реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Насколько трудно портировать scmRTOS под Keil?
DimaM
сообщение Sep 16 2008, 10:21
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 103
Регистрация: 17-12-06
Из: село
Пользователь №: 23 615



Нравится мне C++ и поэтому smcRTOS интересна, хотел попробовать портировать под Keil, но из за того что с IAR не работал проблемы возникли.

И возник вопрос - а стоит ли связыватся? Как авторы и народ оценивают количество специфических для IAR вещей?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 16 2008, 10:37
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(DimaM @ Sep 16 2008, 13:21) *
Как авторы и народ оценивают количество специфических для IAR вещей?
Несколько макросов в сишных исходниках (INLINE, OS_INTERRUPT, OS_PROCESS) и один асмовый файл. Причем код в асмовом файле переписывать скорее всего не нужно, только директивы ассемблера. Ну и линкерные скрипты, если дефолтные не подойдут. Могу консультировать "что эта фИгня делает в ИАРе" (лучше через ICQ), но поскольку с кейлом не работаю, подсказать "а как это будет в Кейле" скорее всего не смогу.
Портирование на GCC сложнее, ибо он не позволяет указывать thumb или arm для конкретной функции, только для файла целиком.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
DimaM
сообщение Sep 16 2008, 11:19
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 103
Регистрация: 17-12-06
Из: село
Пользователь №: 23 615



Цитата(Сергей Борщ @ Sep 16 2008, 14:37) *
Несколько макросов в сишных исходниках (INLINE, OS_INTERRUPT, OS_PROCESS) и один асмовый файл. Причем код в асмовом файле переписывать скорее всего не нужно, только директивы ассемблера. Ну и линкерные скрипты, если дефолтные не подойдут. Могу консультировать "что эта фИгня делает в ИАРе" (лучше через ICQ), но поскольку с кейлом не работаю, подсказать "а как это будет в Кейле" скорее всего не смогу.
Портирование на GCC сложнее, ибо он не позволяет указывать thumb или arm для конкретной функции, только для файла целиком.

я думаю часть вопросов может быть интересна не только мне
например что делают OS_INTERRUPT, OS_PROCESS
может что то выскажут и знатоки keil, например как со стеком обходится.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 16 2008, 12:56
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(DimaM @ Sep 16 2008, 14:19) *
я думаю часть вопросов может быть интересна не только мне
Возможно, им более интересно, чтобы вы выложили уже готовый порт? wink.gif
Цитата(DimaM @ Sep 16 2008, 14:19) *
например что делают OS_INTERRUPT, OS_PROCESS
Код
#if scmRTOS_CONTEXT_SWITCH_SCHEME == 0
    #define OS_INTERRUPT __arm
#else
    #define OS_INTERRUPT __arm __irq
#endif
Тут, кажется, все понятно и без комментариев. Абисьнять?
Код
#define OS_PROCESS
Т.е. не делает ничего. Заглянув в порт для AVR можно увидеть такое объявление:
Код
#define OS_PROCESS    __task
Т.е. если у кейла есть возможность определить функцию, для которой не надо сохранять контекст на стеке (аналог __attribute__((__naked__)) в GCC) - используйте ее здесь.
Цитата(DimaM @ Sep 16 2008, 14:19) *
может что то выскажут и знатоки keil, например как со стеком обходится.
Со стеком там работа идет на асме, зависимости от компилятора в ней нет.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
DimaM
сообщение Sep 16 2008, 16:26
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 103
Регистрация: 17-12-06
Из: село
Пользователь №: 23 615



Цитата(Сергей Борщ @ Sep 16 2008, 16:56) *
Возможно, им более интересно, чтобы вы выложили уже готовый порт? wink.gif
Код
#define OS_PROCESS
Т.е. не делает ничего. Заглянув в порт для AVR можно увидеть такое объявление:
Код
#define OS_PROCESS    __task
Т.е. если у кейла есть возможность определить функцию, для которой не надо сохранять контекст на стеке (аналог __attribute__((__naked__)) в GCC) - используйте ее здесь.Со стеком там работа идет на асме, зависимости от компилятора в ней нет.

если осилю то выложу для всех, только сомнения есть - например __task у keil есть, но описан как ключевое слово их собственной RTOS.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Sep 16 2008, 18:34
Сообщение #6


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(DimaM @ Sep 16 2008, 19:26) *
если осилю то выложу для всех, только сомнения есть - например __task у keil есть, но описан как ключевое слово их собственной RTOS.
А это надо глянуть, что при этом генерируется на уровне команд. Варианта два

- Это ключевое слово используется в их ОС, но в итоге достаточно "самостоятельное", просто меняет (убирает) прологи/эпилоги, не вставляя никакого специфического кода для их ОС.
В этом случае его удастся использовать и в scmRTOS

- Слово сильно завязано на их ОС, напихивает в код чего-то непонятного.
Тогда OS_PROCESS надо оставить пустым, единственная беда - будет некоторый перерасход стека процесса на сохранение тех регистров, которые реально никогда не будут восстанавливаться плюс немного больше займёт код процесса. Но всё работать будет.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 16:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01414 секунд с 7
ELECTRONIX ©2004-2016