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

wordpress如何分版上海优化公司选哪个

wordpress如何分版,上海优化公司选哪个,网站建设公司推来客网站系统怎么样,网站建设好么一、前言与问题 在基于 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/316260.html

    相关文章:

  1. 网站检测器宁波seo推广优化公司
  2. 做网站用香港哪个机房头条今日头条新闻头条
  3. 网站建设问答网盘搜索引擎入口
  4. 做网站的策划需要做什么厦门网站建设平台
  5. 体育网站建设站优云网络公司
  6. 网站建设费用会计科目十八未成年禁用免费app
  7. 我想建个赌博网站怎么建域名百度推广官方电话
  8. 视觉传达设计培训机构有哪些优化百度seo
  9. 营销型网站建设好不好做小程序的公司
  10. 网站网页设计是什么网络公司网站
  11. 网站服务器基本要素哈尔滨seo服务
  12. wordpress 数据库中的表seo优化包括哪些内容
  13. 网站建设制作开发 小程序开发定制 软件系统开发搜索引擎优化的要点
  14. 免费域名做私服网站济南seo网络优化公司
  15. 网站怎么做才能让更多平台展现室内设计培训班学费一般多少
  16. 望野草莓常用seo站长工具
  17. 淘宝客网站哪里可以做seo赚钱方式
  18. 渭南中学校园网站建设工作汇报关键词完整版
  19. 循化网站建设公司百度识图以图搜图
  20. 怎样做网站建设的程序安卓aso关键词优化
  21. 现在c 做网站用什么框架网络营销ppt
  22. 满洲里做网站新榜数据平台
  23. 网站建设shebei新媒体seo培训
  24. 网站建设网站建设哪里有长治seo顾问
  25. 如何测试自己做的网站网站seo 优化
  26. 软件技术ui设计专业怎么样荆州seo推广
  27. 泸州网站建设青岛百度seo代理
  28. 如何将百度收录网站seo概念
  29. 外贸网站建设如何做呢营销策划方案案例
  30. 网站被收录bt蚂蚁磁力