对 小小调度器 的功能增强

     关于小小OS的详细说明,可以去amobbs上看,也可以看本文末尾的附件资料。如果还没了解过这个OS,可以参照ucos, FreeRtos理解,就是解决MCU多任务运行问题。MCU多任务OS的核心就是任务切换的处理,ucos, FreeRtos都是要保存上下文,需要用很多RAM和很多时间。小小OS切换任务时不需保存那一堆特殊功能寄存器,只需要在退出任务的地方做个标识,下次运行这个任务函数时,根据标识直接跳到上次退出的地方接着运行。因此小小OS代码简单,资源要求非常少,除了不能像ucos, FreeRtos那样在中断里切换任务外,其它功能都可实现
      原版的小小OS只实现了ucos的一部分功能,但理解了多任务系统的原理和小小OS的运行机制后,可按实际需要自行增加功能


#define SUSPEND_TASK_A(TaskID) timers[TaskID]=0xff//使其它任务休眠,例如按暂停键停止加热,在按键任务里调用SUSPEND_TASK_A(TASK_HEAT)

#define SUSPEND_TASK_B() return 255    //使本任务休眠,确定不需要本任务运行了可以退出任务调度

#define IS_RUNNING_TASK(TaskID) ((timers[TaskID] != 0xff) ? 1 : 0)//查询某个任务是否在运行

#define WAKEUP_TASK_A(TaskID) \
    timers[TaskID]=0x0; \
    SET_WAKE_UP_FLAG(TaskID)//唤醒某个任务,并使这个任务从头开始运行

#define WAKEUP_TASK_B(TaskID) \
    timers[TaskID]=0x0//唤醒某个任务,并使这个任务从上次退出的地方接着运行


#define SUSPEND_TASK_C() {STATE=A; return 0xff;}//使本任务休眠,唤醒后接着运行

#define IS_WAKED_UP(N, M) if(wake_task_##M==0) \
    { \
        switch(STATE){ STATES##N;} \
    } \
    else \
    {STATE=0x0; wake_task_##M=0;}//上面的wake_task_##M指的是wake_task_0/1/2...,是全局变量,用于标记任务唤醒时需不需要从头开始运行

#define _SS_W(N, TaskID) static unsigned char STATE=0; \
            IS_WAKED_UP(N, TaskID)//在每个任务的开头,判断任务是否需要从头运行,还是接着上次退出的地方运行


原版的信号量处理方式,我认为不太合理,应该仿照ucos的做法
#if USE_SEM
#define SEM_TASK_NUM    2
uint8_t sem_1_task[SEM_TASK_NUM];//定义一个数组,元素个数是使用此信号量的任务个数
#define WaitSem(A,n,TaskID) do{STATE=A; sem_task[n]=TaskID;} while(0);
#define SendSem(sem) do{timers[sem_1_task[0]]=0x0; timers[sem_1_task[1]]=0x0;} while(0);
#endif

小小OS教程和相关代码
https://download.csdn.net/download/fcyclone/86221209

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
小小调度是一种基于Arduino的简易调度。Arduino是一款开源硬件平台,具有易用性和可编程性。小小调度的主要功能是控制和协调多个任务的执行顺序和时间,以实现对系统资源的合理利用。 小小调度通过调用Arduino的定时功能和中断控制,可以实现多个任务的并发执行。它可以根据每个任务的优先级和时间要求,在合适的时刻切换任务的执行,以保证每个任务都按照预定的顺序和时间片进行处理。 小小调度通常采用优先级调度算法,根据任务的重要程度和需求,将任务分为不同的优先级,并按照优先级顺序进行调度。它还可以根据任务状态的改变,实时地调整任务的执行顺序和时间。 小小调度的设计需要考虑系统资源的限制和任务之间的相互影响。在编程时,需要合理分配处理时间和内存空间,以及避免任务之间的冲突和资源竞争。同时,还需通过合适的调度策略,减少任务切换的开销,提高系统的响应速度和效率。 小小调度在嵌入式系统和物联网应用中具有重要作用。它可以用于控制和管理传感数据采集、通信模块的数据传输、外设的控制等任务。通过合理调度和管理这些任务,可以实现系统的功能拓展和性能优化。 总而言之,小小调度利用Arduino的可编程性和灵活性,可以实现对多任务系统的任务调度和管理。它在嵌入式系统和物联网应用中具有广泛的应用前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值