随笔 - 7  文章 - 0 评论 - 0 阅读 - 105
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

13-1 定时器的理论介绍

  • Tick中断调用timer函数的回调函数--Linux
  • 在某个任务中执行--RTOS
  • 把任务写入队列通知守护任务,队列要是满了需要等待
  • 定时器的超时函数在守护任务中执行

13-2 定时器的一般使用

  • 启动定时器实际上是把任务发给队列
  • 守护任务的优先级更高会切换到守护任务,看串口打印被打断可知
  • 任务的优先级其实不能取到最大值
  • 定时器函数的优先级过低会被抢占

13-3 使用定时器消除抖动

  • 给中断增加延时处理,如果不满足延时时间,就不会判定为按键按下

14 中断管理

  • 更正,不能在中断里使用xTimerReset()
  • 带FromISR的函数他不会发起调度,会唤醒任务但不会引起调度,会在变量BaseType_t self_HigherPriorityTaskWoken里边记住是否需要调度
  • portYIELD_FROM_ISR()触发调度,但是不是即刻引起调度

15_资源管理

  • 可以通过函数去屏蔽别的中断或者任务
  • 任务和任务之间可以屏蔽任务调度器
  • 优先级最高的三个中断不可以屏蔽
  • 八位寄存器管理中断优先级
  • 使能和恢复是不同的
    • 使能:是开启
    • 恢复:原本什么样变成什么样,开启变开启,禁止变禁止

16-1_调试

  • 判断栈溢出方法
    • 使用TCB结构体的栈标记判断并不准确,要切换任务才会把实际的栈位置存入结构体,因此这个只是一种判断栈溢出的方法,但是高效
    • 方法2:最后16个字节不是0xA5就认为栈溢出,更准确

16-2_统计任务信息的原理

  • 栈的使用情况

    • 水位越大表明空闲的栈太大了,说明分配的栈太大了
    • count会记录0xA5的字节数
    • 一般保证每个水位有几十字节就可以了
  • 每个任务的CPU运行时间

    • 主要问题是时间记录的准不准?

    • Tick中断是1ms一次,会导致记录不准

    • 引入更快的时间周期/定时器

      • 时间记录要一个任务运行count和总的时间timer
    • 任务进入和离开都会记录一个总的任务运行的时间

    • uxTaskGetSystemState:获得任务的统计信息

      UBaseType_t uxTaskGetSystemState( TaskStatus_t * const pxTaskStatusArray,
                                              const UBaseType_t uxArraySize,
                                              uint32_t * const pulTotalRunTime );
      
      参数 描述
      pxTaskStatusArray 指向一个TaskStatus_t结构体数组,用来保存任务的统计信息。
      有多少个任务?可以用uxTaskGetNumberOfTasks()来获得。
      uxArraySize 数组大小、数组项个数,必须大于或等于uxTaskGetNumberOfTasks()
      pulTotalRunTime 用来保存当前总的运行时间(更快的定时器),可以传入NULL
      返回值 传入的pxTaskStatusArray数组,被设置了几个数组项。
      注意:如果传入的uxArraySize小于uxTaskGetNumberOfTasks(),返回值就是0
    • vTaskList :获得任务的统计信息,形式为可读的字符串。注意,pcWriteBuffer必须足够大。

      void vTaskList( signed char *pcWriteBuffer );
      
    • vTaskGetRunTimeStats:获得任务的运行信息,形式为可读的字符串。注意,pcWriteBuffer必须足够大

      void vTaskGetRunTimeStats( signed char *pcWriteBuffer )
      

16-3_编写程序获取统计信息

  • 多看需要
posted on   明图  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示