问题描述系统上电启动后OLED 屏幕无法点亮保持全黑或者程序在启动阶段直接进入 HardFault 硬错误中断无法正常跳转到任务调度程序。在调试过程中发现原有的OLED_Init() 驱动中为了保证上电复位时序内部调用了 HAL_Delay() 或 vTaskDelay()。原因分析我在初始化的时候oled屏幕时候调用了vTaskDelay() 这个函数是 FreeRTOS 的 API其底层依赖于系统节拍SysTick和任务调度器。在执行 vTaskStartScheduler() 之前RTOS 内核尚未初始化任务列表为空调度器并未接管系统。此时调用任何 RTOS API 均属于非法操作。同时这个HAL_Delay()也不行HAL_Delay()通常在 SysTick 中断中调用。如果在内核启动前系统中断优先级配置未就绪或者 SysTick 还没被正确分配给 HAL 库HAL_Delay() 可能会导致死循环或直接跳过。解决方案在内核启动之前即 main 函数中 vTaskStartScheduler 之前的任何初始化代码我取消了调用任何系统 API调用vTaskDelay等。
记一次FreeRTOS的开发bug
问题描述系统上电启动后OLED 屏幕无法点亮保持全黑或者程序在启动阶段直接进入 HardFault 硬错误中断无法正常跳转到任务调度程序。在调试过程中发现原有的OLED_Init() 驱动中为了保证上电复位时序内部调用了 HAL_Delay() 或 vTaskDelay()。原因分析我在初始化的时候oled屏幕时候调用了vTaskDelay() 这个函数是 FreeRTOS 的 API其底层依赖于系统节拍SysTick和任务调度器。在执行 vTaskStartScheduler() 之前RTOS 内核尚未初始化任务列表为空调度器并未接管系统。此时调用任何 RTOS API 均属于非法操作。同时这个HAL_Delay()也不行HAL_Delay()通常在 SysTick 中断中调用。如果在内核启动前系统中断优先级配置未就绪或者 SysTick 还没被正确分配给 HAL 库HAL_Delay() 可能会导致死循环或直接跳过。解决方案在内核启动之前即 main 函数中 vTaskStartScheduler 之前的任何初始化代码我取消了调用任何系统 API调用vTaskDelay等。
相关文章
软件测试完整流程详解:从需求到上线全链路
很多测试新人只会单纯执行测试、提Bug,却不清楚完整的软件测试链路,导致工作碎片化、不懂前置准备、后置收尾,无法把控项目质量。本文拆解从需求立项到版本上线、迭代复盘的全流程,覆盖企业标准测试全链路,适配互联网、…
《多级标签并行筛选》一、Flex弹性布局使用指南
HarmonyOS ArkUI 弹性布局(Flex)从入门到实战完整指南 本文详细介绍 HarmonyOS ArkUI 中 Flex 弹性布局的使用方法,涵盖核心概念、属性配置、常见场景和完整示例代码,适合 HarmonyOS 开发者快速上手。 效果 一、前言 在 HarmonyO…
具身智能“大小脑”:过渡妥协还是终极架构?
具身智能“大小脑”:过渡妥协还是终极架构?去年春晚,一群机器人扭着秧歌登上舞台,动作整齐划一。但鲜有人知道,这些看似流畅的表演背后,藏着无数次“摔跤”和重来。一位英特尔专家直言,网上那些…
Sigmoid 函数(又称 S 型函数或 Logistic 函数)
Sigmoid 函数(又称 S 型函数或 Logistic 函数)是机器学习和深度学习中一种极其重要的激活函数。它的名称来源于其图像形状类似字母“S”。1. 函数定义与公式Sigmoid 函数的数学表达式为:σ(x)11e−xσ(x)1e−x1其中 ee 是自然对数的底数。该…
分布式消息投递:如何做到不丢不重?
分布式消息投递:如何做到不丢不重? 在分布式系统里,消息队列是标配,但随之而来的“消息丢了”和“消息重复消费”也是让后端开发最头疼的两个坑。 消息丢了,业务数据就不一致——用户下单了,库存没扣&#…
战略定了,如何让执行不掉链子?
“年初战略会开了三天,目标定得很清楚。到了年中一盘点,该推的项目卡住了,该达成的目标差了一大截。”这是很多企业的真实写照。战略执行为什么这么难?表面上看,原因无非是:目标不具体、上下不同调、跨部门…
从零开始Ansible入门:一个“遥控器“搞定100台服务器(小白也能看懂)
从零开始Ansible入门:一个"遥控器"搞定100台服务器(小白也能看懂) 前言 想象一下这个场景:你是一家公司的运维,手上有100台服务器,老板让你在每台机器上都装上Nginx。传统做法是什么?…
通过配置文件配置kernel
完全可以,而且这也是 Linux 内核开发者最常用的方法。 实际上,很少有人在 menuconfig 里面一个一个找选项。常用的方法有下面四种,我推荐第 2 或第 3 种。方法一:直接修改 .config(最简单) 例如:…
硬件选型干货:LD05-23B05R2 与钡特电源 AD05-23S05 电气参数全面拆解
硬件研发阶段开展 AC-DC 模块电源物料备选方案评估时,很多工程师会遇到现有物料供货周期波动、采购成本浮动等现实问题,在同规格直流电源模块备选物料筛选环节,钡特电源 AD05-23S05 和 LD05-23B05R2 两款隔离电源会进入大量工控项目的对比清单…
千问AI眼镜:阿里AI战略急先锋,能否在激烈竞争中突围?
千问眼镜:销量第一背后的挑战不久前,不少第三方统计机构给千问背书,甚至给出全国销量第一的统计结果。这个第一的含金量有多高?暂且先打个问号。但这些榜单至少说明,千问眼镜延续了阿里AI战略整体偏激进的风格…
Tomcat中X-Frame-Options配置实战:防御点击劫持的四种方法与最佳实践
1. 项目概述:为什么X-Frame-Options是Web安全的“防盗门”?最近在排查一个老项目的安全审计报告时,又被提到了“点击劫持”风险,矛头直指缺失的X-Frame-Options响应头。这已经不是第一次了,很多开发团队,尤…
10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南
10分钟AI语音克隆与实时变声:Retrieval-based-Voice-Conversion-WebUI完整指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrie…
Google AI Studio 300美元额度的真相与实战指南
1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…
PDF对比终极指南:用diff-pdf轻松识别文档差异的完整教程
PDF对比终极指南:用diff-pdf轻松识别文档差异的完整教程 【免费下载链接】diff-pdf A simple tool for visually comparing two PDF files 项目地址: https://gitcode.com/gh_mirrors/di/diff-pdf 还在为PDF文档的版本对比而烦恼吗?diff-pdf这款开…
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用
1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…
Zotero Duplicates Merger:5步彻底清理文献库重复条目
Zotero Duplicates Merger:5步彻底清理文献库重复条目 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 还在为文献库中堆积如山的重…
利用随机有限集理论对蜂群的ILQR和MPC控制研究附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…
为什么你的Gemini邮件CTE低于行业均值2.8倍?:从Prompt架构到发送时序的深度归因
更多请点击: https://intelliparadigm.com 第一章:为什么你的Gemini邮件CTE低于行业均值2.8倍?:从Prompt架构到发送时序的深度归因 Gemini邮件的客户转化效率(CTE)显著偏低,根本原因常被误判为…