查看: 3516|回复: 3

使用OSA RTOS

[复制链接]
  • TA的每日心情
    奋斗
    2019-12-1 10:07
  • 签到天数: 1617 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2015-1-13 23:14:16 | 显示全部楼层 |阅读模式
    分享到:
    FreeRTOS虽然不错,但是对于资源比较少的MCU来说,消耗的RAM和Flash都比较大,留给应用程序的空间比较小。因此使用其他一些紧凑型的RTOS也是有必要的。

    OSA就是这样一个支持多种MCU架构的紧凑型RTOS。OSA是一个非占先式的RTOS,支持任务优先级,支持PIC10, PIC12, PIC16, PIC18, PIC24, dsPIC, AVR, STM8等多种MCU。它使用简单,占用资源少,非常适合一些小资源的MCU使用。

    比较可惜的是OSA已经停止开发了,OSA的网站在:http://wiki.pic24.ru/doku.php/en/osa/ref/download/intro

    下面就介绍OSA在Atmega328P xplained mini上的使用方法。

    首先是创建新项目,过程就不重复了。

    然后需要创建一个RTOS的配置文件。OSA的使用方法和FreeRTOS有些类似,都是需要在项目中使用一个配置文件,OSA中的配置文件是OSAcfg.h。第一个例子比较简单,只使用OS定时器延时,所以我们先在这个配置文件中允许使用定时器。
    1. #ifndef _OSACFG_H
    2. #define _OSACFG_H

    3. //------------------------------------------------------------------------------
    4. // SYSTEM
    5. //------------------------------------------------------------------------------

    6. #define OS_TASKS                3   // Number of tasks that can be active at one time

    7. #define OS_USE_INLINE_TIMER

    8. //------------------------------------------------------------------------------
    9. // ENABLE CONSTANTS
    10. //------------------------------------------------------------------------------

    11. #define OS_ENABLE_TTIMERS           // Enable task timers (OS_Delay and OS_xxx_Wait_TO)

    12. #endif
    复制代码
    然后在AS6中创建OSA目录,再将OSA的文件复制到这个目录中。

    下一步就是添加OSA文件到项目。OSA只需要添加osa.c就可以了,这一点比大部分RTOS都简单。

    然后在添加osa的目录和OSAcfg.h的目录到项目搜索目录中。

    0.jpg


    然后在主程序中创建任务、进行任务初始化。OSA的使用比较简单,下面是主要步骤:
    • 调用函数OS_Init()进行OS初始化
    • 使用OS_Task_Create创建任务
    • 设置硬件定时器,并将OS_Timer()放入定时器中断。OSA可以使用任何一个硬件定时器进行OS调度,调度周期也可以自己定义。
    • 使用OS_EI()允许系统中断
    • 使用OS_Run()启动调度器

    下面是一个简单的测试程序
    1. /*
    2. * osa_demo1.c
    3. *
    4. * Created: 2015/1/13 22:16:34
    5. *  Author: szy
    6. */

    7. #define F_CPU 8000000L

    8. #include <osa.h>

    9. #include <avr/io.h>
    10. #include <avr/interrupt.h>


    11. void init()
    12. {
    13.         // IO
    14.         DDRB = (1<<PB5);
    15.        
    16.         // Timer
    17.         OCR1A = F_CPU/(8*100);              // 10ms
    18.         TCNT1 = 0;
    19.         TCCR1A = 0;
    20.         TCCR1B = (1<<WGM12)|(1<<CS11);      // clk/8
    21.         TIMSK1 = (1<<OCIE1A);               // enable TIMER1 OC1A interrupt

    22. }

    23. ISR(TIMER1_COMPA_vect)
    24. {
    25.         OS_Timer();
    26. }

    27. void task()
    28. {
    29.         while(1)
    30.         {
    31.                 OS_Delay(100);                    // Delay
    32.                 PORTB ^= (1<<PB5);                // blink led
    33.         }
    34. }

    35. int main(void)
    36. {
    37.         init();
    38.         OS_Init();                          // Init OS
    39.         OS_Task_Create(0, task);            // Create tasks.

    40.         OS_EI();                            // Enable interrupts
    41.         OS_Run();                           // Running scheduler
    42.        
    43.     while(1)
    44.     {
    45.         //TODO:: Please write your application code
    46.     }
    47. }
    复制代码
    1.jpg

    这个例子的功能就是延时,然后翻转LED,和FreeRTOS的例子功能一样。最后在对比一下两个例子的系统资源占用情况
    FreeRTOS OSA
    RAM 163750
    Flash 68781370

    从对比可以看出,OSA的确是一个轻量级的RTOS。


    osa_demo1.zip (91.17 KB, 下载次数: 85)
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-11-30 19:48
  • 签到天数: 981 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-1-14 12:48:05 | 显示全部楼层
    谢谢,学习了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2018-10-29 22:48
  • 签到天数: 731 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2015-1-22 13:19:55 | 显示全部楼层
    这种小东西都给翻出来了,哈哈。
    不得不说,现在RTOS的发展基本上也有一个向着小型化发展的趋势。对于单片机应用,需要RTOS的主要就是内核调度和进程间通信机制,驱动啥的,还是具体情况具体应用。如此以来,RTOS占用的系统资源越少越好。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2015-7-14 10:15
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2015-1-22 13:44:22 | 显示全部楼层
    suyong_yq 发表于 2015-1-22 13:19
    这种小东西都给翻出来了,哈哈。
    不得不说,现在RTOS的发展基本上也有一个向着小型化发展的趋势。对于单片 ...

    确实是这样。有时间可以看看trochili rtos
    https://www.cirmall.com/bbs/thread-39784-1-1.html
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-12-23 07:06 , Processed in 0.150479 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.