【FreeRTOS】创建任务
1. 函数接口在freertos.c文件中已经默认创建了一个任务defaultTaskHandleosThreadNew(StartDefaultTask,NULL,defaultTask_attributes);osThreadNew函数位于cmsis_os2.c文件中cmsis_os2.c其实提供了统一的RTOS接口在FreeRTOS中创建任务的接口与RT-Thread使用的接口可能不一样FreerRTOS可能使用xTaskCreateRT-Thread可能使用rt_thread_createcmsis_os2.c把这两者统一在一个接口下osThreadNew下当然在使用FreeRTOS时也可以使用两个原生接口xTaskCreate与xTaskCreateStaticBaseType_txTaskCreate(TaskFunction_t pxTaskCode,// 函数指针, 任务函数constchar*constpcName,// 任务的名字constconfigSTACK_DEPTH_TYPE usStackDepth,// 栈大小,单位为word,10表示40字节void*constpvParameters,// 调用任务函数时传入的参数UBaseType_t uxPriority,// 优先级TaskHandle_t*constpxCreatedTask);// 任务句柄, 以后使用它来操作这个任务参数作用TaskFunction_t pxTaskCode传入一个任务函数其函数指针为typedef void (*osThreadFunc_t) (void *argument);下面一节中的伪代码const char * const pcName给任务取一个名字这个无所谓自己取一个自己喜欢的就可以了const configSTACK_DEPTH_TYPE usStackDepth栈深度不理解也不要紧可以认为是一个任务中的变量、数据等需要一定的空间来存放这里的栈空间大小要比需要的大 才可以void * const pvParameters传入参数可以向任务中传入参数比如说UART任务可以传入波特率等一般取NULL就可以(如果不用的话)UBaseType_t uxPriority任务具有优先级 如果对优先级比较熟悉的话 可以使用数字 也可以使用cmsis_os2.h中提供的宏osPriorityAboveNormal,osPriorityHigh都可以TaskHandle_t * const pxCreatedTask返回任务句柄 句柄在C语言中可以用结构体理解 里面的参数在任务调度时被使用 可以通过句柄来修改任务的特性等(比如说 : 任务级等)返回值自已go define看一下吧也可以静态分配内存xTaskCreateStatic只不过要手动分配任务栈与任务控制块其实cmsis_ov2统一的接口就可以了 也就是osThreadNew2. 创建新的任务使用osThreadNew去创建任务这种方式简单 而且也方便移植 当然也可以使用FreeRTOS的源码这也是没有问题的2.1 任务添加在哪在main.c中具有启动FreeRTOS的代码对于1 3可以不需要去管 1是去配置FreeRTOS的一些基本参数 3是去启动FreeRTOS的调度对于FreeRTOS的调度 就是去协调每一个任务 让每一个任务都可以正常地执行 如果说没有接触过操作系统或者是只是简单学习过一些编程语言的话 可能会好奇 main下的函数不是顺序执行吗 那么是怎么每个任务都会好依次都可以执行的其实是一个任务运行一会退出 然后上另一个任务运行一会儿退出 而决定哪个任务上CPU运行 是由任务调度决定的在MX_FREERTOS_Init()中初始化任务 也就是在这里面添加任务在MX_FREERTOS_Init()中可以添加自定义的初始化函数User_Tasks_Init()可以在User_Tasks_Init()中添加自己的任务 这样也方便管理在MX_FREERTOS_Init()的下面有 一个默认任务使用任务函数StartDefaultTask不向任务中传入参数NULL使用参数defaultTask_attributesdefaultTaskHandleosThreadNew(StartDefaultTask,NULL,defaultTask_attributes);defaultTask_attributes查看一下给任务设置的参数可以看到起的名字申请的栈空间设置的优先constosThreadAttr_tdefaultTask_attributes{.namedefaultTask,.stack_size128*4,.priority(osPriority_t)osPriorityNormal,};定义了一个句柄来承接返回值osThreadId_tdefaultTaskHandle;同样 给出StartDefaultTask这个默认任务默认任务为 每隔500ms 对PC13端口的电平进行翻转for(;;)不是陷入了死循环了吗 其实不需要担心 任务就是不会停止(当然除非 主动停止)不需要担心死循环 因为FreeRTOS会不断地调度任务也可以写为while(1) { /*task任务*/ }voidStartDefaultTask(void*argument){/* USER CODE BEGIN StartDefaultTask *//* Infinite loop */for(;;){HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);osDelay(500);}/* USER CODE END StartDefaultTask */}给一个添加LVGL任务的例子如果在参数中没有给 任务栈空间 与 任务控制块的话 会自动动态分配在创建了新的进程之后 启动FreeROTS调度器之后 就可以正常运行LvHandlerTask任务也会上调度器运行osThreadId_tLvHandlerTaskHandle;constosThreadAttr_tLvHandlerTask_attributes{.nameLvHandlerTask,.stack_size128*24,.priority(osPriority_t)osPriorityLow,};voidUser_Tasks_Init(void){LvHandlerTaskHandleosThreadNew(LvHandlerTask,NULL,LvHandlerTask_attributes);}

相关新闻

【git ssl error check process】

【git ssl error check process】

查看git 配置:git config --list 禁用ssl:git config --global http.sslVerify false 将 GitHub 仓库地址从 HTTPS 改为 SSH,可以绕过 SSL 验证问题。 git remote set-url origin gitgithub.com:username/repository.git 生成新的 SSH Key 推荐使用 Ed25…

2026/5/17 11:57:53 阅读更多 →
手撕ml+dl题

手撕ml+dl题

1. 从头实现X1. ReLUx是Tensor,所以只能用Tensor操作。def relu(x: torch.Tensor) -> torch.Tensor:return x*(x>0).float()2. Softmax当针对某一dim处理时,需要加keepdim参数,否则后续shape不一致无法计算。softmax归一化时&#xff0…

2026/5/17 11:57:52 阅读更多 →
MySQL事务和锁

MySQL事务和锁

什么是事务为什么使用事务怎么使用事务如何实现原子性回滚(rollback)是如何实现的如何实现持久性所以总体步骤是:1.读取磁盘中的页数据到内存2.DML操作3.将原数据存入undo log日志(用于后面服务器故障导致未提交事务的回滚&#x…

2026/5/17 11:57:52 阅读更多 →

最新新闻

基于YOLOv8的猫狗品种识别系统开发实战

基于YOLOv8的猫狗品种识别系统开发实战

1. 项目概述:基于YOLOv8的猫狗品种识别系统这个项目本质上是一个计算机视觉领域的典型应用——利用YOLOv8目标检测算法实现猫狗品种的自动识别。我在实际部署中发现,相比传统图像处理方法,深度学习方案在复杂场景下的识别准确率能提升40%以上…

2026/7/5 0:13:42 阅读更多 →
从零实现SHA-1哈希算法:原理、代码与性能优化实战

从零实现SHA-1哈希算法:原理、代码与性能优化实战

1. 项目概述:从“知其然”到“知其所以然”的SHA-1实现之旅在信息安全领域,哈希算法扮演着数据完整性校验和数字签名的基石角色。SHA-1(Secure Hash Algorithm 1)作为曾经的主流算法,虽然因其安全性问题已不再被推荐用…

2026/7/5 0:13:42 阅读更多 →
SillyTavern企业级AI对话前端部署指南:5步构建高可用架构

SillyTavern企业级AI对话前端部署指南:5步构建高可用架构

SillyTavern企业级AI对话前端部署指南:5步构建高可用架构 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern SillyTavern作为面向高级用户的LLM前端界面,为企业AI对话系…

2026/7/5 0:11:41 阅读更多 →
AI开发实战指南:从大模型应用到Agent构建的技术栈与学习路线

AI开发实战指南:从大模型应用到Agent构建的技术栈与学习路线

最近和一位从卡内基梅隆大学(CMU)AI领域出来的资深科学家朋友深聊了一次,话题从AI的历史、当下的技术浪潮,一直延伸到我们开发者该如何应对。这次交流让我感触很深,也解答了我心中很多关于“AI现在到底在发生什么”的困…

2026/7/5 0:11:41 阅读更多 →
AI赋能传染病建模:从数据到动力学模型的本地实践指南

AI赋能传染病建模:从数据到动力学模型的本地实践指南

这次我们来看一个将 AI 与传染病动力学建模结合的前沿方向。想象一下,你手头有一份流感爆发的病例数据,传统的建模方法可能需要复杂的微分方程和大量的手动调参,而 AI 模型能否直接从数据中“学习”出传播规律,甚至自动跑通整个建…

2026/7/5 0:07:38 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻