我是靠谱客的博主 清秀雪糕,最近开发中收集的这篇文章主要介绍嵌入式开发|嵌入式软件框架《二》前后台任务框架-cola os系统系列文章目录前言一、cola os程序框架二、cola os源代码下载,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

系列文章目录

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


文章目录

  • 系列文章目录
  • 前言
  • 一、cola os程序框架
    • 1.cola_init
    • 2.cola_device
    • 3.cola_os task任务创建
    • 4.cola_os stime定时器创建
  • 二、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源代码下载

代码下载

最后

以上就是清秀雪糕为你收集整理的嵌入式开发|嵌入式软件框架《二》前后台任务框架-cola os系统系列文章目录前言一、cola os程序框架二、cola os源代码下载的全部内容,希望文章能够帮你解决嵌入式开发|嵌入式软件框架《二》前后台任务框架-cola os系统系列文章目录前言一、cola os程序框架二、cola os源代码下载所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部