嵌入式开发|嵌入式软件框架《二》前后台任务框架-cola os系统

系列文章目录

嵌入式开发|嵌入式软件框架《一》常用的软件框架介绍与选择



前言

在嵌入式软件开发,包括单片机开发中,软件架构对于开发人员是一个必须认真考虑的问题。软件架构对于系统整体的稳定性和可靠性是非常重要的,一个合适的软件架构不仅结构清晰,并且便于开发。本教程中使用的框架为前后台和时间片相结合,同时参考rt_threadlinux中优秀的思想设计而成,名为cola os
在这里插入图片描述

一、cola os程序框架

在这里插入图片描述

1.cola_init

cola_init文件为系统初始化文件,设计思想参考linux 中的initcall机制,参考链接:
inux的initcall机制(针对编译进内核的驱动)

2.cola_device

cola_device是硬件抽象层,将硬件抽象有如下功能,功能参考rt_thread.

struct cola_device_ops
{
    int  (*init)   (cola_device_t *dev);
    int  (*open)   (cola_device_t *dev, int oflag);
    int  (*close)  (cola_device_t *dev);
    int  (*read)   (cola_device_t *dev, int pos, void *buffer, int size);
    int  (*write)  (cola_device_t *dev, int pos, const void *buffer, int size);
    int  (*peek)   (cola_device_t *dev, int pos, void *buffer, int size);
    int  (*control)(cola_device_t *dev, int cmd, void *args);
    int  (*config) (cola_device_t *dev, void *args, void *var);
};

将每一个硬件虚拟成一个设备,通过链表串联起来。
在这里插入图片描述

驱动使用用例:
串口发送数据:

uart_dev = cola_device_find("uart1"); //首先找到串口
assert(uart_dev);
cola_device_write(uart_dev,0,g_buf,ret);//数据发送

3.cola_os task任务创建

cola os是系统调度轮询文件,该系统调度本质也是采用while大循环原理,只是将每个函数放到链表中,一次while循环就会从头到尾遍历一遍链表,执行链表中的函数。

API:
/*
    主循环任务创建
*/
int cola_task_create(task_t *task,cbFunc func);

例程:
1.首先定一个是任务结构体,task

static task_t radio_task;

2.定义一个循环函数,该函数会在while(1)中不停的循环。

static void radio_task_cb(void *arg,uint32_t event)
{
  //循环函数
}

3.调用api将函数注册到循环链表中。

cola_task_create(&radio_task,radio_task_cb);

4.cola_os stime定时器创建

Stimer 软件定时器原理,是在1ms中断中不断的轮询定时器链表中定时时间是否到,如果到了则将标志置位,在while大循环中如果检测到该标志就执行该函数。

API:
/*
    定时任务创建
*/
int cola_timer_create(task_t *timer,cbFunc func);
/*
    启动定时任务
    one_shot:TIMER_ALWAYS   循环定时
              TIMER_ONE_SHOT 只运行一次
    time_ms :定时时间
*/
int cola_timer_start(task_t *timer,bool one_shot,uint32_t time_ms);
/*
    停止定时任务
*/
int cola_timer_stop(task_t *timer);

例程:
1.首先创建软件定时器结构体。

static stimer radio_timer;

2.创建定时器回调函数,及定时时间到需要运行的函数。

static void radio_timer_cb(void *arg,uint32_t event)
{
  //定时器回调函数
}

4.调用api将函数注册到定时任务链表中。

cola_timer_create(&radio_timer,radio_timer_cb);

5.启动定时器。

每1s运行一次:

cola_timer_start(&radio_timer,TIMER_ALWAYS,1000);

定时50s,只运行一次:

cola_timer_start(&radio_timer,TIMER_ONE_SHOT,50000);

6.停止定时器。

cola_timer_stop(&radio_timer);

二、cola os源代码下载

代码下载

  • 14
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值