16+
Четверг
15 ноября
Вход |Карта сайта | |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

Средства и методы разработки

 
   Новая тема Правила Регистрация Поиск »» Архив
Вернуться в конференциюТопик полностью
LightElf  (13.11.2015 16:08 - 16.11.2015 13:06, файл(ы), просмотров: 8883)
Обновлено: трехколесный вялошипет с квадратными колесами (многозадачка на Си). Рожалось в муках, труд всей жизни :) 
Файлы ct.c и ct.h - сама софтинка. test_ct.c - пример использования (test_ct.exe - скомпилированный под винду пример). Собственно реализовать нужно две функции:
unsigned int ct_ticks_cb(void);
void ct_start_cb(void **tos);
Первая - аналог стандартной clock(), вторая - место где можно разрешить прерывания или еще там что полезного сделать. Потом заполнить таблицу со списком задач и вызвать ct_run. Она создаст стеки задач и начнет их по очереди вызывать. Каждая задача чтобы дать жить другим должна регулярно блокироваться вызовом:
int ct_block(void *block_id, unsigned int timeout);
block_id - уникальный идентификатор блокировки, проще всего - адрес какого-нибудь объекта. Значение CT_TIMEOUT_ONLY означает, что блокировка просто по времени. timeout задается в системных тиках, максимальное значение таймаута не должно превышать (UINT_MAX/2). Значение 0 означает, что просто передается управление следующему потоку. ct_block возвращает значение REASON_TIMEOUT, если истекло время ожидания или REASON_WAKE если блокировка прервана вызовом ct_wake с совпадающим указателем.
int ct_wake(void *block_id);
Пробуждает все заблокированные потоки с идентификатором блокировки block_id, возвращает количество разбуженных потоков.
Прикреплённые файлы:
ct.rar (23 K)
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7527 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXVIII