广和通l610二次开发|广和通l610 CAT.1模组opencpu开发《二》cola_os移植
广和通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移植相关推荐
- 广和通l610二次开发|广和通l610 CAT.1模组opencpu开发《一》资源介绍
广和通l610二次开发|广和通l610 CAT.1模组opencpu开发<一>资源介绍 L610 平台简介 L610 及平台支持的基本功能 OpenCPU 开机运行 开发板购买 L610 ...
- 广和通l610二次开发|广和通l610 CAT.1模组opencpu开发《三》阿里云物联网平台mqtt动态注册
阿里云物联网平台动态注册 使用模组的IMEI作为设备的name,采用动态注册自动在案例云平台上注册设备 文章目录 阿里云物联网平台动态注册 参考文档 一.基本准备 二.平台产品创建 三.动态注册流程 ...
- 大白NBIOT 移远BC26模块模组OpenCpu开发视频教程(有连接移动、电信平台的opencpu源码)
NBIOT(BC26.BC28,BC35)模块 移远BC26全网通模组OpenCpu实现TCPCLient网络数据传输 [复制链接] http://www.openedv.com/forum.ph ...
- 以一物驱万物,第三代5G NB-IoT模组OpenCPU开发新模式
伴随着物联网行业的发展,越来越多的物联网设备都逐渐趋于低成本.小型化.高集成的模式,传统的MCU+物联网模组的方式已经很难满足需求.利尔达NB860系列模组推出OpenCPU方案,满足客户低代码开发需 ...
- 蓝牙 linux开发板,开源双模蓝牙协议栈 - 蓝牙模组以及开发板使用介绍
零. 概述 本文章主要讲下我们的开发版(STM32F1+CSR8311)以及蓝牙模组扩展版(CSR8311)的功能以及使用简短说明 一. 声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容 ...
- 涂鸦智能模组SDK开发系列课程——涂鸦IoT平台介绍(二)
使用涂鸦Wi-Fi模组和涂鸦Wi-Fi&Bluetooth LE双模模组进行产品开发主要有三种不同的方式进行开发: 零代码开发:涂鸦提供可视化功能配置界面,无需任何编程经验,只需在线配置好产品 ...
- 【Cat.1模组】 广和通L610 基于OpenCPU的SDK二次开发
目前支持Cat.1网络的芯片平台主要是紫光展锐UIS8910和翱捷ASR1603,基于紫光展锐平台,各大厂商延伸出多款Cat.1模组:广和通L610就是其中之一.本文记录开发过程,供日后参考. 广和通 ...
- 广和通Cat.1模组与亚华物联智慧燃气表组成“CP”,高效赋能智慧城市建设
近期,因"价格"再夺眼球的Cat.1产品持续登上"物联网热搜",在中低速率连接领域再次出圈.相较NB-IoT,通信能力更强.适用性更广的Cat.1更能满足大多数 ...
- 制作一个有趣的涂鸦物联网小项目(涂鸦模组SDK开发 CBU BK7231N WiFi+蓝牙模组 HSV彩色控制)
实现的功能: l APP控制月球灯 l 本地月球灯控制 l APP控制"大白"颜色,实现各种颜色变身 l 门状态传感器状态APP显示 l 网络状态指示灯,连接服务器长亮, ...
最新文章
- elasticsearch 文档操作
- java中具有继承关系的类及其对象初始化顺序
- 前端学习(2566):vue的生命周期
- python网站服务器好麻烦_python写的网站,云服务器经常无法访问
- 抗滑桩弹性计算方法_抗滑桩设计与计算99147
- 你还在用HTTP吗?HTTP/3都来了。。。
- 分享安卓SD卡的后台设置
- gps模拟器 matlab,基于Matlab/Simulink的数字中频GPS信号软件模拟器
- 学校源码php,闪灵CMS学校建站系统(含小程序) v5.0 bulid20200319_php免费源码
- 浪曦_Struts2应用开发系列_第2讲.Struts2的类型转换--出现的问题笔记
- 0.88mm液晶拼接屏在会议显示中的优势分析
- 此页上的ActiveX控件和本页上的其他部分的交互可能不安全的解决办法
- 不知道怎么压缩图片大小?分享2个压缩小技巧
- 热评云厂商:网易数帆8.5亿元,企业数字化服务带来差异化
- 统计|如何观测两变量之间的相关系数及含义
- DAY01.使用JAVA从国家统计局爬取2020年全国统计用区划代码和城乡划分代码(省市区数据)
- Leetcode--Java--212. 单词搜索 II
- js实现点击切换checkbox背景图片
- 微信小程序毕业设计 基于微信会议室预约小程序系统开题报告
- 简化ETL工作,编写一个Canal胶水层
热门文章
- 星速配资:煤炭概念股大幅拉升 看好投资机会
- Python爬取大众点评景点评论
- 雷军回应 “小米手机都是中低端”
- 根据出生日期自动计算年龄
- 信息系统开发与管理【七】之 系统实施
- 哈理工计算机组成原理,哈尔滨理工大学计算机组成原理课程设计.pdf
- 安徽阜阳计算机高中学校排名,阜阳中学排名前十名,2021年阜阳中学排名一览表...
- android zuk彩蛋,联想ZUK Z2你真的会玩吗?来看U-Touch 2.0的那些小彩蛋
- 阿里云mysql端口管理_怎样更改数据库端口号
- 全志H616芯片方案香橙派zero2开发板连接USB麦克风的使用方法