Command disabled: backlink
 
Available Languages?:

OSA : История изменений

Ранние версии

81206

26 ноября 2008 скачать @ 127 кБ

  • Исправлен баг, появившийся в версии 81126: при переопределении константы OS_DTIMER_SIZE проект отказывался собираться.
  • Исправлена ошибка в определении макроса OS_Dtimer_Get

81126

26 ноября 2008 скачать @ 127 кБ

  • Все сервисы динамических таймеров переименованы из OS_xxxPTimer в OS_xxxDTimer. Старые имена оставлены для совместимости

81025

25 октября 2008 скачать @ 64 кБ

  • Все комментарии в исходниках переведены на английский

81010

10 октября 2008 скачать @ 325 кБ

  • Переработаны статические таймеры. Они стали удобнее в обращении (см. Статические таймеры). Следует обратить внимание на пример применения. Старые статическе таймеры для совместимости оставлены без изменений.
  • Добавлена возможность включать отдельно статические таймеры, динамические таймеры и таймеры задач (раньше таймеры задач включались автоматически при использовании любого тапи таймеров)
  • Для каждого типа таймеров теперь можно задавать свою разряднось (раньше разрядность таймеров задач

81008

08 октября 2008 скачать @ 316 кБ

  • В _OS_CheckEvent для PICC18 не сбрасывался флаг bDelay (сбрасывался только во временной переменной OS_state). В результате этой ошибки задача после ожидания события с таймаутом уходила в задержку.

81007

7 октября 2008 скачать @ 317 кБ

  • Из файла OSA.c в отдельные файлы вынесены специфичные для каждого типа контроллеров функции (см. папку "port").
  • Из файла OSA.h в отдельные файлы вынесены все сервисы (см. папку "services").
  • Исправлен недостаток для MCC30: программа работала только при отключенной оптимизации. Теперь работает при любой, за исключением ключа -mpa (procedural abstraction)
  • В тип дескриптора задач для MCC30 добавлены 8 слов для сохранения регистров W8..W15

80931

01 октября 2008 скачать @ 316 кБ

  • исправлена ошибка с переменной _OS_DTimer: она объявлялась в банке OS_BANK а работа с ней велась как с near

80930

30 сентября 2008 скачать @ 316 кБ

  • Исправлена ошибка в OS_Sched для неприоритетного режима: неправильно обрабатывалась ситуация с OS_IsInCriticalSection (вместо смены задачи блокировалось обнуление _OS_temp)
  • Исправлена ошибка в сервисе OS_IsSMsgFree: проверялось инверсное условие.
  • Для PICC18 была заблокирована метка _OS_SchedRetPointNoSave (используется в StopTask)
  • Для PICC12 была исправлена ошибка с удалением DTimer'а
  • Для PICC12 _OS_DTimer размещалась в банке bank0, а работа с ней велась как с OS_BANK. Если OS_BANK был ненулевым, то DTimer'ы работали некорректно
  • Для MCC18 исправлен сервис удаления динамического таймера (не сбрасывался бит NextEnable при удалении последнего таймера в списке)

80922

22 сентября 2008 скачать @ 316 кБ

  • Добавлен порт под 12-разрядные ПИКи.
  • Возвращен неприоритетный режим (причина: сильно экономит ROM и RAM для 12-разрядников).
  • Определение OS_ENABLE_ALL включает в себя теперь также OS_ENABLE_CRITICAL_SECTIONS и OS_ENABLE_INT_SERVICE
  • Новый сервис OS_Run() (определен как for(;;) OS_Sched())

80916

16 сентября 2008 скачать @ 290 кБ

  • Исправлен баг для PICC18: если прерывание возникало в момент передачи планировщиком управления задаче (инструкция movff postdec0, pcl), то в стеке забивалась ячейка.

80915

15 сентября 2008 скачать @ 290 кБ

  • Исправлен баг для MCC30: при выполнении OS_Task_Replace приоритет новой задачи заменялся приоритетом удаляемой.
  • При вызове OS_Task_Create из тела задачи флаги состояния копировались в новую задачу.

80909

09 сентября 2008 скачать @ 290 кБ

  • Добавлен порт под 16-разрядные пики (PIC24 и dsPIC)
  • Убран неприоритетный режим
  • Убраны SLOW_TIMERS
  • Проведена оптимизация кода по ROM, RAM и скорости
  • Из документации убрано сравнение с другими RTOS
  • В документацию добавлена статистика по использованию памяти и по скорости.
  • Добавлена ссылка "Документация On-line".

80906

06 сентября 2008 скачать @ 238 кБ

  • Переделаны сервисы возврата для PICC16: заменены все конструкции, чтобы избавиться от директив DW

80905

05 сентября 2008

  • Исправлена ошибка для PICC16: если дождались события до таймаута (сервисами OS_WaitXXXTimeout или OS_SendXXXTimeout), то после передачи управления планировщику в задачу возвращались только по истечению оставшегося времени таймаута.
  • В OS_InitDelay для FAST_TIMERS установка бита State.bDelay переставлена. Теперь она стоит за присвоением таймера, а не перед. Раньше это могло быть следствием записи неправильного значения в Timer.
  • Добавлено восстановление PCLATH перед возвратом в задачу из _OS_CLEAR_READY и _OS_CLEAR_READY_SET_CANCONTINUE

80904

04 сентября 2008

  • Исправлена ошибка для неприоритетного режима в PICC16: пропускался сброс флага bCanContinue, из-за чего сервисы ожидания событий в некоторых случаях могли выходить из ожидания сразу же, не дожижаясь.

80902

02 сентября 2008

  • Исправлен баг: в MPLAB C18 в функции main() портились локальные переменные. Модель стека допускается только Single-bank (Меню Project/Build options/Project закладка MPLAB C18 категория Memory Model).

80827

27 августа 2008

  • Исправлен баг: в PICC16 при выполнении двух OS_Yield() подряд второй неправильно сохранял адрес возврата.

80826

26 августа 2008

  • Переработан планировщик для неприоритетного режима. Раньше, если в задаче выполнялся сервис ожидания события, уже произошедшего на момент проверки, то управление планировщику не передавалось. Теперь передается, т.к. раньше могло получиться так, что если задача ожидает события, уже установленные на момент проверки, то остальные задачи никогда не получат управление. Т.е. нарушался порядок round-robin, при котором все готовые задачи должны выполняться по очереди.
  • Исправлена ошибка: если из задачи управление планировщику передавалось сервисом OS_Yield(), то задача могла получить управление первой, вне зависимости от приоритета.

80824

24 августа 2008

  • Исправлен баг: в неприоритетном режиме при ожидании события, обозначенного указателем, в сервисах с таймаутом мог неправильно определяться флаг таймаута.

80823

23 августа 2008

  • Исправлена ошибка: не была глобально объявлена метка OS_ClearReadySetCanContinue

80822

22 августа 2008

  • OSA портирована под Microchip C18

80821

21 августа 2008

  • Исправлена ошибка: сервис OS_RI() не восстанавливал бит GIEL при IPEN = 1

80814

14 августа 2008

  • Исправлена ошибка в описании макросов ожидания флагов (программа не компилировалась).

80811

11 августа 2008

  • Исправлена ошибка, сделанная в 80810: DTimer'ы не удалялись сервисом OS_Dtimer_Delete.

80810

10 августа 2008

  • Сделаны DTimer'ы - динамические таймеры (см. описание 1.3.5 и 2.12)

80808

08 августа 2008

  • Немного сокращен и ускорен код.
  • Константа _ROM_PAGES для PIC16 определяется автоматически
  • Для PIC16 добавлена возможность размещать системные переменные в банках 2 и 3:
    1. задачи (OS_BANK_TASKS)
    2. двоичные семафоры (OS_BANK_BSEM)
    3. таймеры пользователя (OS_BANK_TIEMRS, OS_BANK_TIMEOUTS, …) (одной константой OS_BANK_OS по-прежнему можно задать банк для всех вышеперечисленных переменных)
    4. флаги (банк задается индивидуально при описании переменной-флага)
    5. сообщения (банк задается индивидуально)
    6. короткие сообщения (банк задается индивидуально)
  • Нельзя размещать в банках 2 и 3:
    1. счетные семафоры
    2. очереди сообщений

Следует обратить внимание, что все переменные OS_xxx_BANK переделаны в OS_BANK_xxx (см. мануал 3.4)


80805

05 августа 2008

  • Исправлена ошибка в диспетчере для PIC16: неправильно сохранялись биты PR0 и RP1 при переключении контекста
  • Исправлена ошибка в сервисах ожидания сообщения из очереди с таймаутом: непраильно проверялся бит таймаута

80803

03 августа 2008

  • Исправлена ошибка в инициализации. Для PIC18 при размещении дескрипторов задач (OS_TaskVars[]) в RAM выше адреса 0x100 задачи не обнулялись при запуске программы.

80603

03 июня 2008

  • Немного подправлены макросы, описывающие сервисы работы с флагами.
  • По ошибке был удален сервис OS_Csem_Accept. Теперь он восстановлен.
  • Исправлена ошибка в функции _OS_SignalCSem. Она проявлялась в PICC18 при размере счетного семафора = 1: FSR устанавливался неправильно. Исправлено.

80529

29 мая 2008

Версия сыроватая. До конца я ее не тестировал, но попробовать поиграться с ней стоит.

  • Изменен порядок работы с таймерами задач. В результате этого удалось:
    1. Снять ограничение, описанное в п.1.3.3 в файле OSA_manual.doc
    2. сократить генерируемый код (на сколько - зависит от количества задач и разрядности

таймера, но в среднем для 16-разрядного таймера экономится 40 слов);

  1. освободить 4 байта RAM (для 16-разрядного таймера);
  2. увеличить скорость выполнения:
    1. инициализации таймера (в 2 раза: с 53 тактов до 25);
    2. проверки таймера в планировщике (с 51 такта до 4 тактов).
  • Код для входа и выхода из критической секции теперь включается в программу, только если в файле OSAcfg.h определена константа:
    #define OS_ENABLE_CRITICAL_SECTION

80526

26 мая 2008

  • Изменена OS_MAX_DELAY для типа OST_TIMER = unsigned int, выбираемое по умолчанию: 0xFF00 → 0xF000. Тем самым увеличен допуск на максимальное время захвата процессора одной задачей (см. OSA_Manual 1.3.3).
  • Переделаны сервисы запрета/разрешения/восстановления прерываний.
    1. Для pic18 убраны DIH, DIL, RIH и RIL (оставлены только DI и RI)
    2. DI теперь возвращает char - предыдущее состояние GIE (GIEH, GIEL)
    3. RI теперь требует параметр char - откуда восстанавливать GIE (GIEH, GIEL)

Работа теперь выглядит так:

    char cTemp;
    ...
    cTemp = DI();	// Запрещаем прерывания, сохраняя предыдущее состояние GIEx в cTemp
    ...
    RI(cTemp);	// Восстанавливаем прерывания из cTemp
    ...
  • Добавлена возможность работать со счетными семафорами и очередями сообщений в прерываниях:
    1. В OSAcfg.h нужно определять константу: #define OS_INT_ENABLE
    2. Для работы со счетными семафорами нужно использовать сервисы: OS_CheckCSemInt, OS_SetCSemInt, OS_SetCSemValueInt, OS_ResetCSemInt
  • Функция OS_Init была неправильно оптимизирована, в результате чего код не оптимизировался, если количество биарных семафоров или пользовательских таймеров превышало 88 (редкая ситуация, но все же…).

28.04.2008

28 апреля 2008

  • Немного переработан обработчик OS_Timer. Раньше это был макрос, вставляемый непосредственно в код программы. Теперь, вследствие модификации кода для PIC18 (для сокращения применен ассемблер), это функция. Однако, оставлена возможность пользоваться им по-старому: для этого нужно в OSAcfg.h определить константу: #define OS_USE_INLINE_TIMER
  • Немного ускорена работа планировщика (где-то на 30%). В результате код для PIC16 будет короче, чем в предыдущих версиях OSA, а код для PIC18 будет длиннее.

18.04.2008

18 апреля 2008

  • В результате некоторых модификаций по сокращению кода (после 1.04.2008) была допущена ошибка: при ожидании события без таймаута оно всегда считалось уже случившимся.
 
osa/ref/download/history.txt · Последние изменения: 07.10.2010 13:54 (внешнее изменение)
 
Creative Commons License Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki