|
|
  |
Вопросы по scmRTOS |
|
|
|
Oct 6 2009, 02:56
|

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

|
Цитата(sevstels @ Oct 5 2009, 20:41)  Это конечно удивительно, автор работает ещё 4.0 версией VDSP! Надо иметь железные нервы... был в шоке. Вы на дату выхода релиза 3.05 посмотрите. На тот момент стабильной была версия 4.5, на ней все и тестилось. Поскольку совместимость между 4.0 и 4.5 была, то имя директории и не переименовывалось. В настоящее время автор работает на версии 5.0, не сомневайтесь - иначе откуда бы в репе и снапе взялась соответствующие VDSP 5.0 версии файлов. Цитата(sevstels @ Oct 5 2009, 20:41)  Кстати потестил на BF561 (600/150) - всё аж летает  Это радует.  Цитата(sevstels @ Oct 5 2009, 20:41)  При компиляции есть предупреждение: ".\scmRTOS\BF533\OS_Target_cpp.cpp", line 61 (col. 5): cc1746: {D} warning: Externally defined variable Kernel, possibly used in constructor before it has been constructed Есть такая буква. Формально компилятор прав, хотя по факту ничего опасного там нет, все в порядке. Надо, конечно, пофиксить. Пока еще не решено, как именно сделать. Самое простое - объявить таблицу указателей процессов как статический член класса. В первой версии, кстати, так и было. Цитата(sevstels @ Oct 5 2009, 20:41)  Дык что тут думать? Проще не бывает. scmRTOS BF533 vdsp 4.0scmRTOS BF533 vdsp 4.5scmRTOS BF533 vdsp 5.0Или на php простенький скрипт, по какой ссылке кликнули, сервер соответствующие файлы в архив и закатал. - Я не знаток веб технологий. Но есть кое-какие ограничения. Например, по правилам sourceforge.net нельзя на сайте хранить файлы для закачки. Все, что подлежит скачиванию, должно быть размещено на download серверах. А там все по релизам.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Oct 6 2009, 07:27
|

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

|
Цитата(sevstels @ Oct 6 2009, 10:45)  ----------------Configuration: MAIN_BF561 - Debug---------------- Linking...
[Error li1021] The following symbols referenced in processor 'p0' could not be resolved: 'ContextSwitcher_ISR [_ContextSwitcher_ISR]' referenced from 'corea.dlb[main_core_a.doj]' 'OS_Start [_OS_Start]' referenced from 'corea.dlb[main_core_a.doj]'
Linker finished with 1 error cc3089: fatal error: Link failed Я не работал с двухядерником, нюансов, связанных с ним, не знаю. Но по сообщению линкера похоже, что в объектники не попали потроха из ассемблерного файла "OS_Target_asm.sbf" - обе функции, которые не найдены, описаны в этом файле. Если собираете оболочкой, то проверьте, транслируется ли этот файл. Оболочка, помнится, не признавала для асмовых файлов никаких расширений, кроме .s, .asm и .dsp. Поменяйте расширение, попробуйте.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Oct 6 2009, 09:18
|

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

|
Цитата(sevstels @ Oct 6 2009, 14:43)  Расширение давно поменял, файл OS_Target_asm.asm Проект отлично собирался и работал в железке, пока был для одного ядра... Тем не менее, проблема именно из-за асмового файла. У вас есть еще другие ассемблерные файлы в проекте? Проверьте, транслируется ли сам файл - от него должны оставаться следы - OS_Target_asm.doj. Включается ли этот объектный файл в процесс сборки (линковки)? Если объектные файлы заключаются в библиотеку - я понял, что на двухядернике все объектные модули для одного ядра собираются в библиотеку, - посмотрите ее содержимое (утилитой elfar с ключом -р), содержится ли этот файл в ней. Где-то он потерялся.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Jan 23 2010, 21:31
|
Группа: Участник
Сообщений: 3
Регистрация: 23-07-05
Пользователь №: 7 044

|
Добрый день. Я новичок в программировании, не судите строго. у меня есть задача, которая одновременно должна ждать три события. Одно от системного твика и возможны 2 сообщения от разных источников. Получается, что я не могу использовать ни Sleep(N) ни Message.wait() Ведь по осутствию первого же из этих событий задача передаст управление операционке и не проверит остальные. Или я где-то путаю?
|
|
|
|
|
Jan 24 2010, 10:48
|

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

|
Цитата(vzuravlo @ Jan 24 2010, 03:31)  у меня есть задача, которая одновременно должна ждать три события. Одно от системного твика и возможны 2 сообщения от разных источников. Получается, что я не могу использовать ни Sleep(N) ни Message.wait() Ведь по осутствию первого же из этих событий задача передаст управление операционке и не проверит остальные. Или я где-то путаю? Вы можете использовать message<...>::wait(timeout). Задаете таймаут ожидания и все. Если пришло какое-то событие раньше таймаута, то функция вернет true, и обрабатываете событие, если события не пришли до истечения таймаута, то получаете результат функции false, и обрабатываете этот вариант. Процесс будет в любом случае "разбужен" либо по приходу события, либо по таймауту.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Jan 24 2010, 11:11
|

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

|
Цитата(dxp @ Jan 24 2010, 12:48)  Вы можете использовать message<...>::wait(timeout). Задаете таймаут ожидания и все. Если пришло какое-то событие раньше таймаута, то функция вернет true, и обрабатываете событие, если события не пришли до истечения таймаута, то получаете результат функции false, и обрабатываете этот вариант. Дополнение: Если "таймерная" сетка нужна более-менее фикисрованная (пусть с дрожанием, но без накопления ошибки), то её вести в самом процессе через GetTickCount(), беря при старте процесса текущее значение и добавляя к нему период. После каждого просыпания (точнее, перед каждым вызовом wait() ) смотреть опять по GetTickCount() - сколько осталось времени и этот остаток передавать в message<...>::wait(timeout), по достижении снова добавлять период к локальноq переменной. Её при этом, кстати, не обязательно делать DWORD, если просыпаться нужно каждые, к примеру, 10 тиков, то локальная копия системного тика вполне может быть 1-байтовой.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Feb 26 2010, 15:57
|
Местный
  
Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205

|
Возник небольшой вопрос при использовании scmRTOS. Как в файле scmRTOS_CONFIG.h задавать общее количество процессов через макрос (и можно ли вообще)? Т.е. как-то так Код #include "Priority.h"
#define scmRTOS_PROCESS_COUNT TOTAL_PROCESS_NUMBER , где TOTAL_PROCESS_NUMBER задается в файле Priority.h который выглядит следующим образом Код #ifndef _BSP_MRTP4AN_PRIORITY_H #define _BSP_MRTP4AN_PRIORITY_H
#include <scmRTOS.h>
#define ANMEAS_PRI (OS::pr0) #define UART0_PRI (OS::pr1) #define UART1_PRI (OS::pr2) #define TECHNO_PRI (OS::pr3) #define PERIPH_PRI (OS::pr4)
#define TOTAL_PROCESS_NUMBER (5)
#endif /* _BSP_MRTP4AN_PRIORITY_H */ При попытке компилировать, вылазят такие ошибки CODE In file included from ../../bsp/scmRTOS/AVR/OS_Target.h:121, from ../../bsp/scmRTOS/Common/scmRTOS.h:52, from ../../bsp/MRTP4an/Priority.h:19, from ./src/scmRTOS_CONFIG.h:56, from ../../bsp/scmRTOS/AVR/OS_Target_asm.S:51: ../../bsp/scmRTOS/Common/scmRTOS_defs.h:73:2: error: #error "Error: Config macro scmRTOS_SYSTIMER_NEST_INTS_ENABLE must be defined!" ../../bsp/scmRTOS/Common/scmRTOS_defs.h:82:2: error: #error "Error: Config macro scmRTOS_SYSTEM_TICKS_ENABLE must be defined!" ../../bsp/scmRTOS/Common/scmRTOS_defs.h:92:2: error: #error "Error: Config macro scmRTOS_SYSTIMER_HOOK_ENABLE must be defined!" ../../bsp/scmRTOS/Common/scmRTOS_defs.h:101:2: error: #error "Error: Config macro scmRTOS_IDLE_HOOK_ENABLE must be defined!" ../../bsp/scmRTOS/Common/scmRTOS_defs.h:110:2: error: #error "Error: Config macro scmRTOS_CONTEXT_SWITCH_SCHEME must be defined!" ../../bsp/scmRTOS/Common/scmRTOS_defs.h:120:2: error: #error "Error: Config macro scmRTOS_PRIORITY_ORDER must be defined!" ../../bsp/scmRTOS/Common/scmRTOS_defs.h:239:14: error: #error "Invalid Process Count specification! Must be from 1 to 31." In file included from ../../bsp/scmRTOS/AVR/OS_Target.h:121, from ../../bsp/scmRTOS/Common/scmRTOS.h:52, from ../../bsp/MRTP4an/Priority.h:19, from ./src/scmRTOS_CONFIG.h:56, from ../../bsp/scmRTOS/AVR/OS_Target_asm.S:51: ../../bsp/scmRTOS/Common/scmRTOS_defs.h:73:2: error: #error "Error: Config macro scmRTOS_SYSTIMER_NEST_INTS_ENABLE must be defined!" ../../bsp/scmRTOS/Common/scmRTOS_defs.h:82:2: error: #error "Error: Config macro scmRTOS_SYSTEM_TICKS_ENABLE must be defined!" ../../bsp/scmRTOS/Common/scmRTOS_defs.h:92:2: error: #error "Error: Config macro scmRTOS_SYSTIMER_HOOK_ENABLE must be defined!" ../../bsp/scmRTOS/Common/scmRTOS_defs.h:101:2: error: #error "Error: Config macro scmRTOS_IDLE_HOOK_ENABLE must be defined!" ../../bsp/scmRTOS/Common/scmRTOS_defs.h:110:2: error: #error "Error: Config macro scmRTOS_CONTEXT_SWITCH_SCHEME must be defined!" ../../bsp/scmRTOS/Common/scmRTOS_defs.h:120:2: error: #error "Error: Config macro scmRTOS_PRIORITY_ORDER must be defined!" ../../bsp/scmRTOS/Common/scmRTOS_defs.h:239:14: error: #error "Invalid Process Count specification! Must be from 1 to 31." make: *** [obj/OS_Target_asm.o] Ошибка 1
Без моих модификаций проект собирается нормально. Используется avr-gcc 4.3.3
|
|
|
|
|
Feb 26 2010, 19:00
|

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

|
Цитата(kurtis @ Feb 26 2010, 20:43)  не помогло, те самые ошибки Я попробовал скомпилить свой проект, вставив Код #define TOTAL_PROCESS_NUMBER (5) #define scmRTOS_PROCESS_COUNT TOTAL_PROCESS_NUMBER в scmRTOS_CONFIG.h. Все скомпилилось. А, понял - у вас нарушен порядок включения заголовочных файлов. Вам нужно убрать #include <scmRTOS.h> из Priority.h Priority.h сам включается в scmRTOS.h через scmRTOS_CONFIG.h
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|