广和通l610 CAT.1模组opencpu开发《二》cola_os移植

在L610模组下实现cola os的移植,cola os使用一个freertos的线程来驱动,这样可以避免资源的竞争。


文章目录

  • 广和通l610 CAT.1模组opencpu开发《二》cola_os移植
  • 前言
  • 一、cola os是什么?
  • 二、cola os实现
    • 1.cola os
    • 2.cola timer
    • 3.cola device
  • 三、最后
  • 四、开发板购买

前言

为了代码的统一且方便后期驱动的开发,现在将cola os系统适配到l610模组上。简化后期开发难度


一、cola os是什么?

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

二、cola os实现

1.cola os

cola os:

static KLIST_HEAD(task_list);
static task_t *current;
static uint32_t task_lock = 0;void cola_task_create(task_t *task, void (*tcb_cb)(struct task_ctrl_blk *, uint32_t))
{OS_CPU_SR cpu_sr;cpu_sr       = fibo_enterCS();task->tcb_cb = tcb_cb;list_add_tail(&task->entry, &task_list);fibo_exitCS(cpu_sr);
}void cola_task_schedule(void)
{struct list_head *iter;uint32_t sig = 0;OS_CPU_SR cpu_sr;fibo_sem_wait(task_lock);list_for_each(iter, &task_list){current = list_entry(iter, task_t, entry);sig = current->signal;if (sig){cpu_sr = fibo_enterCS();current->signal = 0;fibo_exitCS(cpu_sr);current->tcb_cb(current, sig);}}
}void cola_task_send_signal(task_t *task, uint32_t sig)
{OS_CPU_SR cpu_sr;if(!task_lock){task_lock = fibo_sem_new(0);}cpu_sr = fibo_enterCS();task->signal |= sig;fibo_sem_signal(task_lock);fibo_exitCS(cpu_sr);
}void cola_delay_ms(uint32_t ms)
{fibo_taskSleep(ms);
}uint32_t cola_get_ticker(void)
{uint32_t tk = fibo_getSysTick();return (uint32_t)((float)(tk) * 0.061);
}

2.cola timer

cola timer:

void cola_timer_create(stimer_t *timer, void (*tcb_cb)(void *arg),void *arg)
{OS_CPU_SR cpu_sr;cpu_sr        = fibo_enterCS();timer->data   = arg;timer->tcb_cb = tcb_cb;timer->handle = 0;fibo_exitCS(cpu_sr);
}void cola_timer_start(stimer_t *timer,uint32_t period )
{int ret;if(timer->handle){ret = fibo_timer_free(timer->handle);if(ret < 0){OSI_LOGI(0,"[estimer]->stop timer failed");}}timer->handle = fibo_timer_new(period,timer->tcb_cb,timer->data);if(timer->handle == 0){OSI_LOGI(0,"[estimer]->timer start failed");}
}void cola_timer_stop(stimer_t *timer)
{int ret;if(timer->handle == 0)return;ret = fibo_timer_free(timer->handle);if(ret < 0){OSI_LOGI(0,"[estimer]->stop timer failed");}timer->handle = 0;
}int cola_timer_is_running(stimer_t *timer)
{return timer->handle;
}

3.cola device

cola device:

/*********************************************************************************** @filename  : cola_device.c* @author    : Bit (QQ 1506564994)* @versions  : V1.0.0* @date      : 2020.01.12* @brief     :******************************************************************************/
#include <string.h>
#include <stdbool.h>
#include "cola_device.h"//struct cola_device *device_list = NULL;
static KLIST_HEAD(device_list);static bool cola_device_is_exists(cola_device_t *dev)
{struct cola_device *d;list_for_each_entry(d, &device_list,entry) {if (!strcmp(d->name, dev->name))return true;}return false;
}static int device_list_inster(cola_device_t *dev)
{list_add_tail(&dev->entry, &device_list);return 1;
}int cola_device_register(cola_device_t *dev)
{if ((NULL == dev) || (cola_device_is_exists(dev))) {return 0;}if ((NULL == dev->name) || (NULL == dev->dops)) {return 0;}return device_list_inster(dev);
}cola_device_t *cola_device_find(const char *name)
{struct cola_device *d;list_for_each_entry(d, &device_list,entry) {if (!strcmp(d->name, name))return d;}return NULL;
}int cola_device_read(cola_device_t *dev,  int pos, void *buffer, int size)
{if (dev) {if (dev->dops->read) {return dev->dops->read(dev, pos, buffer, size);}}return 0;
}int cola_device_peek(cola_device_t *dev,  int pos, void *buffer, int size)
{if (dev) {if (dev->dops->peek) {return dev->dops->peek(dev, pos, buffer, size);}}return 0;
}int cola_device_write(cola_device_t *dev, int pos, const void *buffer, int size)
{if (dev) {if (dev->dops->write) {return dev->dops->write(dev, pos, buffer, size);}}return 0;
}int cola_device_ctrl(cola_device_t *dev,  int cmd, void *arg)
{if (dev) {if (dev->dops->control) {return dev->dops->control(dev, cmd, arg);}}return 0;
}int cola_device_cfg(cola_device_t *dev, void *args, void *var)
{if (dev) {if (dev->dops->config) {return dev->dops->config(dev, args, var);}}return 0;
}void cola_device_set_owner(cola_device_t *dev, const void *owner)
{dev->owner = (void *)owner;
}

三、最后

cola os适配还是比较简单的,至此cola 的移植已经完成,后面进行外设驱动的开发

四、开发板购买

链接

广和通l610二次开发|广和通l610 CAT.1模组opencpu开发《二》cola_os移植相关推荐

  1. 广和通l610二次开发|广和通l610 CAT.1模组opencpu开发《一》资源介绍

    广和通l610二次开发|广和通l610 CAT.1模组opencpu开发<一>资源介绍 L610 平台简介 L610 及平台支持的基本功能 OpenCPU 开机运行 开发板购买 L610 ...

  2. 广和通l610二次开发|广和通l610 CAT.1模组opencpu开发《三》阿里云物联网平台mqtt动态注册

    阿里云物联网平台动态注册 使用模组的IMEI作为设备的name,采用动态注册自动在案例云平台上注册设备 文章目录 阿里云物联网平台动态注册 参考文档 一.基本准备 二.平台产品创建 三.动态注册流程 ...

  3. 大白NBIOT 移远BC26模块模组OpenCpu开发视频教程(有连接移动、电信平台的opencpu源码)

    NBIOT(BC26.BC28,BC35)模块 移远BC26全网通模组OpenCpu实现TCPCLient网络数据传输 [复制链接]   http://www.openedv.com/forum.ph ...

  4. 以一物驱万物,第三代5G NB-IoT模组OpenCPU开发新模式

    伴随着物联网行业的发展,越来越多的物联网设备都逐渐趋于低成本.小型化.高集成的模式,传统的MCU+物联网模组的方式已经很难满足需求.利尔达NB860系列模组推出OpenCPU方案,满足客户低代码开发需 ...

  5. 蓝牙 linux开发板,开源双模蓝牙协议栈 - 蓝牙模组以及开发板使用介绍

    零. 概述 本文章主要讲下我们的开发版(STM32F1+CSR8311)以及蓝牙模组扩展版(CSR8311)的功能以及使用简短说明 一. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容 ...

  6. 涂鸦智能模组SDK开发系列课程——涂鸦IoT平台介绍(二)

    使用涂鸦Wi-Fi模组和涂鸦Wi-Fi&Bluetooth LE双模模组进行产品开发主要有三种不同的方式进行开发: 零代码开发:涂鸦提供可视化功能配置界面,无需任何编程经验,只需在线配置好产品 ...

  7. 【Cat.1模组】 广和通L610 基于OpenCPU的SDK二次开发

    目前支持Cat.1网络的芯片平台主要是紫光展锐UIS8910和翱捷ASR1603,基于紫光展锐平台,各大厂商延伸出多款Cat.1模组:广和通L610就是其中之一.本文记录开发过程,供日后参考. 广和通 ...

  8. 广和通Cat.1模组与亚华物联智慧燃气表组成“CP”,高效赋能智慧城市建设

    近期,因"价格"再夺眼球的Cat.1产品持续登上"物联网热搜",在中低速率连接领域再次出圈.相较NB-IoT,通信能力更强.适用性更广的Cat.1更能满足大多数 ...

  9. 制作一个有趣的涂鸦物联网小项目(涂鸦模组SDK开发 CBU BK7231N WiFi+蓝牙模组 HSV彩色控制)

    实现的功能: l  APP控制月球灯 l  本地月球灯控制 l  APP控制"大白"颜色,实现各种颜色变身 l  门状态传感器状态APP显示 l  网络状态指示灯,连接服务器长亮, ...

最新文章

  1. elasticsearch 文档操作
  2. java中具有继承关系的类及其对象初始化顺序
  3. 前端学习(2566):vue的生命周期
  4. python网站服务器好麻烦_python写的网站,云服务器经常无法访问
  5. 抗滑桩弹性计算方法_抗滑桩设计与计算99147
  6. 你还在用HTTP吗?HTTP/3都来了。。。
  7. 分享安卓SD卡的后台设置
  8. gps模拟器 matlab,基于Matlab/Simulink的数字中频GPS信号软件模拟器
  9. 学校源码php,闪灵CMS学校建站系统(含小程序) v5.0 bulid20200319_php免费源码
  10. 浪曦_Struts2应用开发系列_第2讲.Struts2的类型转换--出现的问题笔记
  11. 0.88mm液晶拼接屏在会议显示中的优势分析
  12. 此页上的ActiveX控件和本页上的其他部分的交互可能不安全的解决办法
  13. 不知道怎么压缩图片大小?分享2个压缩小技巧
  14. 热评云厂商:网易数帆8.5亿元,企业数字化服务带来差异化
  15. 统计|如何观测两变量之间的相关系数及含义
  16. DAY01.使用JAVA从国家统计局爬取2020年全国统计用区划代码和城乡划分代码(省市区数据)
  17. Leetcode--Java--212. 单词搜索 II
  18. js实现点击切换checkbox背景图片
  19. 微信小程序毕业设计 基于微信会议室预约小程序系统开题报告
  20. 简化ETL工作,编写一个Canal胶水层

热门文章

  1. 星速配资:煤炭概念股大幅拉升 看好投资机会
  2. Python爬取大众点评景点评论
  3. 雷军回应 “小米手机都是中低端”
  4. 根据出生日期自动计算年龄
  5. 信息系统开发与管理【七】之 系统实施
  6. 哈理工计算机组成原理,哈尔滨理工大学计算机组成原理课程设计.pdf
  7. 安徽阜阳计算机高中学校排名,阜阳中学排名前十名,2021年阜阳中学排名一览表...
  8. android zuk彩蛋,联想ZUK Z2你真的会玩吗?来看U-Touch 2.0的那些小彩蛋
  9. 阿里云mysql端口管理_怎样更改数据库端口号
  10. 全志H616芯片方案香橙派zero2开发板连接USB麦克风的使用方法