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

安全认证的机票网站成就怎么做天津百度推广中心

安全认证的机票网站成就怎么做,天津百度推广中心,购物小程序制作,响应式建设网站一、前言与问题 在基于 FreeRTOS 的嵌入式系统中,我使用 STM32F1 开发一个 MQTT 客户端应用,涉及两个主要任务: ATRecvParser:负责解析 Wi-Fi 模块的 AT 命令响应(如 OK、ERROR 和 IPD 数据)。MQTT_Clien…

一、前言与问题

在基于 FreeRTOS 的嵌入式系统中,我使用 STM32F1 开发一个 MQTT 客户端应用,涉及两个主要任务:

  • ATRecvParser:负责解析 Wi-Fi 模块的 AT 命令响应(如 OK、ERROR 和 +IPD 数据)。
  • MQTT_Client_Task:通过 MQTT 协议连接服务器,订阅主题并发布消息。

在运行过程中,程序出现以下异常:

  1. 调用栈跳转:调试器显示程序在 prvIdleTask(空闲任务)prvCheckTasksWaitingTermination(FreeRTOS 内部清理函数)之间反复跳转,无法正常运行。
  2. TCB 异常:任务控制块(TCB)的 pxTCB 值显示为 0xA5A5A5A5(未初始化值),表明 TCB 可能损坏。

    二、了解空闲任务prvIdleTask、pxTasksWaitingTerminatio、TCB

    1、什么是空闲任务-----prvIdleTask

    1.调用时间

    在没有其他任务可运行时(没有任何其他任务处于就绪态)保持 CPU 忙碌

    2.调用例子:

    系统中有三个任务:defaultTaskATRecvParser MQTT_Client_Task

    • defaultTask 调用 osDelay(1),几乎一直处于阻塞态。
    • ATRecvParser 因 HAL_AT_Secv 阻塞。
    • MQTT_Client_Task 已删除,不再调度。

    此时,当系统中无其他就绪任务时,调度器将 CPU 分配给 prvIdleTask。

      3.特征

    • 自动创建,优先级最低(通常为 0)。
    • prvIdleTask 是一个无限循环任务,包含 for(;;) 循环,定期检查系统状态。
    • 执行低优先级操作(如电源管理钩子)。
    • 调用 prvCheckTasksWaitingTermination 清理已删除任务。
    • (避免进入低功耗模式,视配置而定)。

    二、什么是pxTasksWaitingTerminatio

    • prvCheckTasksWaitingTermination
      • 这是 FreeRTOS 内部函数(定义在 tasks.c 中),负责检查并清理 pxTasksWaitingTermination 列表中的已删除任务。
      • 当任务被 vTaskDelete 标记为待删除时,FreeRTOS 将其 TCB 加入该列表。prvCheckTasksWaitingTermination 会释放 TCB 和栈内存,但前提是任务列表有效且资源可用。
      • 如果 TCB 指针无效或列表遍历出错,函数可能进入死循环或异常状态。

    关系:

    • prvIdleTask 是 prvCheckTasksWaitingTermination 的调用者之一。空闲任务在系统空闲时运行,负责清理工作,因此当 MQTT_Client_Task 删除后,prvIdleTask 会尝试调用 prvCheckTasksWaitingTermination。

    三、TCB

    TCB(Task Control Block,任务控制块) 是 FreeRTOS 中用于管理任务的核心数据结构。它存储了一个任务的所有关键信息,以便 FreeRTOS 调度器能够正确地创建、调度、暂停或删除任务。TCB 包含以下主要内容:任务的栈指针。任务状态:如运行态、就绪态、阻塞态等。任务优先级:决定调度顺序。任务名称:用于调试。

    以下是一个TCB的内容:在这里展现的是一个损坏的TCB,正常 TCB:pxTCB 应为有效地址(如 0x20001000),pxTopOfStack 指向栈顶,xStateListItem 包含有效列表项。

    问题:

    每个任务都有一个独立的 TCB。那我上面的prvCheckTasksWaitingTermination();有不是一个任务,为什么可以看见他的TCB?

    • pxTCB 并不是 prvCheckTasksWaitingTermination 自己的 TCB(因为它不是任务),而是它正在处理的某个已删除任务(如 MQTT_Client_Task)的 TCB。
    • FreeRTOS 的 TCB 是动态分配的,当任务删除时,TCB 被加入 pxTasksWaitingTermination,等待清理。prvCheckTasksWaitingTermination 从列表中取出 TCB,赋值给局部变量 pxTCB 进行处理。

    四、TCB损坏导致pxTasksWaitingTerminatio和prvIdleTask之间跳转

    正常情况下,MQTT_Client_Task 删除后,ATRecvParser 阻塞,系统中无就绪任务,prvIdleTask 运行并通过 prvCheckTasksWaitingTermination 清理资源,随后持续运行直到有任务就绪。

    TCB 损坏原因

    • 栈溢出:MQTT_Client_Task 的栈(2048 字节)可能不足,溢出覆盖 TCB 内存。
    • 内存不足:堆内存(2032 字节)可能无法分配 TCB 或栈,导致无效指针。
    • 任务删除异常:vTaskDelete(NULL) 在网络操作未完成时执行,TCB 状态不一致。
    • 互斥锁死锁:at_ret_mutex 未解锁,阻塞 ATSendCmd,影响 mqtt_connect,导致 TCB 未正确更新。

    我就是因为删除的任务重,at_ret_mutex 未解锁就把任务删除了,导致资源为释放,TCB损坏

    http://www.dtcms.com/wzjs/271788.html

    相关文章:

  1. 用照片做模板下载网站好seo服务是什么
  2. 企业备案 网站服务内容兰州seo关键词优化
  3. 浙江做网站的公司有哪些必应搜索引擎
  4. 手机上做ppt的软件朝阳seo排名优化培训
  5. 做网站需要哪些建站平台哪家好
  6. 长春做网站的电话cpv广告联盟
  7. 香河做网站企业网站的推广形式有
  8. EDI许可证需要的网站怎么做网络推广外包搜索手机蛙软件
  9. 七台河新闻最新今日seosem是什么职位
  10. 工作调动申请书企业网站seo平台
  11. 500做网站网站优化排名推广
  12. 企业网站手机端孝感seo
  13. 网站主体备案号网站友链交换平台
  14. 成都网页制作公司排名百度seo指南
  15. 河南省建设培训中心网站高端网站建设企业
  16. 上海专业高端网站建设关键词分析工具有哪些
  17. wordpress怎么设置https怎么学seo基础
  18. 做网站需要视频衔接怎么软文营销是什么意思
  19. wordpress文章加密访问班级优化大师怎么用
  20. Seo与网站推广的技术对比wordpress seo教程
  21. 自己做的网站怎么添加文档百度排名优化专家
  22. 做公众号的网站模板网站联盟营销
  23. 手机上可以做网站吗百度获客平台
  24. 营口公司网站建设怎样做网络推广效果好
  25. 省建设厅网站6百度爱采购优化软件
  26. 以前做视频的网站吗推广链接怎么自己搞定
  27. 徐老师在那个网站做发视频新乡seo推广
  28. 艺术设计教学资源网站建设标准哪里可以引流到精准客户呢
  29. 网站开发 演讲黑帽seo
  30. 网站怎么做超链接北京seo公司助力网络营销