当前位置: 首页 > news >正文

freertos使用基础

FreeRtos快速入门

  • 一,基础知识
    • 1.工作方式简介(不深入介绍原理)
    • 2,移值
    • 3,什么是内存管理
  • 二,API的作用跟使用方法
    • 1,创建任务

最近跟着韦东山老师学习 FreeRTOS ,记录下来加强记忆。

一,基础知识

1.工作方式简介(不深入介绍原理)

    FreeRTOS 的官网为:https://www.freertos.org/

FreeRTOS 的内核支持抢占式, 合作式和时间片调度。任务与任务、 任务与中断之间可以使用任务通知、消息队列、二值信号量、数值型信号量、 递归互斥信号量和互斥信号量进行通信和同步。
 RTOS 系统的核心就是任务管理, FreeRTOS 是一个抢占式的实时多任务系统, 其任务调度器也是抢占式的。高优先级的任务可以打断低优先级任务的运行而取得 CPU 的使用权,这样就保证了那些紧急任务的运行。 这样我们就可以为那些对实时性要求高的任务设置一个很高的优先级。 高优先级的任务执行完成以后重新把 CPU 的使用权归还给低优先级的任务,这个就是抢占式多任务系统的基本原理。
 2.任务状态介绍
 ● 运行态
  当一个任务正在运行时, 那么就说这个任务处于运行态, 处于运行态的任务就是当前正在使用处理器的任务。 如果使用的是单核处理器的话那么不管在任何时刻永远都只有一个任务处于运行态。
● 就绪态
  处于就绪态的任务是那些已经准备就绪(这些任务没有被阻塞或者挂起), 可以运行的任务,但是处于就绪态的任务还没有运行,因为有一个同优先级或者更高优先级的任务正在运行!
● 阻塞态
  如果一个任务当前正在等待某个外部事件的话就说它处于阻塞态, 比如说如果某个任务调用了函数 vTaskDelay()的话就会进入阻塞态, 直到延时周期完成。任务在等待队列、信号量、事件组、通知或互斥信号量的时候也会进入阻塞态。任务进入阻塞态会有一个超时时间,当超过这个超时时间任务就会退出阻塞态,即使所等待的事件还没有来临!
● 挂起态
  像阻塞态一样,任务进入挂起态以后也不能被调度器调用进入运行态, 但是进入挂起态的任务没有超时时间。任务进入和退出挂起态通过调用函数 vTaskSuspend()和 xTaskResume()。

————————————————
版权声明:本文为CSDN博主「温人之周.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xxxx123041/article/details/122229384

2,移值

链接: https://blog.csdn.net/weixin_43930521/article/details/124432875

3,什么是内存管理

链接: https://img-blog.csdnimg.cn/20200313171835198.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjEyMDky,size_16,color_FFFFFF,t_70

二,API的作用跟使用方法

1,创建任务

void vTask1( void *pvParameters )
{
const char *pcTaskName = "T1 run\r\n";
volatile uint32_t ul; /* volatile 用来避免被优化掉 */
/* 任务函数的主体一般都是无限循环 */
for( ;; )
{
/* 打印任务 1 的信息 */
printf( pcTaskName );
/* 延迟一会(比较简单粗暴) */
for( ul = 0; ul < mainDELAY_LOOP_COUNT; ul++ )
{
}
}
}
void vTask1( void *pvParameters )
{
const char *pcTaskName = "T1 run\r\n";
volatile uint32_t ul; /* volatile 用来避免被优化掉 */
/* 任务函数的主体一般都是无限循环 */
for( ;; )
{
/* 打印任务 1 的信息 */
printf( pcTaskName );
/* 延迟一会(比较简单粗暴) */
for( ul = 0; ul < mainDELAY_LOOP_COUNT; ul++ )
{
}
}
}
BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, // 函数指针, 任务函数const char * const pcName, // 任务的名字const configSTACK_DEPTH_TYPE usStackDepth, // 栈大小,单位为 word,10 表示
40 字节void * const pvParameters, // 调用任务函数时传入的参数UBaseType_t uxPriority, // 优先级TaskHandle_t * const pxCreatedTask ); // 任务句柄, 以后使用它来操作这个任
int main( void )
{
prvSetupHardware();xTaskCreate(vTask1, "Task 1", 1000, NULL, 1, NULL);
xTaskCreate(vTask2, "Task 2", 1000, NULL, 1, NULL);
/* 启动调度器 */
vTaskStartScheduler();
/* 如果程序运行到了这里就表示出错了, 一般是内存不足 */
return 0;
}

http://www.lryc.cn/news/63515.html

相关文章:

  • Spring Boot引用外部JAR包和将自己的JAR包发布到本地Maven库
  • 微信小程序原生开发功能合集十二:编辑界面的实现
  • 基于3D渲染和基于虚拟/增强现实的IIoT原理的数字孪生平台的方案论文阅读笔记
  • 腾讯云镜YunJing——Agent定时任务脚本分析
  • 如何使用java编写差分进化算法
  • Enterprise:如何在 Elastic 企业搜索引擎中添加对更多语言的支持
  • SqlServer数据库中文乱码问题解决方法
  • 跨域的五种最常见解决方案
  • 作为一个C++新手,我感兴趣的C++开源项目
  • 杭州云降价只是敲锣
  • RabbitMQ笔记
  • 【Latex】如何在表格中使用footnote
  • 设计师常用的素材网站有哪个推荐
  • jmeter常用的命令行参数有哪些?常用的jmeter命令行如何编写
  • APP渗透—查脱壳、反编译、重打包签名
  • 【贪婪技术】
  • 谈「效」风生 | 如何找到现有研发体系的「内耗问题」?
  • Linux第四章
  • HCIA-RS实验-路由配置-静态路由缺省路由
  • Unity API详解——Quaternion类
  • 8个免费的PNG素材网站推荐
  • ChatGPT技术原理 第二章:自然语言处理基础
  • 国民技术N32G430开发笔记(8)- 内部Flash的读写操作
  • JVM 基本知识
  • 【源码解析】流控框架Sentinel源码解析
  • redis面试重点------源于黑马
  • jQuery知识点二
  • 4 月份 火火火火 的开源项目
  • PAT A1011 World Cup Betting
  • Android 拍照以及相册中选择(适配高版本)————上传头像并裁剪(一)