|
Начало работы with scmRTOS, Несколько вопросиков |
|
|
|
Feb 20 2008, 14:56
|
Частый гость
 
Группа: Новичок
Сообщений: 83
Регистрация: 2-02-06
Пользователь №: 13 912

|
Хочется научиться работать с этой штукой - scmRTOS & AVR(Atmega8) & IAR 4.30A ! Почитал темы которые есть на форуме, почитал User's Manual v2. Возникло некторое количество вопросов: 1. Какая последовательность создания проекта: мои предположения - создаем в IAR новый проект, тискаем добавить файлы в проект и добавляем OS_Kernel.cpp , OS_Services.cpp , OS_Target_asm.s90 , OS_Target_cpp.cpp , usrlib.cpp. В maim.cpp пишем Код #include <scmRTOS.h> . Затем каким то образом нужно создать самому как я понял scmRTOS_TARGET_CFG.h и scmRTOS_CONFIG.h, но как не ясно или их нужно тупо скопировать из примера автора и если что нада то менять. 2. Почему в примерах автор добавляет Код void OS::SystemTimerUserHook() { } void OS::IdleProcessUserHook() { } Так нужно делать всегда ? 3. Дальше >> понятно что для AVR передачу управления можно осуществить сгенерировав прерывание например от компоратора как описано в документации, но непонятно как нужно оформить функцию обработки этого прерывания, и чем она будет отличаться от функции обработки других прерываний. О взаимодействии между потоками пока вроде понятно. Может кто нить может описать последовательность начальных действий и привести пример кода или хотя бы шапку , где есть процессы и обработчики прерываний и передача управления. Мог написать что - нибудь глупое, потому как в круг моих понятий scmRTOS пока входит очень туманно или вообще не входит.
|
|
|
|
|
 |
Ответов
|
Mar 4 2008, 14:13
|
Знающий
   
Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447

|
При включении моих исходников проекта на Си в проект smcRTOS (пример 1-EventFlag)возникла проблема. Код Error[e18]: Range error, PC offset out of range. Valid range is -4096 (-0x1000) to 4094 (0x0FFE). File: D:\...\scmRTOS\AVR\OS_Target_asm.s90, Line: 234 Source: xjmp ContextSwitcher_ISR Where $ = #no label found# + 0x5C [0x5C] in module "scmRTOS_Asm" (D:\...\1-EventFlag\Release\Obj\OS_Target_asm.r90), offset 0x5C in segment part 1, segment INTVEC What: #no label found# - ($ + 2) [0x1388] Allowed range: 0xFFFFF000 - 0xFFF Operand: #no label found# [0x13e6] in module scmRTOS_Asm (D:\...\1-EventFlag\Release\Obj\OS_Target_asm.r90), Offset 0x0 in segment part 2, segment CODE Мой проект пока состоит из последовательного вызовов функций инициализации различной переферии. Ошибка возникает при подключении lcd_Init(); Отдельно мой проект отлажен под Мега324P. Занимал около 20кБ ROM и около 500 байт RAM. Пробовал изменить на Мега 644P и изменить размеры CSTACK, RSTACK. Не помогло. Как решить эту проблему?
|
|
|
|
|
Mar 4 2008, 16:02
|

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

|
Цитата(alux @ Mar 4 2008, 16:13)  Мой проект пока состоит из последовательного вызовов функций инициализации различной переферии. Каким-то образом обработчик прерывания переключения контекста оказывается в месте, куда не "дотягивается" xjmp из области векторов. Судя по ограничению +/- 4К вместо макроса xjmp подставляется RJMP, хотя нужен JMP. Глянул в исходники: Код #if (A90_PROC_OPTION == 0) || (A90_PROC_OPTION == 1) #define xcall rcall #define xjmp rjmp #else #define xcall call #define xjmp jmp #endif Где определяется A90_PROC_OPTION я не нашел - ни в исходниках, ни в описании ассемблера. Неопределенный символ считается равным нулю. Можно предположить, что перед этим должна быть (утерянная) строка Код #define A90_PROC_OPTION ((__TID__ >> 4) & 0x0F) dxp завтра разберется, откуда вылезла эта бага.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 5 2008, 04:55
|

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

|
Цитата(Сергей Борщ @ Mar 4 2008, 22:02)  Где определяется A90_PROC_OPTION я не нашел - ни в исходниках, ни в описании ассемблера. Неопределенный символ считается равным нулю. Можно предположить, что перед этим должна быть (утерянная) строка Код #define A90_PROC_OPTION ((__TID__ >> 4) & 0x0F) Действительно, косяк. Как он вкрался, не помню хоть убей. Пофиксено. P.S. Лишний раз "порадовался" "красоте" иаровского подхода - поменял имя МК и началось... Регистра TIMSK там уже нет, вместо него есть TIMSK0 и т.д. Я понимаю, что одного регистра не хватает, но зачем было имя-то менять? Пусть бы для совместимости осталось. То же самое касается TCCR0, которого уже тоже нет, а есть два с буквами на конце. Почему бы было не оставить для совместимости старое имя? Не понимаю. И уж зачем вообще было менять имя вектора ANA_COMP_vect на ANALOG_COMP_vect? А если заменили, то и вставили бы код для совместимости. И такие косяки у них с незапамятных времен. Такое впечатление, что о портировании кода даже внутри семейства они вообще не думают, а заголовки для разных процов лабают разные люди, которые никак свои действия друг с другом не координируют. Про упомянутое /* SREG */ #define I 7 #define T 6 #define H 5 #define S 4 #define V 3 #define N 2 #define Z 1 #define C 0 я вообще молчу - яркий образчик бездумного подхода и безответственности. Причем что интересно - это не у всех процов есть такое определение, а только у избранного круга: iom164.h iom324.h iom644.h iom644p.h iopwm2.h iopwm3.h Т.е. больше похоже на чью-то личную инициативу, нежели на общий подход. Бардак, короче.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Mar 5 2008, 07:36
|
Знающий
   
Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447

|
Цитата(dxp @ Mar 5 2008, 08:55)  Регистра TIMSK там уже нет, вместо него есть TIMSK0. Бардак, короче.  Вот только мне не понятно для чего добавили 0 в имена битов SPI ? Цитата /* SPSR */ #define SPIF0 7 #define WCOL0 6 #define SPI2X0 0
/* SPCR */ #define SPIE0 7 #define SPE0 6 #define DORD0 5 #define MSTR0 4 #define CPOL0 3 #define CPHA0 2 #define SPR01 1 #define SPR00 0 Не может же быть несколько SPI-интерфейсов на борту... Или может? Мне кажется, что это они скорее сделали по привычке... Хотя в даташите указаны "правильные" имена. По поводу регистра TIMSK0... Почему не исправлено? Добавить то всего три строчки. Цитата #ifndef TIMSK0 #define TIMSK TIMSK0 #endif Если гора не идет к Магомету, то Магомет идет к горе  Цитата(dxp @ Mar 5 2008, 08:55)  Действительно, косяк. Как он вкрался, не помню хоть убей. Еще не начал работать с OS, а уже отлавливаю косяки. То ли еще будет Цитата(IgorKossak @ Mar 5 2008, 00:09)  Сдаётся мне, что если откроете overview завтра, то там окажется завтрашнее число.  Точно Цитата(alux @ Mar 4 2008, 20:09)  Имеет ли значение уровень оптимизации компилятора для smcRTOS ? Дело в том, что у jacOS есть примечание для IAR C/EC++ for AVR 4.11A/W32 : Цитата Вероятны проблемы при установке опций оптимизации Code motion (?) Cross Call (?) И последнее. Рискну задать глупый вопрос. Если в проекте используется прерывание, но оно не является источником события для процессов, обязательно ли обработчик прерывания должен иметь тип OS_INTERRUPT и на входе ISR создавать объект OS::TISRW_SS ISRW ? И можно ли разрешать глобальные прерывания до OS::Run() ?
|
|
|
|
|
Mar 5 2008, 10:49
|

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

|
Цитата(alux @ Mar 5 2008, 09:36)  Вот только мне не понятно для чего добавили 0 в имена битов SPI ? Не может же быть несколько SPI-интерфейсов на борту... Или может? Я думаю что может. И скорее всего добавление 0 вызвано тем, что они начали таки движение в сторону унификации. Для новых кристаллов биты и регистры будут "пронумерованы" а старые потихоньку вымрут. Процесс перехода всегда сложный, но что поделать... Цитата(alux @ Mar 5 2008, 09:36)  Еще не начал работать с OS, а уже отлавливаю косяки. То ли еще будет  Вы же понимаете, что мы не можем проверить наши исходники на всех возможных процессорах  Мы можем только предполагать, что раз программа работает на ATmegaX (LPC2xxx, BFxxx и т.д.), то она будет работать и на ATmegaY (LPC2yyy, BFyyy и т.д.), потому что все AVR (LPC2, BF и т.д.) похожи. К сожалению, они похожи не во всем, отсюда и такие косяки. Чем больше их найдете вы - тем меньше их останется тем, кто будет использовать ее после вас. Кроме того, я, например, уже не работаю с ADuC70xx и STR71x, порты для которых написал. Для STR71x у меня не осталось железа, на котором я мог бы проверить вносимые изменения. Поэтому исправления найденных в других портах багов или улучшения переносятся в этот порт без проверки. Вы бы что предпочли - старую версию, в которой есть известные глюки или новую, в которой они исправлены, но, возможно, внесены новые?  Цитата(alux @ Mar 5 2008, 09:36)  Рискну задать глупый вопрос. Если в проекте используется прерывание, но оно не является источником события для процессов, обязательно ли обработчик прерывания должен иметь тип OS_INTERRUPT и на входе ISR создавать объект OS::TISRW_SS ISRW ? При отсуствиии в этом прерывании разрешения вложенных - нет, не обязательно. Но помните о размере стека - прерывание будет работать на стеке текущего процесса, значит стеки всех процессов надо будет увеличить на размер, требуемый прерыванию. Если использовать ISRW_SS, то для прерываний организуется отдельный стек, но за это надо платить увеличением времени обработки прерывания. Цитата(alux @ Mar 5 2008, 09:36)  И можно ли разрешать глобальные прерывания до OS::Run() ? Если в разрешаемых прерываниях не используются сервисы ОС, их обработчики не имеют OS::TISRW(__SS), то можно, но зачем?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 6 2008, 06:53
|
Группа: Новичок
Сообщений: 9
Регистрация: 15-02-08
Пользователь №: 35 076

|
Цитата(Сергей Борщ @ Mar 5 2008, 14:49)  Но помните о размере стека - прерывание будет работать на стеке текущего процесса, значит стеки всех процессов надо будет увеличить на размер, требуемый прерыванию. Как узнать максимальное потребление стека задачами? Можно ли проинициализировать все стеки каким-либо значением вроде 0xA5, как в FreeRTOS, и главное, как сделать это проще всего в scmRTOS? Или например в бутлоадере забить всю память байтами 0xA5, а затем прыгать на начало основной программы?
|
|
|
|
|
Mar 6 2008, 13:26
|

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

|
Цитата(Сергей С. @ Mar 6 2008, 08:53)  Как узнать максимальное потребление стека задачами? Можно ли проинициализировать все стеки каким-либо значением вроде 0xA5, как в FreeRTOS, и главное, как сделать это проще всего в scmRTOS? Память стеков уже по умолчанию проинициализирована значением, только не 0xA5 а 0. В портах для ARM на верхушке контекста лежит содержимое CPSR, который не может быть равен нулю (конструкция у него такая). Поэтому я смотрю визуально (отладчиком или через терминал), где первый "не-ноль" - там было занято. Если есть желание забить каким-то своим значением - допишите memset в конструктор TProcess. Цитата(Сергей С. @ Mar 6 2008, 08:53)  Или например в бутлоадере забить всю память байтами 0xA5, а затем прыгать на начало основной программы? Не пройдет - стеки попадают в область глобальных неинициализированных переменных и cstartup обнуляет эту область.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Mar 6 2008, 20:14
|
Группа: Новичок
Сообщений: 9
Регистрация: 15-02-08
Пользователь №: 35 076

|
Цитата(Сергей Борщ @ Mar 6 2008, 17:26)  Если есть желание забить каким-то своим значением - допишите memset в конструктор TProcess. Всего одна строчка кода - а сколько пользы! Вся память как на ладони. Спасибо.
|
|
|
|
Сообщений в этой теме
URANst Начало работы with scmRTOS Feb 20 2008, 14:56 dxp Цитата(URANst @ Feb 20 2008, 20:56) . Зат... Feb 21 2008, 04:11 URANst Вот взял из примера , это обработчик прерывания, к... Feb 21 2008, 06:50 URANst С предыдущим вроде разобрался, все оказалось проще... Feb 21 2008, 11:55 IgorKossak ENABLE_NESTED_INTERRUPTS(); - разрешить вложенные ... Feb 21 2008, 12:14 URANst Так получается что 1 прерывание сис таймера - это ... Feb 21 2008, 12:36 spf Цитата(URANst @ Feb 21 2008, 17:36) Так п... Feb 21 2008, 14:14 alux Тоже решил попробовать эту ОС. Долго не мог решитс... Mar 2 2008, 17:02 dxp Цитата(alux @ Mar 2 2008, 23:02) Выдает п... Mar 3 2008, 04:55 alux Так что же мне делать в этом конкретном случае кро... Mar 3 2008, 06:53 IgorKossak Цитата(alux @ Mar 3 2008, 08:53) Может не... Mar 3 2008, 11:53  alux Цитата(IgorKossak @ Mar 3 2008, 15:53) Су... Mar 4 2008, 15:43   IgorKossak Цитата(alux @ Mar 4 2008, 17:43) В overvi... Mar 4 2008, 20:09    dxp Цитата(alux @ Mar 5 2008, 13:36) Почему н... Mar 5 2008, 11:14    Stas633 И снова "уровень оптимизации".. / см.... Jul 30 2008, 18:42 alux Имеет ли значение уровень оптимизации компилятора ... Mar 4 2008, 16:09 alux Мне не понятно, почему для генерации программного ... Mar 9 2008, 21:15 Сергей Борщ Цитата(alux @ Mar 9 2008, 23:15) Мне не п... Mar 10 2008, 01:42  alux Цитата(Сергей Борщ @ Mar 10 2008, 05:42) ... Mar 10 2008, 04:40   ReAl Цитата(alux @ Mar 10 2008, 06:40) Почему?... Mar 10 2008, 09:08    alux Спасибо за разъяснение. Маленькое уточнение: sbi P... Mar 10 2008, 09:56     ReAl Цитата(alux @ Mar 10 2008, 11:56) Маленьк... Mar 10 2008, 15:36      alux Цитата(ReAl @ Mar 10 2008, 19:36) Глянул ... Mar 10 2008, 16:00       Сергей Борщ Цитата(alux @ Mar 10 2008, 18:00) Но это ... Mar 10 2008, 16:52 alux Возникло пару вопросов. Допустим, есть три процесс... Mar 11 2008, 12:37 dxp Цитата(alux @ Mar 11 2008, 18:37) И второ... Mar 11 2008, 14:03 Сергей Борщ Цитата(alux @ Mar 11 2008, 14:37) 3) Посл... Mar 11 2008, 16:48  alux Цитата(Сергей Борщ @ Mar 11 2008, 20:48) ... Mar 11 2008, 20:31   Сергей Борщ Цитата(alux @ Mar 11 2008, 22:31) Так изн... Mar 11 2008, 22:31    alux Цитата(Сергей Борщ @ Mar 12 2008, 02:31) ... Mar 12 2008, 06:48     Сергей Борщ Цитата(alux @ Mar 12 2008, 08:48) Как бы ... Mar 12 2008, 08:06     dxp Цитата(alux @ Mar 12 2008, 12:48) Согласе... Mar 12 2008, 09:06 alux Реализация меню - это отдельная тема для разговора... Mar 12 2008, 10:45 Сергей Борщ Цитата(alux @ Mar 12 2008, 12:45) PS. Нич... Mar 12 2008, 12:30  alux Спасибо, Сергей. Сам бы до этого не додумался.
... Mar 12 2008, 13:24   Сергей Борщ Цитата(alux @ Mar 12 2008, 15:24) В конст... Mar 12 2008, 16:26 alux Сделал так как Сергей сказал. За исключением того,... Mar 12 2008, 16:57 alux Проблема с повтором решена. Спасибо Сергею Борщу. ... Mar 14 2008, 08:55 alux Как узнать точное использование стека процессами? ... Mar 18 2008, 07:50 dxp Цитата(alux @ Mar 18 2008, 13:50) Как узн... Mar 18 2008, 09:02  alux Цитата(dxp @ Mar 18 2008, 13:02) Сергей Б... Mar 18 2008, 09:38   dxp Цитата(alux @ Mar 18 2008, 15:38) Что так... Mar 18 2008, 13:13  alux Цитата(dxp @ Mar 18 2008, 13:02) После эт... Mar 18 2008, 15:19   dxp Цитата(alux @ Mar 18 2008, 21:19) Уж изви... Mar 19 2008, 04:32    alux Цитата(dxp @ Mar 19 2008, 08:32) В данном... Mar 19 2008, 07:26     dxp Цитата(alux @ Mar 19 2008, 13:26) Что зна... Mar 19 2008, 09:42      alux Цитата(dxp @ Mar 19 2008, 12:42) Там все ... Jun 28 2008, 08:38       Сергей Борщ Цитата(alux @ Jun 28 2008, 11:38) Можно х... Jun 28 2008, 12:29        alux Цитата(Сергей Борщ @ Jun 28 2008, 15:29) ... Jun 28 2008, 18:11        alux Как определить размеры потребления RSTACK процесса... Apr 14 2009, 03:03         dxp Цитата(alux @ Apr 14 2009, 10:03) Как опр... Apr 14 2009, 06:04          alux Цитата(dxp @ Apr 14 2009, 09:04) Иначе (е... Apr 14 2009, 11:09           dxp Цитата(alux @ Apr 14 2009, 18:09) Не рабо... Apr 15 2009, 06:41 alux Обнаружил такую проблему. Если два процесса ждут о... Mar 19 2008, 13:15 dxp Цитата(alux @ Mar 19 2008, 19:15) Обнаруж... Mar 20 2008, 07:17  alux Цитата(dxp @ Mar 20 2008, 11:17) Возможно... Mar 21 2008, 09:07   dxp Цитата(alux @ Mar 21 2008, 15:07) Заменил... Mar 21 2008, 09:27 alux Попробовал создать отдельный ef2 для TProc2 и
Код... Mar 21 2008, 10:39 dxp Цитата(alux @ Mar 21 2008, 16:39) Попробо... Mar 21 2008, 13:58 alux Отладчиком (JTAG) не пользуюсь по причине отсутств... Mar 21 2008, 14:46 dxp Цитата(alux @ Mar 21 2008, 20:46) Отладчи... Mar 22 2008, 07:38 alux Вроде нашел еще один свой прокол : Скорость поступ... Mar 22 2008, 11:28 alux Прошу прощения за невнимательность. Проблема с обн... Mar 23 2008, 15:25 IgorKossak Цитата(alux @ Mar 23 2008, 17:25) ... в р... Mar 25 2008, 09:50 sevstels Хочу поинтересоваться, это только у меня не запуск... Mar 25 2008, 09:11 sevstels Тестировал на примерах scmRTOS v3 AVR.
Изменил тол... Mar 25 2008, 10:43 IgorKossak sevstels, приложите к сообщению файл проекта (.ewp... Mar 25 2008, 11:49 sevstels Пока пытаюсь найти причину сам.
Вот нашёл вот тут:... Mar 26 2008, 05:27 IgorKossak Цитата(sevstels @ Mar 26 2008, 07:27) DEN... Mar 26 2008, 06:23 Ykidia Здравствуйте! Есть небольшой проектик под scmR... Mar 26 2008, 10:33 spf Цитата(Ykidia @ Mar 26 2008, 15:33) Что н... Mar 26 2008, 10:42 Ykidia Хорошо-хорошо, уже создал. Зачем кричать-то? Mar 26 2008, 11:38 sevstels Игорь, в общем, ничего к сожалению не получается.
... Mar 27 2008, 03:48 IgorKossak Цитата(sevstels @ Mar 27 2008, 05:48) Иго... Mar 27 2008, 06:45  sevstels Цитата(IgorKossak @ Mar 27 2008, 15:45) Е... Apr 1 2008, 04:55 Stas633 Прошу прощения за предыдущий пост! (стыдно, н... Jul 30 2008, 20:30 Copypaster При отладке демо-приложения в IAREW v 4.11b для MS... Jul 28 2009, 11:16 IgorKossak Цитата(Copypaster @ Jul 28 2009, 14:16) П... Jul 28 2009, 12:36 Embedder74 Начал разбираться с scmRTOS.3.10. Ответьте, плз. н... Mar 24 2010, 10:09 AHTOXA Цитата(Embedder74 @ Mar 24 2010, 15:09) Н... Mar 24 2010, 12:51 dxp Цитата(Embedder74 @ Mar 24 2010, 16:09) Н... Mar 24 2010, 15:04  Embedder74 Цитата(dxp @ Mar 24 2010, 18:04) Как это ... Mar 25 2010, 06:50 Embedder74 Пользуясь случаем, хочу спросить у DXP. Когда прим... Mar 25 2010, 09:03 dxp Цитата(Embedder74 @ Mar 25 2010, 15:03) П... Mar 26 2010, 07:21 jorikdima Ну и я что ли спрошу.
Почему в проекте, написанном... Mar 26 2010, 08:46 dxp Цитата(jorikdima @ Mar 26 2010, 14:46) По... Mar 26 2010, 12:54  jorikdima Цитата(dxp @ Mar 26 2010, 15:54) Потому, ... Mar 26 2010, 13:24   Сергей Борщ Цитата(jorikdima @ Mar 26 2010, 15:24) По... Mar 26 2010, 13:40   dxp Цитата(jorikdima @ Mar 26 2010, 19:24) Со... Mar 26 2010, 14:48    jorikdima Цитата(dxp @ Mar 26 2010, 17:48) Кстати, ... Mar 27 2010, 06:51     dxp Цитата(jorikdima @ Mar 27 2010, 12:51) Пр... Mar 27 2010, 13:31      jorikdima Цитата(dxp @ Mar 27 2010, 16:31) А что, у... Mar 28 2010, 10:45
3 страниц
1 2 3 >
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0
|
|
|