在官方提供的SDK中,使用的是FreeRTOS实时操作系统。但使用时和一般的FreeRTOS不同,因为它对一些函数进行了改造,直白点来说就是披上了一层皮。本章对SDK中的FreeRTOS的任务系统进行阐述和解析。
在上图可以看到,芯片在上电后运行启动文件,然后进行初始化。用户在main.c的void UserMain(void)函数里面编写自己的程序。
tls_os_status_t tls_os_task_create(tls_os_task_t *task, //任务句柄
const char* name, //名称
void (*entry)(void* param), //任务函数入口
void* param, //函数参数
u8 *stk_start, //堆栈开始地址
u32 stk_size, //堆栈大小
u32 prio, //优先级
u32 flag); //包含任务的额外信息
如果有兴趣研究的话,可以查看函数的描述。可以见到上述函数调用的是FreeRTOS的xTaskGenericCreate函数。但由于篇幅原因不在这里展开。
//handle 任务函数句柄
//(*freefun)(void) 释放资源函数入口
tls_os_status_t tls_os_task_del_by_task_handle(void *handle, void (*freefun)(void));
函数的第二个参数是另一个函数的入口,此函数用于删除任务后释放资源,也可不用。
tls_os_task_t tls_os_task_id()
{
return (tls_os_task_t)xTaskGetCurrentTaskHandle();
}
#include "wm_include.h"
#define MY_TASK_SIZE 1024 //堆栈区大小
static OS_STK MyTaskStk[MY_TASK_SIZE]; //创建堆栈区
u8 testNum = 0;
void mytask(void *pvParam)
{
u8 *prTestNum = (u8 *)pvParam;
while(1)
{
printf("\n testNum:%d \n",++(*prTestNum));
tls_os_time_delay(1000);
}
} //任务函数
void freefun(void)
{
printf("\n free the resource \n");
} //删除任务后执行的函数,用于释放内存资源
void UserMain(void)
{
printf("\n user main \n");
tls_os_task_t mytaskHandle = NULL; //任务函数句柄
tls_os_task_create(&mytaskHandle,"mytask",mytask,(void *)&testNum,MyTaskStk, MY_TASK_SIZE * sizeof(u32),1,0); //创建任务
tls_os_time_delay(5000); //延时
tls_os_task_del_by_task_handle(mytaskHandle,freefun); //删除任务
}
运行结果如下图:
FreeRtos的任务调度方式分抢占式和合作式,一般合作式比较少用,这里就不说了。四种状态之间可以相互转换,如上图所示。
FreeRtos的任务状态分四种,分别是:
tls_os_status_t tls_os_task_suspend(tls_os_task_t *task) //参数为函数句柄
{
vTaskSuspend(task);
return TLS_OS_SUCCESS;
}
使用延时函数后,交出CPU执行权,进入阻塞状态。任务延时结束后进入就绪状态
void tls_os_time_delay(u32 ticks); //ticks:延时时间片数
需要注意的是,函数参数ticks单位并非ms。需要在FreeRTOSConfig.h里面设置,默认为500Hz,即1个ticks数为2ms。若设置为1000,则延时1个ticsks为1ms。
#define configTICK_RATE_HZ ( ( portTickType ) 500u ) //时间片中断的频率
tls_os_status_t tls_os_task_resume(tls_os_task_t *task)
{
vTaskResume(task);
return TLS_OS_SUCCESS;
}
如果你喜欢我的文章,欢迎关注下方公众号,在公众号内回复“交流群”,进群一起讨论分享!
文章浏览阅读5.1k次。1、iOS请求URL中含有中文怎么办?使用UTF-8编码一下就OK了NSString* encodedString = [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];2、iOS获取URL链接中的各个参数值:例:http://example.com?param1=value1¶m2=param2通过对一个合法的url(第一个参数用"?“连接,且url中只有一个”?",剩下的参数用_ios 获取url参数
文章浏览阅读6k次,点赞3次,收藏16次。本文介绍了R语言while循环的写法,并以连加1到1000为例简单介绍用法_r语言while循环
文章浏览阅读5.2k次,点赞17次,收藏11次。两个方式安装pycallgraph均报subprocess-exited-with-error异常_setuptools降级
文章浏览阅读708次。Ultra-QuickSortTime Limit: 7000MSMemory Limit: 65536KTotal Submissions: 51274Accepted: 18803DescriptionIn this problem, you have to analyze a particular sorting algorithm. The algori
文章浏览阅读598次。本期我们来聊一聊前端页面模块化, 模块化也是《前端架构需要解决的问题》中最后一个还没介绍的问题 ,也是前端架构问题中最为复杂的问题。模块化的目的,是为了降低整体项目的工作量 也就是说页面中的部分内容是可以复用的。模块化虽然看起来很美好, 但用不好的话,反而会变成累赘 。而且,现在的模块化方案其实还有很大的改进空间。我们讨论以下几个问题1、模块化的原则是什么2、现有的模块化方案3、现今模块化的困境与我们的解决方案1、模块化原则首先,我们先讨论模块化的原则, 模块..._网站架构 如何实现多模块部署
文章浏览阅读316次。学数值计算还有复变函数了喔,矩阵忘干净了。又看了一遍 蓝棕 的相关的讲解,总结一下。1.向量是什么?从初到末的箭头(物理角度,表示一种运动过程)有序的数字列表(计算机/数学角度)[1,2]加和数乘运算有意义的anything(抽象意义)12两种理解之间的关系就是线性代数的奥秘,即几何角度与数值角度。一个向量的坐标由一对数构成,可以理解为从原点到终点的箭头,描述运动过程。比如,规定好坐标平面的单位,..._求矩阵的秩c++
文章浏览阅读1.8w次,点赞57次,收藏543次。项目简介目的: 实现昆虫的图像分类,同时该模型也可以用于其他图像的分类识别,只需传入相应的训练集进行训练,保存为另一个模型即可,进行调用使用。配置环境: pycharm(python3.7),导入pytotch库知识预备: 需要了解卷积神经网络的基本原理与结构,熟悉pytorch的使用,csdn有很多介绍卷积神经网络的文章,可查阅。算法设计思路:(1) 收集数据集,利用 python 的 requests 库和 bs4 进行网络爬虫,下载数据集(2) 搭建卷积神经网络(3)对卷积神经网络进行训_picture_predictions.model_predictions import network_bn
文章浏览阅读2.1k次。LoRa简介LoRa是由Semtech公司提供的超长距离、低功耗的物联 网解决方案。Semtech公司和多家业界领先的企业,如Cisco、 IBM及Microchip发起建立了LoRa(Long Range,广距)联 盟,致力于推广其联盟标准LoRaWAN技术,以满足各种需要 广域覆盖和低功耗的M2M设备应用要求。LoRaWAN目前已 有成员150多家,也有数家中国公司参与其中,并且在欧洲数 个国家进行了商业部署,国内也开始有了应用。LoRa技术特点LoRa的物理层和MAC层设计充分体现其对Io_物联网lora信号的带宽
文章浏览阅读3.2k次,点赞7次,收藏7次。直接通过sudo apt install git命令安装的git是ubuntu主仓库中的一个较低的版本,如果想要一个ubuntu上支持的最新稳定版本,需要通过PPA来获得。 添加PPA仓库到系统中: sudo add-apt-repository ppa:git-core/ppa 更新同步信息: sudo apt-get update 更新git版本: sudo apt install git..._ubuntu更新git版本
文章浏览阅读1.3k次。1、vue3变化 新增了三个组件:Fragment 支持多个根节点、Suspense 可以在组件渲染之前的等待时间显示指定内容、Teleport 可以让子组件能够在视觉上跳出父组件(如父组件overflow:hidden)。 新增指令 v-memo,可以缓存 html 模板,比如 v-for 列表不会变化的就缓存,简单说就是用内存换时间。 新增 Composition API 可以更好的逻辑复用和代码组织,同一功能的代码不至于像以前一样太分散,虽然 Vue2 中可以用 minxin
文章浏览阅读130次。赠送规则本次活动联合了10个优质号主,送出 7台适合程序员的巧克力键盘,选择巧克力,是因为即将到来的5.1节。进入下面每个公众号主页回复 562获得一张 助力券,扫描参与抽奖。每扫描..._程序员 巧克力键盘
文章浏览阅读1.7w次,点赞5次,收藏34次。QAction类提供了可以插入到窗口小部件中的抽象用户界面操作。头文件:#include <QAction> qmake:QT += widgets继承:QObject被继承:QWidgetAction在应用程序中,可以通过菜单,工具栏按钮和键盘快捷键调用许多常用命令。 由于用户期望每个命令都以相同的方式执行,无论使用的用户界面如何,将每个命令表示为一个操作都很有用。操作可以添加到菜单..._qwidgetaction