FreeRTOS学习笔记 6 - 互斥量

2023-11-05

目录

1. 创建

2. 获取

3. 释放

4. 测试


FreeRTOS不支持调度方式的设置,所以下面2个宏定义可以随意设置值。

#define RTOS_IPC_FLAG_FIFO                              0x00
#define RTOS_IPC_FLAG_PRIO                              0x01

互斥量对应的句柄定义:

#define rtosMutex_t                                     SemaphoreHandle_t

1. 创建

#define rtosMutexCreate(                                \
    handle,         /*Mutex Handle*/                    \
    name,           /*Mutex Name*/                      \
    flag                                                \
    )                                                   \
    {                                                   \
        handle = xSemaphoreCreateMutex();               \
    }

其中参数name,flag无意义。

2. 获取

#define rtosMutexTake(                                  \
    handle,                                             \
    time,                                               \
    ret                                                 \
    )                                                   \
    {                                                   \
        ret = xSemaphoreTake(handle, time);             \
    }

3. 释放

#define rtosMutexRelease(                               \
    handle                                              \
    )                                                   \
    {                                                   \
        xSemaphoreGive(handle);                         \
    }

4. 测试

之前的测试RT Thread的代码会和RT Thread不同,分析大概原因。

任务1获取到Mutex后没有释放Mutex就进入Sleep了,而任务2运行后尝试获取Mutex失败,系统重新调度,任务1等待Sleep结束后继续运行,释放Mutex后又开始获取Mutex,这时FreeRTOS和RT Thread不同的地方是FreeRTOS还是任务1获取Mutex,即按照优先级获取,而RT Thread则是按照申请时间的优先级调度。所以要实现相同的效果,则需要把任务1的释放Mutex放在Sleep之前。

static void threadMutexShow(void *parameter)
{
    while(1)
    {
        uint32_t ret;
        rtosMutexTake(mutex, RTOS_WAIT_FOREVER, ret);
        Printf("Mutex Value = %c\n", gMutexValue);
        rtosMutexRelease(mutex);
        rtosThreadSleep(100);
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FreeRTOS学习笔记 6 - 互斥量 的相关文章

  • FreeRTOS config开始的宏

    FreeRTOSConfig h系统配置文件中可以自定义 FreeRTOS h中定义默认值 configAPPLICATION ALLOCATED HEAP 默认情况下FreeRTOS的堆内存是由编译器来分配的 将宏configAPPLIC
  • 解决错误“ #error “include FreeRTOS.h“ must appear in source files before “include event_groups.““例子分享

    今天来给大家分享一下 关于之前自己在学习FreeRTOS过程中遇到的一个错误提示 话不多说 我们直接来看 错误分析 首先 我们看一下错误的提示 error 35 error directive include FreeRTOS h must
  • LVGL学习笔记6 - 输入设备

    目录 1 移植文件 2 移除多余代码 3 输入设备初始化 4 输入设备读回调函数 4 1 LV INDEV TYPE POINTER 4 2 LV INDEV TYPE KEYPAD 4 3 LV INDEV TYPE ENCODER 4
  • FreeRTOS学习(八) 延时函数

    声明及感谢 跟随正点原子资料学习 在此作为学习的记录和总结 环境 keil stm32f103 FreeRTOS延时函数有两个 分别是 vTaskDelay vTaskDelayUntil 1 vTaskDelay 任务相对延时 函数原型
  • ZYNQ中FreeRTOS中使用定时器

    使用普通的Timer中断方式时 Timer中断可以正常运行 但是UDP通信进程无法启动 其中TimerIntrHandler是中断服务程序 打印程序运行时间与从BRAM中读取的数据 void SetupInterruptSystem XSc
  • FreeRTOS:中断配置

    目录 一 Cortex M 中断 1 1中断简介 1 2中断管理简介 1 3优先级分组定义 1 4优先级设置 1 5用于中断屏蔽的特殊寄存器 1 5 1PRIMASK 和 FAULTMASK 寄存器 1 5 2BASEPRI 寄存器 二 F
  • FreeRTOS,串口中断接收中使用xQueueOverwriteFromISR()函数,程序卡死在configASSERT

    原因 UART的中断优先级设置的太高 高于了configMAX SYSCALL INTERRUPT PRIORITY宏定义的安全中断等级 UART的中断等级小于等于宏定义的优先等级即可
  • stm32f103zet6移植标准库的sdio驱动

    sdio移植 st官网给的标准库有给一个用于st出的评估板的sdio外设实现 但一是文件结构有点复杂 二是相比于国内正点原子和野火的板子也有点不同 因此还是需要移植下才能使用 当然也可以直接使用正点原子或野火提供的实例 但为了熟悉下sdio
  • FreeRTOS学习(三)开关中断

    声明及感谢 跟随正点原子资料学习 在此作为学习的记录和总结 环境 keil stm32f103 背景知识 Cotex M3的NVIC最多支持240个IRQ 中断请求 1个不可屏蔽 NMI 1个Systick 滴答定时器 Cortex M处理
  • 啊哈C的简单使用

    打开啊哈C 新建一个程序输出hello world include
  • 基于STM32的FreeRTOS学习之中断测试实验(五)

    记录一下 方便以后翻阅 本章内容是接着上一章节进行的实际演练 1 实验目的 FreeRTOS可以屏蔽优先级低于configMAX SYSCALL INTERRUPT PRIORITY的中断 不会屏蔽高于其的中断 本次实验就是验证这个说法 本
  • Arduino IDE将FreeRTOS用于STM32

    介绍 适用于STM32F103C8的FreeRTOS STM32F103C是一种能够使用FreeRTOS的ARM Cortex M3处理器 我们直接在Arduino IDE中开始使用STM32F103C8的FreeRTOS 我们也可以使用K
  • FreeRTOS轻量级同步--任务通知

    1 简介 在FreeRTOS的配置参数中的configUSE TASK NOTIFICATIONS宏打开 一般RTOS会默认打开 如图1所示 图1 notify宏开关 RTOS在创建任务时 会创建一个32位的通知值ulNotifiedVal
  • 单片机通信数据延迟问题排查

    1 问题说明 笔者在最近的项目中 发现系统的响应延迟较高 经过排查 排除了单片机运行卡死的问题 2 原因分析 具体排查过程这里就不细致说明了 直接给出排查后原因 任务执行周期规划不合理 导致freertos队列发送接收到的命令有延迟 为了便
  • FreeRTOS临界段

    1 临界段 在访问共享资源时不希望被其他任务或者中断打断的代码 这段要执行的代码称为临界段代码 2 设置临界段的目的 保护共享资源 例如 全局变量 公共函数 不可重入函数 函数里面使用 了一些静态全局变量 malloc 等 保护外设的实时性
  • 13-FreeRTOS任务创建与删除

    任务创建和删除API函数位于文件task c中 需要包含task h头文件 task h里面包函数任务的类型函数 例如 对xTaskCreate的调用 通过指针方式 返回一个TaskHandle t 变量 然后可将该变量用vTaskDele
  • 再论FreeRTOS中的configTOTAL_HEAP_SIZE

    关于任务栈和系统栈的基础知识 可以参考之前的随笔 FreeRTOS 任务栈大小确定及其溢出检测 这里再次说明 define configTOTAL HEAP SIZE size t 17 1024 这个宏 官方文档解释 configTOTA
  • 使用 GCC 编译器的 ARM 内核的堆栈回溯(当存在 MSP 到 PSP 切换时)

    核心 ARM Cortex M4 编译器 GCC 5 3 0 ARM EABI 操作系统 免费 RTOS 我正在使用 gcc 库函数 Unwind Reason Code Unwind Backtrace Unwind Trace Fn v
  • 当一个任务写入变量而其他任务读取该变量时,我们是否需要信号量?

    我正在研究 freeRtos 并且我有一个名为 x 的变量 现在 每秒只有一个任务正在写入该变量 而其他任务正在读取该变量值 我需要用互斥锁来保护变量吗 如果变量为 32 位或更小 并且其值是独立的并且不与任何其他变量一起解释 则不需要互斥
  • C++ freeRTOS任务,非静态成员函数的无效使用

    哪里有问题 void MyClass task void pvParameter while 1 this gt update void MyClass startTask xTaskCreate this gt task Task 204

随机推荐

  • 内存碎片是什么?关于内存碎片的解释

    内存碎片是什么 关于内存碎片 内存碎片通常分为内部碎片和外部碎片 内部碎片 所谓内部碎片指的就是 系统为某项功能分派了一定的内存 但是该功能的实现没有用完所有系统分配的 余下的部分就被成为内存碎片的内部碎片 外部碎片 外部内存指的是有一些连
  • Pytorch 对应版本下载及安装

    PyTorch官网 https pytorch org PyTorch官网浏览旧版本对应安装 https pytorch org get started previous versions PyTorch各个版本下载网址 https dow
  • R语言案例分析:多元数据的基本统计分析

    R语言案例分析 多元数据的基本统计分析 来自 多元统计分析与R语言建模 第四版 数据集下载 我们利用该数据集中的Case1来完成下面的R语言操作 options digits 4 输出结果位数 par mar c 4 4 2 1 0 1 c
  • SPI通信协议和2.4G总结

    SPI SPI Serial Peripheral Interface 协议是由摩托罗拉公司提出的通讯协议 即串行外设接口 是一种高速全双工的通信总线 SPI 总线系统是一种同步串行外设接口 它可以使 MCU 与各种外围设备以串行方式进行通
  • python 绘制 频谱图

    效果图 t np arange 0 time 1 0 sampling rate wavename morl cmorB C where B is the bandwidth and C is the center frequency to
  • linux cpu、内存、IO、网络的测试工具

    一 linux cpu 内存 IO 网络的测试工具 cpu测试工具 1 Super Pi for linux Super PI是利用CPU的浮点运算能力来计算出 圆周率 所以目前普遍被用户用做测试系统稳定性和测试CPU计算完后特定位数圆周率
  • React创建一个简单的计数器

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 React创建一个计数器 一 利用state实现 React创建一个计数器 一 利用state实现 状态 state 即数据 是组件内部的私有数据 只能在组件内部使
  • 算法序列--栈和队列

    栈 Stack 是一个后进先出 last in first 偶通 LIFO 的线性表 要求只在表尾进行删除和插入操作 栈的元素必须后进先出 操作只能在栈的表尾进行 表尾为栈的栈顶 top 相应的表头为栈底 bottom 栈的插入操作 Pus
  • 懒加载(lazy)

    懒加载 简述 当我们查询一个对象的时候 在默认情况下 返回的只是该对象的普通属性 当用户去使用对象属性时 才会向数据库发出再一次的查询 这种现象我们称为 lazy现象 解决方法可以这样 1 显示初始化 Hibernate initized
  • Redis发布/订阅、事务、Bloom、过期策略

    文章目录 发布 订阅 pub sub 事务 RedisBloom 缓存 TTL 发布 订阅 pub sub publish channel message subscribe channel sub后就可以收到pub信息 群聊信息存储 事务
  • 耳语秘密WhisperedSecrets PurrfectHorror CE

    WhisperedSecrets PurrfectHorror CE耳语秘密 完美恐怖收藏版是一款恐怖游戏 当当地的埃及学教授在城市博物馆的文物被盗后向您寻求帮助时 对于像您这样的专家来说 这似乎是一个简单的案例 但当您发现阿波夫之镰超出了
  • 高斯顺序消元法c++程序代码及实例

    include using namespace std define n 4 通过符号常量定义线性方程组的规模大小 当前的n值表示适用解n元一次线性方程组 void Process of elimination double A n n d
  • Vue.js 报错:Cannot read property ‘validate‘ of undefined“

    错误解决 起因 是我将elemnt ui登录 默认放在mounted 函数里面 导致vue初始化就调用这个函数 找了网上 有以下错误原因 1 一个是你ref写错了 导致获取不了这个表单dom 我这显然不是 2 我们vue初始化时 eleme
  • Springboot+POI 带有图片的表格导入导出功能解析

    今天来讲下在导入数据的场景时 表格中会有一列存放的是对应的图片信息 导入后在前端页面进行表格数据展示 这里的难点主要在于 对于获取表格中图片列的图片数据进行保存到服务器以及对应插入数据库 建议一般是用图片的保存服务器的路径地址保存到数据库中
  • idea装载jerbel以及文件上传下载

    一 JRebel 1 1 Jrebel介绍 JRebel是一个Java开发工具 它是一款用于实时代码重载的插件 它的主要功能是在不重新启动应用程序的情况下 将修改后的Java代码实时应用到正在运行的应用程序中 从而加快开发周期 提高开发效率
  • SQL Server常用数据类型

    SQL Server常用数据类型 数据类型是数据的一种属性 是数据所表示信息的类型 下面是小编为大家搜索整理了关于SQLServer常用数据类型 欢迎参考阅读 希望对大家有所帮助 SQLServer2000提供了比较多的数据类型供用户使用
  • MySQL中删除重复数据只保留一条

    MySQL中删除重复数据只保留一条 数据 INSERT INTO test time uuid name VALUES 1 wang INSERT INTO test time uuid name VALUES 2 王 INSERT INT
  • Object与json字符串的相互转换

    Object与json字符串的相互转换 第一步 引入fastjson的依赖jar包 注 maven项目 直接在pom xml中进行配置即可 注 如果引入此版本的依赖 导致项目不能启动 报错 找不到启动类 那么可以换一个版本的fastjson
  • PyTorch 深度学习模型压缩开源库(含量化、剪枝、轻量化结构、BN融合)

    点击我爱计算机视觉标星 更快获取CVML新技术 本文为52CV群友666dzy666投稿 介绍了他最近开源的PyTorch模型压缩库 该库开源不到20天已经收获 219 颗星 是最近值得关注的模型压缩开源库 开源地址 https githu
  • FreeRTOS学习笔记 6 - 互斥量

    目录 1 创建 2 获取 3 释放 4 测试 FreeRTOS不支持调度方式的设置 所以下面2个宏定义可以随意设置值 define RTOS IPC FLAG FIFO 0x00 define RTOS IPC FLAG PRIO 0x01