|
Насколько трудно портировать scmRTOS под Keil? |
|
|
|
 |
Ответов
|
Sep 16 2008, 10:37
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Sep 16 2008, 11:19
|
Частый гость
 
Группа: Участник
Сообщений: 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, например как со стеком обходится.
|
|
|
|
|
Sep 16 2008, 12:56
|

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

|
Цитата(DimaM @ Sep 16 2008, 14:19)  я думаю часть вопросов может быть интересна не только мне Возможно, им более интересно, чтобы вы выложили уже готовый порт?  Цитата(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)
|
|
|
|
|
Sep 16 2008, 16:26
|
Частый гость
 
Группа: Участник
Сообщений: 103
Регистрация: 17-12-06
Из: село
Пользователь №: 23 615

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

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

|
Цитата(DimaM @ Sep 16 2008, 19:26)  если осилю то выложу для всех, только сомнения есть - например __task у keil есть, но описан как ключевое слово их собственной RTOS. А это надо глянуть, что при этом генерируется на уровне команд. Варианта два - Это ключевое слово используется в их ОС, но в итоге достаточно "самостоятельное", просто меняет (убирает) прологи/эпилоги, не вставляя никакого специфического кода для их ОС. В этом случае его удастся использовать и в scmRTOS - Слово сильно завязано на их ОС, напихивает в код чего-то непонятного. Тогда OS_PROCESS надо оставить пустым, единственная беда - будет некоторый перерасход стека процесса на сохранение тех регистров, которые реально никогда не будут восстанавливаться плюс немного больше займёт код процесса. Но всё работать будет.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|