zoukankan      html  css  js  c++  java
  • freeRTOS中文实用教程3--中断管理之计数信号量

    1.前言

     在中断不频繁的系统中,使用二值信号量没有问题,但是中断频繁发生时,则会有中断丢失的问题。

    因为中断发生时延迟任务执行,延迟任务执行的过程中,如果又来了两次中断,则只会处理第一次,第二次将会丢失。

    为此引入多值信号量来处理这个问题。

    2.二值信号量和多值信号量的原理图

    二值信号量的处理过程如下图所示:

    多值信号量的原理图:

    3.计数信号量的典型用法

    3.1 事件计数

    事件发生时信号量计数值加1,延迟处理任务每处理一个任务信号量计数值减1,信号量的计数值是已发生的事件数与已处理的事件数之间的差值。

    用于事件计数的信号量初始值为0.

    3.2 资源管理

    信号量的计数值表示可用资源的数目。

    要使用资源,必须先获取信号量,使信号量计数值减1;

    任务完成则释放信号量,将信号量计数值加1;

    信号量计数值为0表示没有可用资源;

    用于资源管理的信号量,创建时计数值被初始化为可用资源总数。

    4.主要API 

    API 说明 参数及返回值
    xSemaphoreCreateCounting()
    创建计数信号量,FreeRTOS 中所有种类的信号量句柄都由声明为 xSemaphoreHandle 类型的变量
    保存。

    uxMaxCount 最大计数值

    uxInitialCount 信号量的初始计数值


    返回值 如果返回 NULL 值,表示堆上内存空间不足,所以 FreeRTOS 无法
    为信号量结构分配内存导致信号量创建失败。第五章有提供更多的
    内存管理方面的信息。
    如果返回非 NULL 值,则表示信号量创建成功。此值应当被保存起
    来作为这个的信号量的句柄。

  • 相关阅读:
    Poj3678:Katu Puzzle
    2-SAT
    Bzoj3238: [Ahoi2013]差异
    expressJS
    expressJS
    expressJS
    [转]View属性 之 paddingStart & paddingEnd
    在Activity之间使用Intent传值和Bundle传值的区别和方式
    [转]Java初始化顺序总结
    final关键字修饰的变量
  • 原文地址:https://www.cnblogs.com/smartjourneys/p/7838176.html
Copyright © 2011-2022 走看看