FreeRTOS学习--1

本文介绍了FreeRTOS中任务的优先级及状态管理机制,详细解释了如何通过心跳中断实现任务调度,以及如何使用延迟函数使任务进入阻塞状态并最终返回就绪状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.5任务优先级

每个任务都会运行一个时间片。

要能够选择下一个运行的任务,调度器需要在每个时间片的结束时刻运行自己本身。一个称为心跳中断的周期性中断用于此目的。时间片的长度通过心跳中断的频率进行设定,心跳中断频率由FreeRTOSConfig.h中的编译时配置常量configTICK_RATE_HZ进行配置。如果,configTICK_RATE_HZ设为100hz,则时间片的长度为10ms。

1.6扩充非运行态

任务分为运行态和非运行态。非运行态包括就绪态、挂起、阻塞。

延迟函数为:void vTaskDelay( portTickType xTicksToDelay );

xTicksToDelay 延迟多少个心跳周期。调用该延迟函数的任务将进入阻塞态,经延迟指定的心跳周期数后,再转移到就绪态。
举个例子,当某个任务调用 vTaskDelay( 100 )时,心跳计数值
为 10,000,则该任务将保持在阻塞态,直到心跳计数计到
10,100。
常数 portTICK_RATE_MS 可以用来将以毫秒为单位的时间值转
换为以心跳周期为单位的时间值。

来源:#define portTICK_RATE_MS portTICK_PERIOD_MS
#define portTICK_PERIOD_MS ( ( TickType_t ) 1000 / configTICK_RATE_HZ )

### 关于 FreeRTOS-Plus-TCP 的使用指南 #### 配置 FreeRTOS-Plus-TCP 是一个专为嵌入式系统设计的 TCP/IP 协议栈,适用于资源受限的设备。为了成功配置该协议栈,需完成以下几个方面的设置工作: 1. **硬件初始化**:确保目标平台上的网络接口已正确初始化,并且驱动程序支持必要的功能(如发送和接收数据包)。这一步骤通常涉及调用特定函数来启动网卡以及分配内存缓冲区用于存储待处理的数据帧[^1]。 2. **IP 地址及相关参数设定**:通过 API 函数 `vIPv4AddressSet` 或者其他方式指定静态 IP 地址、子网掩码、默认网关等基本信息。如果希望动态获取这些值,则可以启用 DHCP 客户端服务[^3]。 3. **堆栈大小调整**:根据实际应用场景需求合理规划任务优先级及其对应的堆栈尺寸。过小可能导致溢出错误而过大则浪费有限资源[^2]。 4. **中断向量表映射**:对于某些架构而言还需要手动修改中断向量表以便正确响应来自物理层事件的通知信号。 --- #### 示例代码 下面给出一段简单的服务器监听循环作为参考实例之一: ```c #include "FreeRTOS.h" #include "task.h" #include "socket.h" void vSimpleServerTask(void *pvParameters){ struct freertos_socket_t* pxSocket; /* 创建套接字 */ if( (pxSocket = socket(FREERTOS_AF_INET, FREERTOS_SOCK_STREAM, FREERTOS_IPPROTO_TCP)) != NULL ){ /* 绑定到本地地址 */ struct freertos_sockaddr bindAddr; memset(&bindAddr,0,sizeof(bindAddr)); bindAddr.sin_family=FREERTOS_AF_INET; bindAddr.sin_port=htons((uint16_t)80); int iResult = bind(pxSocket,(struct sockaddr*)&bindAddr,sizeof(bindAddr)); if(iResult==pdPASS){ listen(pxSocket,BACKLOG_QUEUE_LENGTH); while(TRUE){ struct freertos_socket_t* newClientConnection; /* 接受连接请求 */ newClientConnection=accept(pxSocket,NULL,PASSIVE_BACKLOG_TIME_MS); if(newClientConnection!=NULL){ // 处理客户端交互逻辑... closesocket(newClientConnection); } } } closesocket(pxSocket); } } ``` 此代码展示了如何创建一个基本的服务端应用程序框架,在其中等待客户建立连接之后再进一步执行具体业务流程[^3]。 --- #### 相关文档下载链接 官方提供了详尽的技术手册帮助开发者深入了解产品特性及最佳实践方法论。可以从以下位置访问更多资料: - GitHub 主页: [https://github.com/FreeRTOS/FreeRTOS](https://github.com/FreeRTOS/FreeRTOS)[^1] - GitCode 存储库: [https://gitcode.com/gh_mirrors/fr/FreeRTOS-Plus-TCP](https://gitcode.com/gh_mirrors/fr/FreeRTOS-Plus-TCP) 另外还有专门针对初学者编写的入门教程可供查阅学习---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值