Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/54: Рейтинг темы: голосов - 54, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 316
1

Потоковая ос под Cortex-M3 GCC EmBitz 0.40

26.11.2015, 12:02. Показов 10233. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
/* репозиторий */
/* https://bitbucket.org/OVY-srok/rtos-cortex-m3-gcc */

Ос потоковая, это означает что все активные на данный момент задачи выполняются в порядке очереди, без приоритетов.
Аналог приоритета - процент выделенного времени , есно в процентах от 100% до 1% - от номинального значения, которое есно задаётся при старте.
Старт ос в любом месте майна, но при этом оптимизация есно должна стоять os. После старта есть две задачи: майн и нулевая - которая отдаёт время если кто-то ещё активен.
Задача может: быть активной, уснуть, быть зависимой (ожидание), запускать уникальные задачи, запускать задачи под своим именем, может уступить время (актуально для короткого циклического кода), может убиться и удалиться в любом участке кода спец командой, может автоматически стереться в случае отсутствия бесконечного цикла, может разбудить зависимую задачу.

Есть отладочная инфа, на данный момент это максимально использованный размер стека под задачу. В случае превышения лимита - стоп в режиме отладки и пошаговый возврат в зажравшуюся задачу R2 при этом показывает последний заюзанный размер стека в байтах. Понятно что нужно поболее функций, но я не успеваю.

Прерывания запускаются и удаляются под любым немыслимым углом, даже в прерывании, и так-же можно удалять.
Пока не сделано:
При удалении задачи должна чиститься вся нить, все задачи и их потомки запущенные под её именем, должна освобождаться именная выделенная память. Маллок с именным выделением памяти под задачу. Ну и есно на него будут вешаться все сообщения и почтовые ящики.

На данный момент вся ос это два файла, работает исключительно под Sortix-M3 GCC. И главное - модификаций кода не требуется, ось сама достаёт всё необходимое и перемещает стеки на рабочее место.

Прочитаю любые предложения, даже безумные.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.11.2015, 12:02
Ответы с готовыми решениями:

Набор инструкций Thumb-2 под Cortex-M3
Сделал себе руководство по системе комманд, со ссылками для удобного пользования. Хоть на Sortix и...

Как правильно переписать код под Cortex M0?
Добрый день. извините, если не совсем в тему. Но не хотел плодить лишние. Как правильно переписать...

GCC Сборка 32 разрядной версии GCC 64 разрядным GCC
Доброго времени суток. Возникла необходимость под 32х разрядный Linux, собрать 32 разрядный GCC. Но...

enable_if выдает "no matching function for call ." под GCC, хотя под MSVC все работает
Добрый день, Шаблон функции где я использую enable_if (объявление и реализация разнесены по...

Оптимальный набор инструментов для программирования под ARM Cortex-A9
Надоело подбирать контроллер под среду разработки, либо среду разработки под контроллер. Хотелось...

22
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 316
18.02.2016, 19:19 21
Author24 — интернет-сервис помощи студентам
Обновление.
Служебная структура malloc теперь занимает 8 байт минимум, 4 байта под имя/размер и минимум 4 байта данных. Размер выделяемой памяти от байта до 32М. Память растёт снизу - на встречу стеку, всё в общую кашу. При удалении задачи - занимаемая память очищается. Новый кусок выделяется из первого подходящего пустого места. Стек работает аналогично - но сверху.
Собственно в этом разница между остальными свободными ос, где необходимо снашаться с каждой задачей по отдельности - по долгу подбирая необходимый размер выделяемой памяти.

Новые функции:
sTask_memory_donate - Отдать память другой нитке ( & link_memory, "task_func_name") (функция подтверждения)
sTask_memory_have - Получить память от другой нитки ("task_func_name") (функция подтверждения)
sTask_resource_ask - Запрос ресурса, бесконечный цикл - пока не освободится
sTask_resource_free - Освободить ресурс
Homdler_zize - Проверка границы стека прерываний, функция применяется любом прерывании приоритета 1 , результат в общей структуре.

Функции общения отдельных задач без подтверждения - нативны до безумия, это банально структура с распределённым доступом чтение/запись. Для каждого уникального условия создаётся собственная структура с уникальными параметрами. Структура может быть статической или создаваться в отдельной задаче из выделенной памяти - вариантов море. По сему давать пример, или описывать стандарт - нет смысла.

Ради прикола запустил минимальный проект с рисованием гифки на экранчике и малость математики - на разных ос.
Максимальные тормоза - чибиос. Как не странно - наличие готовых пустых проектов облегчает холодный старт. Просто добавь своё -и оно работает, хотя и тормозит.
Чуть быстрее - FriiRTOS. Очень сложно заставить работать с холодного старта - необходимо бешеное количество нигических слов, в основном матерных.
Segger - максимальное быстродействие, быстрее даже чем у меня. Но шаг влево/право - и карточный домик падает. У них подробная ерата - куда низя ходить. И типа настоящий джедай должен эту карту помнить постоянно. А у меня память плохая...

Моя ос, по сравнению с первыми двумя - добавление задачи с математикой не вызывает заметного снижения скорости отрисовки графики. Точнее - можно удивить при тотальном подсчёте от рисованных кадров за минуту. Где-то минус 1-2 кадра.
Для первых дух ос в вытесняющем режиме - скорость отрисовки падала более чем в два раза...
0
1 / 1 / 0
Регистрация: 25.01.2012
Сообщений: 492
19.02.2016, 12:16 22
Что-то мне кажется, что простейшая ОС для СМ3 и вообще ARM должна представлять из себя конфигуратор NVIC
0
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 316
19.02.2016, 15:41 23
Под м3 простых указаний адресов стека - мало. Потому как нет аппаратной поддержки шрейдера задач как в старших процах. Посему приходится ручками собирать стартовый образ стека для каждой новой задачи.
Есть два способа решения этой проблемы:

В первом - все задачи прибиты гвоздями к своему месту, нет возможности что либо изменить (кроме убийства) во время работы программы. В таких случаях в память банально грузится образ стека. Есно великий перепроцессор на десятикратно вложенных дифлайнах - оптимизирует эту операцию до минимального количества записей, удаляя нули.
Оно конечно замечательно, кроме одной важной вещи. Все задачи изначально работают, и занимают всю память. Теряется смысл самих задач. Если одной требуется почти вся оперативная память - то такую систему запустить просто невозможно.

Второй вариант - задачи динамически распределяют свободное пространство. Перепроцессором такое просчитать просто невозможно, посему юзается алгоритм поиска свободного места.
Ситуация: памяти всего 8к, а нужно переписать один байт в памяти 25q64, для этого требуется кеш сектора в 4к + кеш в 512 байт для операции записи. В этом случае временно удаляем всё не нужное из памяти, запускаем жирную задачу, и ожидаем её завершения.
0
19.02.2016, 15:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.02.2016, 15:41
Помогаю со студенческими работами здесь

Ресурсы под GCC
Подозреваю, что в linux это может иначе называться или вообще не поддерживаться средствами...

Не работает ассемблер под GCC
сначала я долго искал как включить ассемблерный код в c++ под g++. (В boland это было крайне...

Define в avr-gcc под linux
Для унификации кода создал макросы #define BUTTONPORT PORTC #define BUTTONPORT1 PORTC1...

Адаптация makefile Solaris под gcc
Доброго времени суток, форумчане! Столкнулся намедни с проблемой, которая намного превышает...

Не компилируется код под Clang и gcc 4.9
Всем доброго дннечка! Есть проблемка. Не хочет компилиться код. #include <iostream> #include...

Линковка библиотек gcc под линукс
Подключаю Oracle Instant Client, скачал файлики rpm с ихнего сайта, установил их в линуксе (у меня...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
23
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru