首页
关于
Search
1
开发环境搭建(FTP、VSCode、交叉编译器、SSH、NFS、TFTP)
33 阅读
2
linux内核编译报错(gcc: not found + fatal error curses.h)
26 阅读
3
安装WMware Tools选项显示灰色解决方法及WMware Tools安装笔记
17 阅读
4
ubuntu24.2下解压.tar.bz2报错(bzip2: 无法exec:没有那个文件或目录)
14 阅读
5
linux内核编译报错(usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x50): multiple definition of 'yylloc';)
14 阅读
学习笔记
linux学习笔记
文件系统
FreeRTOS
资源分享
小作品
登录
/
注册
Search
Warren
累计撰写
37
篇文章
累计收到
1
条评论
首页
栏目
学习笔记
linux学习笔记
文件系统
FreeRTOS
资源分享
小作品
页面
关于
搜索到
37
篇与
的结果
2025-04-28
第十章
暂无简介
2025年04月28日
0 阅读
0 评论
0 点赞
2025-04-28
第九章
暂无简介
2025年04月28日
0 阅读
0 评论
0 点赞
2025-04-28
第八章
暂无简介
2025年04月28日
0 阅读
0 评论
0 点赞
2025-04-28
第七章
暂无简介
2025年04月28日
0 阅读
0 评论
0 点赞
2025-03-17
第六章 FreeRTOS任务相关API函数
6.1 任务创建和删除API函数FreeRTOS 最基本的功能就是任务管理。任务管理最基本的操作就是创建和删除。有关API函数如下:6.1.1函数xTaxkCreate()函数原型如下:BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, const char * const pcName, const uint16_t usStackDepth, void * const pvParameters, UBaseType_t uxPriority, TaskHandle_t * const pxCreatedTask )pxTaskCode: 任务函数(函数指针)pcName: 任务名称(字符串)usStackDepth: 任务堆栈大小(单位:字 4Byte)pvParameters: 传递给任务函数的参数(一般为NULL)uxPriority: 任务优先级(0 - MAX-1)pxCreatedTask: 任务句柄返回值 pdPASS 表示 任务创建成功 errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY 表示 因堆栈内存不足导致任务创建失败 在xTaskCreate中有5个步骤来完成任务创建流程1 申请堆栈内存2 申请任务控制块内存3 初始化任务控制块中的堆栈部分(将申请到的堆栈地址赋值给任务控制块中的pxStack)4 调用prvInitialiseNewTask初始化任务控制块中的成员 4.1 初始化任务堆栈内存在0x5A 4.2 初始化任务控制块中栈顶的位置 4.3 初始化任务控制块中的任务名称 4.4 初始化任务控制块中的任务优先级 4.5 初始化任务控制块中的 状态列表项 和 时间列表项 并设置列表项中的 所属 任务控制块 4.6 设置列表项的值(列表为从小到大插入。所以用优先级MAX-优先级来实现优先级越高越靠前) 4.7 调用pxPortInitialiseStack初始化任务堆栈 4.8 任务句柄 = 任务控制块5 调用prvAddNewTaskToReadyList添加新创建的任务到就绪列表中6.4 任务挂起与恢复API函数有时候我们需要暂停某一个任务的运行,过一段时间以后再重新运行它。如果使用删除和创建功能,则会造成任务中变量保存的值丢失。挂起任务类似与暂停,是可以恢复的,但删除就不一样的;类似‘人死两清’。 有以下三个函数用来实现任务的挂起和恢复的: 【注】以FromISR结尾的API函数都是供用户在中断中调用的。函数vTaskSuspend()此函数用来将某个任务设置为挂起状态,进入挂起态的任务永远都不会进入到就绪列表中。除非调用任务恢复函数来解挂。此函数要想使用,需要在配置为文件中将宏INCLUDE_vTaskSuspend配置为1函数的原型如下:void vTaskSuspend(TaskHandle_t xTaskToSuspend);需要传入的参数为:需要挂起的任务的任务句柄;任务句柄可以通过API xTaskGetHandle()来获取。无论该任务的优先级多高,只要被挂起,该任务就不会被执行,直到解挂。如果参数为NULL,则代表要挂起的任务为自己。任务挂起不支持嵌套,就是说同一个任务挂起一次和挂起N次的效果是一样的。函数 vTaskResume() 将一个任务从挂起状态恢复到就绪状态中。只有通过函数xTaskSuspend()设置为挂起态的任务才可以使用vTaskResume()恢复。 注意任务无论被 vTaskSuspend() 挂起多少次,只需在任务中调用 vTakResume() 恢复一次,就可以继续运行。且被恢复的任务会进入就绪态! 此函数要想使用,需要在配置为文件中将宏INCLUDE_vTaskSuspend配置为1; 函数的原型如下:void vTaskResume(TaskHandle_t xTaskToResume);需要传入的参数为:需要挂起的任务的任务句柄。函数xTaskResumeFromISR() xTaskResume()函数功能一样。不过这个函数实在中断中调用的版本,用于在中断服务函数中恢复一个任务。 函数的原型如下:BaseType_t xTaskResumeFromISR(TaskHandle_t xTaskToResume);需要注意的是,这个函数具有返回值pdTRUE:恢复运行的任务的任务优先级等于或者高于正在运行的任务(被中断打断的任务), 这意味着在退出中断服务函数以后必须进行一次上下文切换。pdFALSE:恢复运行的任务的任务优先级低于当前正在运行的任务(被中断打断的任务),这意味着在退出中断服务函数的以后不需要进行上下文切换。使用该函数注意宏:INCLUDE_vTaskSuspend 和 INCLUDE_xTaskResumeFromISR 必须定义为 1注意:中断服务程序中要调用freeRTOS的API函数则中断优先级不能高于FreeRTOS所管理的最高优先级
2025年03月17日
9 阅读
0 评论
0 点赞
1
2
3
...
8