师兄,怎么有几个Task不跑了?

原创 嵌入式软件实战派 2023-08-27 10:15
前不久,妹子找到我,说她负责的那个项目有两个Task不跑了,而且很着急的样子……
我问了一圈才知道是客户发现的问题,某些功能不起作用,反馈回到项目这边。项目经理也是一脸懵逼,上一个版本还好好的,这个版本功能就不行了,功能不起作用对客户来说是挺严重的。然后,客户催着紧,妹子排查了很久,最终是发现是几个task不运行了,奇怪的很,一时间她也不知道根本原因。在项目经理的“淫威”下,她只好急匆匆地找我支援。
妹子找我,肯定是有求必应的。话说回来,我也好奇得很,于是先安抚下她脆弱的小心灵,说,“淡定不要慌,这种100%能复现出来的问题好搞”。
她看了一眼故作淡定的我,放心了很多。
我心想,这种问题虽然奇怪,也许并不复杂,按妹子目前的水平,应该很快能定位到原因的啊。
她说,这个问题原来是另外一个做应用的同事负责排查的,找不到原因,搞了几个delay好像又变好点,怀疑是不是时序哪里出了问题,然而一直没找到原因。那边听说,项目经理充大头,给客户立了军令状,说三天可以解决,这已经过了两天了啥都没搞出来,急了,找到妹子了,说妹子是这个项目负责系统这方面的,要她出马。
妹子听了另外那个同事“胡说”,排查了半天时序,一无所获,最后换思路,仿真看到程序运行一段时间后,有两个Task不跑了。
本来,她自己可以继续分析下去的。但是,要到点下班了,她旁边的项目经理,一直在催“搞定了吗”,“还要多久”,“要不要找其他人支持下”……
碰巧我经过,然后顺便问了下我(其实希望我支持下她)。
接着,我在她座位电脑上,看着仿真,确认了问题,确实是有两个Task的循环得不到运行时间片,Idle Task也是这样。因为其他几个Task是能运行的,可以排除程序挂死的情况。
我最不喜欢有人在后面看着我找bug了,特别是还唠唠叨叨的那种。于是我编个理由将项目经理支开了,说麻烦他点个外卖,表现要出决战到天亮的样子。当然,把妹子留着我身边——“并肩作战”!
有妹子在旁边,我越战越勇,看代码越看越精神,有条不紊地,我将所有Task的运行情况做了个汇总。
当然,为了教妹子一些调试方法,都是从最简单最基本的操作开始,给每个Task设个断点,反反复复地尝试。
Task
运行是否正常
Task1

Task2
...
Task6不运行
Task7
查了下配置,发现Task6和Task7的优先级是比较低的两个。
那么,可以猜测出,肯定是有个Task运行没释放时间片,但是啥应用有这么忙碌?
但是,我看了一遍,配置的task都有个OS的delay或者系统调度函数释放时间片的,不至于霸占时间片不放。
于是,跟妹子又重新逐个Task分析了下
Task
优先级
运行是否正常
Task1
5

Task25
Task34
Task44运行
Task53
运行?
Task6
2
Task71
IDLE-1
其中Task5有点怪,虽然状态是Running的,但似乎也不运行。
看到这个,妹子问,是不是Task5出问题了?这个Task功能好多,要怎么排查呢?
我看了看电脑右下角的时间,是晚上八点多了……
我说,我们先吃饭吧,可能很快就定位到了。
我看得出来,妹子心里没底,好像吃饭的胃口都没有,就随便吃了点。
看着她心事重重的样子,恰恰又印证了她的责任心比较强。于是,我安慰她,肯定是Task5出问题了,而且我猜是Task5没释放资源……
“呃?……”妹子的语气透露出她的好奇,还带着一点不可置信。
“我有方法,一会调试给你看……”。然后妹子又多吃了两口饭。
“不要着急”,我笑着跟她说,然后她也笑了。
还是妹子笑着的时候好看……
接着,我就在Task5的地方设置断点,一遍一遍反复看,妹子也不厌其烦一遍一遍跟我一起看。甚至,我在想,就这样一直看下去……
最终,有一次Task5运行后,后面再也不回来了……之前在Task5的while(1)循环里面的前面部分,设置了一个断点。诡异地发现,后面它不运行了,但查看其Task状态是running的。
至于查看Task状态这个,我教妹子翻了OS很多内核的内容,她总是夸我太厉害了,这么深的内容都能翻出来。
看着她一脸崇拜的样子,像个小迷妹一样,似乎我心里有一丝丝成就感。
回到正题,我问妹子,从目前的的分析看,你能推测这个问题原因吗?
“Task5在while循环定位不了了,但状态是running的,应该是Task5运行着跳出去循环了吧……”她有条不紊地推理着,完全没有了之前的慌张了,也忘记时间了,很投入地分析这个问题。
“我也是这么想的。”我给了她一个肯定。
但答案还是需要分析证据的。接下来,我们配合着仿真分析代码。
于是,我又问,“你觉得Task5是如何退出循环的?”
“break或者return?goto也有可能……”
“接下来,我们一起找一找吧。”
于是,我们逐行分析Task5里面的代码,看着这堆乱七八糟的像“屎山”一样的代码,有点想吐槽,碍于妹子在旁边,我忍住了。
“哇,谁写的代码,这么乱,像……”妹子有点没忍住。
“像‘屎山’……”
“哈哈哈……”
最终,我找到了一个宏函数。
长这样的,十分可疑:
#define CHECK_FUNCTION_CFG()  do{\                                 if(get_func_cfg()){\                                     func_run = true;\                                 }else{\                                     func_run = false;\                                     return;\                                 }\                               }whle(0)
“哦……就这个return咯”,妹子有点迫不及待了,脸上洋溢着兴奋。
“嗯,应该就是它了。”
void Task5(void){    // balabala...    while(1)    {        //balabala...        CHECK_FUNCTION_CFG();        //balabala...    }}
“是哪个家伙写的代码呢?”我好奇地问。
“是陈工做的。前段时间客户提了个需求,产品经理就说价格配置是来判断,觉得很简单,下个版本就可以搞定。”
“哦……老板说陈工是身经百战的人,不至于啊,算了不管了”其实我也懒得追究这些人这些事了。
于是,我想考考妹子,“你知道为什么Task5跳出循环后,Task6/Task7和IDLE就不运行了吗?”
“因为Task5占用的时间片还没释放,所以,优先级比它低的Task,即Task6/Task7和IDLE获取不到运行时间片,所以无法运行。”她反应还挺快的。
“那么,为什么Task1等却可以运行呢?”
“因为他们的优先级比较高……”她若有所思,但又不十分肯定地说。
“对的,是优先级比较高,但是你知道为什么优先级高就可以运行呢?”其实我想考察她对内核的调度熟不熟悉。
她思考片刻,说,“因为高优先级的Task从等待状态到就绪状态,如果没有比它优先级高的Task在运行,它就会强占时间片运行……”
然后巴拉巴拉,她继续说了很多,表达虽然有些生硬,但算是理解这个OS的状态切换原理了。
接着,我毫不保留地夸了她一番,她还有些害羞,低着头微笑着。
原来,她害羞的样子也很好看……
“那你打算怎么向项目经理或者客户解释这个问题呢?或者有其他人问你这个根本原因,你打算怎么解释?”除了要教她技术上的内容,我还关注她如何总结表达一个技术问题。
这次,她在我面前犹豫了,因为之前汇报问题吃过亏……
我就给她举了个例子,用我灵魂画手画了几只小狗,然后解释道:
有7只小狗狗在吃饭,但是只有一个饭盘,大家轮流吃。但是,其中有一只黄头狗5,喜欢胡思乱想,有一次轮到它吃东西了,它就摁着盘子不放,睡着了做着白日梦……
比它小的两只小狗6和小狗7,饿着嗷嗷叫,却不敢抢,因为他们两个比较小,抢不过黄头狗5.
而小狗1/2/3/4,因为比黄头狗5大,饿了直接过去抢着吃。
……

“哈哈哈……很形象哦,师兄真厉害,举例子都这么生动……”
“嘿嘿嘿……”
不知不觉,已经是深夜十一点多了……发现办公室里的小伙伴都回去了,可恨的是,项目经理也回去!
偌大的办公室,刹那间变得很安静,就剩下了我们俩,还有说有笑……
“师兄,我知道问题了,也知道怎么改了。”她打破了平静。
“很晚了,明天再改吧……‘调查研究就像十月怀胎,决策就像一朝分娩’”
“哈哈,这句话精辟,师兄你好有文化哦。”
“嘿嘿,这是毛主席说的……”
说笑后,办公室又瞬间变得安静起来,略显尴尬。
不知是否因为办公室过于安静,我隐约听到她的肚子咕咕叫……
“听到你讲小狗吃饭的例子,突然肚子有点饿了。”她马上化解了尴尬,“要不,我们去宵夜吧……”
“呃……嗯……好吧!”我有点不相信,她居然主动约我去宵夜!“那你先给项目经理简单发个邮件,说项目问题定位出来了。免得他半夜打电话骚扰你……”我接着不慌不忙地跟她吩咐道。
“还是你细心……”她似乎在夸我。我都有点不好意思了。
……
于是,在暗黄的路灯下,两个加班狗就这样慢慢地消失在朦胧的夜色中……
关注公众号“嵌入式软件实战派”,获得更多关于我和妹子RTOS的故事。



嵌入式软件实战派 专注嵌入式软件开发领域知识传授,包括C语言精粹,RTOS原理与使用,MCU驱动开发,AUTOSAR搭建,软件架构方法设计等。
评论
  • 在2024年的科技征程中,具身智能的发展已成为全球关注的焦点。从实验室到现实应用,这一领域正以前所未有的速度推进,改写着人类与机器的互动边界。这一年,我们见证了具身智能技术的突破与变革,它不仅落地各行各业,带来新的机遇,更在深刻影响着我们的生活方式和思维方式。随着相关技术的飞速发展,具身智能不再仅仅是一个技术概念,更像是一把神奇的钥匙。身后的众多行业,无论愿意与否,都像是被卷入一场伟大变革浪潮中的船只,注定要被这股汹涌的力量重塑航向。01为什么是具身智能?为什么在中国?最近,中国具身智能行业的进
    艾迈斯欧司朗 2025-02-28 15:45 221浏览
  • 振动样品磁强计是一种用于测量材料磁性的精密仪器,广泛应用于科研、工业检测等领域。然而,其测量准确度会受到多种因素的影响,下面我们将逐一分析这些因素。一、温度因素温度是影响振动样品磁强计测量准确度的重要因素之一。随着温度的变化,材料的磁性也会发生变化,从而影响测量结果的准确性。因此,在进行磁性测量时,应确保恒温环境,以减少温度波动对测量结果的影响。二、样品制备样品的制备过程同样会影响振动样品磁强计的测量准确度。样品的形状、尺寸和表面处理等因素都会对测量结果产生影响。为了确保测量准确度,应严格按照规
    锦正茂科技 2025-02-28 14:05 134浏览
  • 在物联网领域中,无线射频技术作为设备间通信的核心手段,已深度渗透工业自动化、智慧城市及智能家居等多元场景。然而,随着物联网设备接入规模的不断扩大,如何降低运维成本,提升通信数据的传输速度和响应时间,实现更广泛、更稳定的覆盖已成为当前亟待解决的系统性难题。SoC无线收发模块-RFM25A12在此背景下,华普微创新推出了一款高性能、远距离与高性价比的Sub-GHz无线SoC收发模块RFM25A12,旨在提升射频性能以满足行业中日益增长与复杂的设备互联需求。值得一提的是,RFM25A12还支持Wi-S
    华普微HOPERF 2025-02-28 09:06 143浏览
  • 1,微软下载免费Visual Studio Code2,安装C/C++插件,如果无法直接点击下载, 可以选择手动install from VSIX:ms-vscode.cpptools-1.23.6@win32-x64.vsix3,安装C/C++编译器MniGW (MinGW在 Windows 环境下提供类似于 Unix/Linux 环境下的开发工具,使开发者能够轻松地在 Windows 上编写和编译 C、C++ 等程序.)4,C/C++插件扩展设置中添加Include Path 5,
    黎查 2025-02-28 14:39 140浏览
  • Matter 协议,原名 CHIP(Connected Home over IP),是由苹果、谷歌、亚马逊和三星等科技巨头联合ZigBee联盟(现连接标准联盟CSA)共同推出的一套基于IP协议的智能家居连接标准,旨在打破智能家居设备之间的 “语言障碍”,实现真正的互联互通。然而,目标与现实之间总有落差,前期阶段的Matter 协议由于设备支持类型有限、设备生态协同滞后以及设备通信协议割裂等原因,并未能彻底消除智能家居中的“设备孤岛”现象,但随着2025年的到来,这些现象都将得到完美的解决。近期,
    华普微HOPERF 2025-02-27 10:32 212浏览
  • 一、VSM的基本原理震动样品磁强计(Vibrating Sample Magnetometer,简称VSM)是一种灵敏且高效的磁性测量仪器。其基本工作原理是利用震动样品在探测线圈中引起的变化磁场来产生感应电压,这个感应电压与样品的磁矩成正比。因此,通过测量这个感应电压,我们就能够精确地确定样品的磁矩。在VSM中,被测量的样品通常被固定在一个震动头上,并以一定的频率和振幅震动。这种震动在探测线圈中引起了变化的磁通量,从而产生了一个交流电信号。这个信号的幅度和样品的磁矩有着直接的关系。因此,通过仔细
    锦正茂科技 2025-02-28 13:30 100浏览
  •           近日受某专业机构邀请,参加了官方举办的《广东省科技创新条例》宣讲会。在与会之前,作为一名技术工作者一直认为技术的法例都是保密和侵权方面的,而潜意识中感觉法律有束缚创新工作的进行可能。通过一个上午学习新法,对广东省的科技创新有了新的认识。广东是改革的前沿阵地,是科技创新的沃土,企业是创新的主要个体。《广东省科技创新条例》是广东省为促进科技创新、推动高质量发展而制定的地方性法规,主要内容包括: 总则:明确立法目
    广州铁金刚 2025-02-28 10:14 103浏览
  • 更多生命体征指标风靡的背后都只有一个原因:更多人将健康排在人生第一顺位!“AGEs,也就是晚期糖基化终末产物,英文名Advanced Glycation End-products,是存在于我们体内的一种代谢产物” 艾迈斯欧司朗亚太区健康监测高级市场经理王亚琴说道,“相信业内的朋友都会有关注,最近该指标的热度很高,它可以用来评估人的生活方式是否健康。”据悉,AGEs是可穿戴健康监测领域的一个“萌新”指标,近来备受关注。如果站在学术角度来理解它,那么AGEs是在非酶促条件下,蛋白质、氨基酸
    艾迈斯欧司朗 2025-02-27 14:50 400浏览
  • RGB灯光无法同步?细致的动态光效设定反而成为产品客诉来源!随着科技的进步和消费者需求变化,电脑接口设备单一功能性已无法满足市场需求,因此在产品上增加「动态光效」的形式便应运而生,藉此吸引消费者目光。这种RGB灯光效果,不仅能增强电脑周边产品的视觉吸引力,还能为用户提供个性化的体验,展现独特自我风格。如今,笔记本电脑、键盘、鼠标、鼠标垫、耳机、显示器等多种电脑接口设备多数已配备动态光效。这些设备的灯光效果会随着音乐节奏、游戏情节或使用者的设置而变化。想象一个画面,当一名游戏玩家,按下电源开关,整
    百佳泰测试实验室 2025-02-27 14:15 137浏览
  •         近日,广电计量在聚焦离子束(FIB)领域编写的专业著作《聚焦离子束:失效分析》正式出版,填补了国内聚焦离子束领域实践性专业书籍的空白,为该领域的技术发展与知识传播提供了重要助力。         随着芯片技术不断发展,芯片的集成度越来越高,结构也日益复杂。这使得传统的失效分析方法面临巨大挑战。FIB技术的出现,为芯片失效分析带来了新的解决方案。它能够在纳米尺度上对芯片进行精确加工和分析。当芯
    广电计量 2025-02-28 09:15 116浏览
  • 美国加州CEC能效跟DOE能效有什么区别?CEC/DOE是什么关系?美国加州CEC能效跟DOE能效有什么区别?CEC/DOE是什么关系?‌美国加州CEC能效认证与美国DOE能效认证在多个方面存在显著差异‌。认证范围和适用地区‌CEC能效认证‌:仅适用于在加利福尼亚州销售的电器产品。CEC认证的范围包括制冷设备、房间空调、中央空调、便携式空调、加热器、热水器、游泳池加热器、卫浴配件、光源、应急灯具、交通信号模块、灯具、洗碗机、洗衣机、干衣机、烹饪器具、电机和压缩机、变压器、外置电源、消费类电子设备
    张工nx808593 2025-02-27 18:04 120浏览
  • 应用趋势与客户需求,AI PC的未来展望随着人工智能(AI)技术的日益成熟,AI PC(人工智能个人电脑)逐渐成为消费者和企业工作中的重要工具。这类产品集成了最新的AI处理器,如NPU、CPU和GPU,并具备许多智能化功能,为用户带来更高效且直观的操作体验。AI PC的目标是提升工作和日常生活的效率,通过深度学习与自然语言处理等技术,实现更流畅的多任务处理、实时翻译、语音助手、图像生成等功能,满足现代用户对生产力和娱乐的双重需求。随着各行各业对数字转型需求的增长,AI PC也开始在各个领域中显示
    百佳泰测试实验室 2025-02-27 14:08 252浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦