AHTOXA 14 4 мая, 2012 Опубликовано 4 мая, 2012 · Жалоба Про пользовательский системный таймер. Сделал так: Инициализацию таймера вынес в WEAK-функцию init_system_timer(). Переименовал SystemTimer_ISR() в Default_SystemTimer_ISR(), а SystemTimer_ISR() объявил WEAK-алиасом для неё. То есть, если ничего не трогать, то всё работает как было. Теперь, чтобы перейти на свой альтернативный системный таймер, надо: написать свою функцию init_system_timer() (extern "C"); (опционально) написать свой обработчик прерывания таймера SystemTimer_ISR(); перенести в таблице векторов SystemTimer_ISR() на место нужного вектора. Мне кажется, что это достаточно удобно. Если не будет замечаний, то я запилю это в транк. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 4 мая, 2012 Опубликовано 4 мая, 2012 · Жалоба На мой взгляд — нормально. Лучше очередного #define. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 5 мая, 2012 Опубликовано 5 мая, 2012 · Жалоба Окей, запилил (rev 539) :) Пример использования будет на днях. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReAl 0 5 мая, 2012 Опубликовано 5 мая, 2012 · Жалоба Думаю, отдельный пример не нужен, просто в каком-то из существующих реализовать на другом таймере и описать это в комментариях к примерам. Как прерывание SPM либо компаратора для переключения контекстов в примерах AVR. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 5 мая, 2012 Опубликовано 5 мая, 2012 · Жалоба Да, я так и хотел. Просто как раз сейчас готовлю примеры для F2xx, вот заодно и приурочу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 5 мая, 2012 Опубликовано 5 мая, 2012 · Жалоба Залил в репозиторий примеры для STM32F2XX (пока три штуки). Пример 2-Message сделан на альтернативном таймере. (функцию init_system_timer() я, подумав немного, переименовал в __init_system_timer(), ибо она в какой-то мере системная). Заодно замерил скорость. Наконец запустил свою плату на F207, IAR 6.30 + TNКernel 72МНz, 2WS, IAR6.30 - 2.16 мкс 120МНz, 3WS, IAR6.30 - 1.30 мкс Платка TE-STM32F217, arm-kgp-eabi-gcc, 120 МГц, 3WS - 1.192 мкс. Правда, для достижения такого результата пришлось задействовать LTO, без него получалось 1.4 мкс. Но всё равно, scmRTOS побеждает! :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 5 мая, 2012 Опубликовано 5 мая, 2012 · Жалоба для достижения такого результата пришлось задействовать LTO LTO - это плохо? В папке 2-Message\prj ничего нет. Скрипт из 1-EventFlag\prj будет работать с USE_LTO=YES? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 6 мая, 2012 Опубликовано 6 мая, 2012 · Жалоба LTO - это тяжёлая артиллерия :) Скрипт везде одинаковый. --- А если использовать svn, то ничего руками копировать не надо: Заходим в нужную папку, командуем: svn co http://scmrtos.svn.sourceforge.net/svnroot/scmrtos/trunk/Samples/CortexM3/GCC/STM32F2XX STM32F2XX Создаётся папка STM32F2XX с примерами. Заходим в неё, командуем: switch.bat , или sh ./switch.sh , и всё появляется само :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 6 мая, 2012 Опубликовано 6 мая, 2012 · Жалоба svn co http://scmrtos.svn.sourceforge.net/svnroot/scmrtos/trunk/Samples/CortexM3/GCC/STM32F2XX STM32F2XX Я где-то уже спрашивал, но не помню где... Какой лучше клиент взять под WinXp? svn ведь не идёт в комплекте к windows. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VslavX 0 6 мая, 2012 Опубликовано 6 мая, 2012 · Жалоба Я где-то уже спрашивал, но не помню где... Какой лучше клиент взять под WinXp? svn ведь не идёт в комплекте к windows. Мне нравится TortoiseSVN - удобно интегрируется прямо в Explorer. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 6 мая, 2012 Опубликовано 6 мая, 2012 · Жалоба Для команд, которые я привёл, достаточно собственно svn. А если нужно что-то графическое - то tortoise svn. Есть ещё RapidSVN, он слабоват, но зато работает и под виндой и под линуксом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 6 мая, 2012 Опубликовано 6 мая, 2012 · Жалоба Не разъяснит ли кто-нибудь такой момент (интересуюсь для углубления понимания): В Оси есть функции disable_context_switch/enable_context_switch, которые реализованы через запрет/разрешение прерываний. А как они должны реализовываться, если делать без запрета прерываний (через маскировку Осевых уровней)? И как должен быть сконфигурён ContextSwitcher_ISR? Должен "сидеть" один на самом низшем уровне прерываний? Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 8 мая, 2012 Опубликовано 8 мая, 2012 · Жалоба Залил недостающий пример 4-Debug для CortexM3/GCC/STM32F2XX. В Оси есть функции disable_context_switch/enable_context_switch, которые реализованы через запрет/разрешение прерываний. А как они должны реализовываться, если делать без запрета прерываний (через маскировку Осевых уровней)? Да. Только там ещё много чего надо будет учесть. И как должен быть сконфигурён ContextSwitcher_ISR? Должен "сидеть" один на самом низшем уровне прерываний? Да. Он работает исходя из предположения, что он прерывает основной поток выполнения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 8 мая, 2012 Опубликовано 8 мая, 2012 · Жалоба Да. Он работает исходя из предположения, что он прерывает основной поток выполнения. Расточительно как-то выглядит, если у проца уровней мало (stm8, xmega): низший исключительно для ContextSwitcher, средний - OS_SystemTimer_ISR и остальные ОСевые прерывания, высший - для вне ОСевых. Тесно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 8 мая, 2012 Опубликовано 8 мая, 2012 · Жалоба SystemTimer тоже можно на низший. И другие малоприоритетные. Смысл в том, чтобы ContextSwitcher не прерывал какое-либо другое прерывание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться