Slash 0 13 марта, 2012 Опубликовано 13 марта, 2012 (изменено) · Жалоба Здравствуйте! Не получается запустить scmRTOS на процессоре msp430f5529. Застревает в DUMMY_INSTR(). Я так понимаю, нужно переписать ассемблерный код переключения контекста, т.к. архитектуры F1xxx и F5xxx процессоров отличаются? Нет ли у кого порта под F5xxx? Сам я вряд ли смогу его сделать. OS_Kernel.cpp void TKernel::sched() { uint_fast8_t NextPrty = highest_priority(ReadyProcessMap); if(NextPrty != CurProcPriority) { SchedProcPriority = NextPrty; raise_context_switch(); do { enable_context_switch(); DUMMY_INSTR(); disable_context_switch(); } while(CurProcPriority != SchedProcPriority); // until context switch done } } Изменено 13 марта, 2012 пользователем Slash Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 123 14 марта, 2012 Опубликовано 14 марта, 2012 · Жалоба Застревает в DUMMY_INSTR().Не вызывается прерывание переключения контекста или оно не переключает контекст. Учитывая, что программа продоллжает работать - скорее первое. Я так понимаю, нужно переписать ассемблерный код переключения контекста, т.к. архитектуры F1xxx и F5xxx процессоров отличаются?В ассемблерном коде встречаются строчки "#elif __CORE__ == __430X_CORE__", т.е. он должен работать на ядре 430X. Там даже есть набор примеров для ядра 430X. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Slash 0 14 марта, 2012 Опубликовано 14 марта, 2012 · Жалоба Спасибо. Я немного поторопился, нужно было поразбираться глубже. Для переключения контекста я использовал Компаратор B. Но, в отличие от Компратора А (на основе которого сделано переключение в примерах scmRTOS), запрос прерывания не сбрасывается автоматически при входе в обработчик прерывания. Для сброса запроса прерывания нужно прочитать регистр CBIV, что заодно и сбросит флаг CBIFG в регистре CBINT. Я добавил строчку mov.w &CBIV,&CBIV в файл OS_Target_asm.s43 и программа заработала: #if scmRTOS_CONTEXT_SWITCH_SCHEME == 1 // extern OS_ContextSwitchStackData extern os_context_switch_hook public context_switcher_isr common INTVEC(1) org CONTEXT_SWITCH_ISR_VECTOR dc16 context_switcher_isr rseg ISR_CODE(1) context_switcher_isr: save_regs mov.w SP,r12 xcall #os_context_switch_hook mov.w r12,SP l_restore_context: restore_regs mov.w &CBIV,&CBIV // добавил reti #endif // scmRTOS_CONTEXT_SWITCH_SCHEME Можно ли добавить какую-то обертку (например в файл scmRTOS_TARGET_CFG.h) для добавления кода сброса запроса прерывания? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 50 14 марта, 2012 Опубликовано 14 марта, 2012 · Жалоба Можно ли добавить какую-то обертку (например в файл scmRTOS_TARGET_CFG.h) для добавления кода сброса запроса прерывания? Да, так и делается. Из contex_switch_hook() вызывается INLINE void context_switch_user_hook() (только надо разрешить её вызов при конфигурации), в ней и сделать все необходимые дополнительные действия. Посмотрите пример для AVR, там как раз блокируется прерывание переключения контекстов внутри кода переключения. Этот пользовательский хук определён как раз в scmRTOS_TARGET_CFG.h. Этот файл и предназначен для тонкой настройки аппаратуры МК, которая используется для поддержки ОС. Для того чтобы не ограничивать пользователя в выборе этой аппаратуры, этот код вынесен на уровень пользовательского проекта. Если выбрали другой источник прерываний для переключения контекстов, то нужно и соответствующий код поддержки обеспечить для него. Вы на правильном пути. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 123 14 марта, 2012 Опубликовано 14 марта, 2012 · Жалоба Можно ли добавить какую-то обертку (например в файл scmRTOS_TARGET_CFG.h) для добавления кода сброса запроса прерывания?Вы можете вставить эту команду в функцию OS::context_switch_user_hook(), предварительно разрешив ее использование в scmRTOS_CONFIG.h строкой #define scmRTOS_CONTEXT_SWITCH_USER_HOOK_ENABLE 1 Саму функцию можно сделать встраиваемой и поместить в scmRTOS_TARGET_CONFIG.h: namespace OS { INLINE void context_switch_user_hook() { CBIV = CBIV; } } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Slash 0 14 марта, 2012 Опубликовано 14 марта, 2012 · Жалоба Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
varvar 0 22 мая, 2012 Опубликовано 22 мая, 2012 · Жалоба и программа заработала: А не могли бы все изменения кратенько описать? Там их, вроде, немного. Вроде как все относящееся к компараторному регистру поменял, но пока ничего не получилось, компилятор то ли сам по себе глючит, то ли я его недопонимаю. Как у Вас компилятор отнесся к DEFCW( ADC10CTL0 , ADC10CTL0_)? У меня компилятор на эту строку изругался (файл msp430f5510.h) при компиляции OS_Target_asm.s43. Что ассемблеру тут не нравится (определение из msp430f5510.h)? #define DEFCW(name, address) __no_init union \ { \ struct \ { \ volatile unsigned char name##_L; \ volatile unsigned char name##_H; \ }; \ volatile unsigned short name; \ } @ address; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 123 22 мая, 2012 Опубликовано 22 мая, 2012 · Жалоба У меня компилятор на эту строку изругался :bb-offtopic: Предлагаете нам догадаться, как именно он изругался - предлагаем вам догадаться, что именно ему не понравилось. Что ассемблеру тут не нравитсяНаверное ключевые слова совершенно другого языка программирования (Си) union, struct, volatile, unsigned, char, short, @? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
varvar 0 22 мая, 2012 Опубликовано 22 мая, 2012 · Жалоба Я потому и хотел бы услышать ответ от товарища, которому удалось запустить scmRTOS на этом процессоре - я ничего от себя не добавлял, кроме модификаций связанных с компаратором, задача пустая абсолютно - ждать - переключить лапу. Зачем IARу понадобилось цеплять к этому ассемблерному файлу именно этот h файл - для меня загадка. Для F2xx в h файлах таких извратов нет, посему все проходит. Спасибо за наводку, буду рыть дальше. А наличие готового примера работающего с F5xx все-таки значительно облегчило бы участь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Slash 0 29 мая, 2012 Опубликовано 29 мая, 2012 · Жалоба А наличие готового примера работающего с F5xx все-таки значительно облегчило бы участь. Выкладываю проект, который у меня заработал. rtos_5529.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
varvar 0 2 июня, 2012 Опубликовано 2 июня, 2012 · Жалоба Выкладываю проект, который у меня заработал. Спасибо, у меня тоже по мотивам Ваших сообщений заработало. Но выглядит аляповато. Может, авторы со временем добавят сами в scmRTOS F5xx - все-таки и сами процессоры дешевле, и отлаживать их можно SBW - программатор тексас шлет за около 5 долларов с доставкой. И просто через USB можно загружать код. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arhiv6 14 23 октября, 2015 Опубликовано 23 октября, 2015 · Жалоба Добрый день. А мог бы кто-нибудь выложить рабочий пример для MSP430F5 под GCC? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться