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

 
 
10 страниц V  « < 8 9 10  
Reply to this topicStart new topic
> Вопросы по scmRTOS
a9d
сообщение Apr 11 2010, 12:49
Сообщение #136


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Основы использования я уже понял. Для этого достаточно почитать документацию и посмотреть примеры.
А никому не нужно будет лезть в изучение scmRTOS.

Достаточно будет изменять логику работы процессов. Также не нужно будет объяснять почему бесконечный цикл повесил контроллер.
Левых обработчиков прерываний никто добавлять точно не будет.

Ведь когда пишут документацию к проекту под Win никто не описывает как работает ОС.
Go to the top of the page
 
+Quote Post
a9d
сообщение Apr 11 2010, 17:10
Сообщение #137


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 9-04-10
Пользователь №: 56 532



Есть один процесс. Во время выполнения был вызван Sleep(1).
Управление передастся IdleProcess до конца этого тика или до конца этого+1 следующих тик?
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Apr 11 2010, 18:19
Сообщение #138


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Для этого "достаточно посмотреть примеры и почитать документацию" и ответ будет очевиден.
Go to the top of the page
 
+Quote Post
Embedder74
сообщение Jul 5 2010, 05:36
Сообщение #139





Группа: Участник
Сообщений: 10
Регистрация: 8-02-10
Пользователь №: 55 367



IAR AVR 5.30, scmRTOS.3.10

Использую п/п OS::SystemTimerUserHook() в качестве RTC для синхронизации процессов (таймеры в большом дефиците). В ней вызываю флаги событий TEventFlag. Для вызова использую SignalISR(), хотя вариант Signal() тоже работает и имеет более компактный код.
Понимаю, что SystemTimerUserHook() вызывается в прерывании и поэтому надо использовать SignalISR(). Но все же...
Может я что-то не учитываю? Каким способом лучше "сигналить" в моем случае?

Да, забыл сказать, что использую способ передачи управления на основе программного прерывания.

Сообщение отредактировал Embedder74 - Jul 5 2010, 06:14
Go to the top of the page
 
+Quote Post
dxp
сообщение Jul 6 2010, 03:25
Сообщение #140


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Embedder74 @ Jul 5 2010, 12:36) *
Использую п/п OS::SystemTimerUserHook() в качестве RTC для синхронизации процессов (таймеры в большом дефиците). В ней вызываю флаги событий TEventFlag. Для вызова использую SignalISR(), хотя вариант Signal() тоже работает и имеет более компактный код.
Понимаю, что SystemTimerUserHook() вызывается в прерывании и поэтому надо использовать SignalISR(). Но все же...
Может я что-то не учитываю? Каким способом лучше "сигналить" в моем случае?

Из прерываний лучше вызывать функции xxxISR(). Они легче и быстрее, оптимизированы для прерываний. Обычные тоже работают, но в них производятся "лишние" действия.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Embedder74
сообщение Jul 6 2010, 03:43
Сообщение #141





Группа: Участник
Сообщений: 10
Регистрация: 8-02-10
Пользователь №: 55 367



Большое спасибо

Помогите, пожалуйста, разрулить такую ситуацию.
Есть модуль на ассемблере, который включен в проект IAR AVR и вызывает ф-цию С++:

NAME boot
EXTERN BootLoader

ORG 0x7C00 // booloader address
boot:

CALL BootLoader
JMP 0x0000
END boot

сама ф-ция имеет вид:

void BootLoader (void) @ "BOOTSEG"
{
........
}

Линкер не видит ф-цию BootLoader и ругается:
Error[e46]: Undefined external "BootLoader" referred in boot ( D:\Work\AVR\scmRTOS.3.10\Counter\Obj\Boot.r90 )

Раньше, когда писал на С не было никаких проблем, а как перешел на С++ вот такая фигня.
Go to the top of the page
 
+Quote Post
sergeeff
сообщение Jul 6 2010, 06:30
Сообщение #142


Профессионал
*****

Группа: Свой
Сообщений: 1 481
Регистрация: 10-04-05
Пользователь №: 4 007



Многократно уже писалось на эту тему. Ассемблер не понимает С++ -ные имена. Функция должна быть объявлена как:

Код
extern "C" void BootLoader (void);



Стандартный вариант для .h файлов:

Код
#ifdef __cplusplus
extern "C"  {
#endif // __cplusplus

void BootLoader (void);
.......


#ifdef __cplusplus
}
#endif   // __cplusplus

Go to the top of the page
 
+Quote Post
Embedder74
сообщение Jul 6 2010, 08:47
Сообщение #143





Группа: Участник
Сообщений: 10
Регистрация: 8-02-10
Пользователь №: 55 367



спасибо за помощь!
Go to the top of the page
 
+Quote Post
verden
сообщение Sep 6 2010, 04:38
Сообщение #144





Группа: Участник
Сообщений: 12
Регистрация: 25-06-08
Пользователь №: 38 544



Есть ли у когонить порт для sam7s под IAR 5.5 ?
Go to the top of the page
 
+Quote Post

10 страниц V  « < 8 9 10
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


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


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