网站建设制作网站建设知识

四川晟源达科技有限公司 2026/09/09 19:58:46

问题

选中代码,如果发送失败加延时会导致最外围的while(1)时序变化,外围的while是每100ms循环一次的,有什么好的解决办法

AI回答

你的担忧很合理:在 for 循环里加 osDelay(100) 进行重试,如果 send 失败,实际会导致整个 while(1) 的周期变长(比如本来 100ms,失败重试后可能变成 200ms+),影响主循环的时序和实时性。

解决思路如下:

异步重试/任务分离
不要在主循环里阻塞等待重试。可以把“待重试的数据包”放到一个专门的重试队列或标志里,主循环每次轮询时都检查并优先处理重试队列。这样主循环不会被单次 send 失败拖慢。

定时器/延迟标志
记录需要重试的数据包和下次重试的时间戳,每次 while(1) 时判断是否到达重试时间,到达则重试,否则跳过。这样不会阻塞主循环。

单独线程/任务
如果系统支持,可以把发送和重试逻辑放到单独的线程或任务里,主循环只负责分发数据,发送线程负责重试和延时。

非阻塞重试(推荐)
只做一次 send,失败后记录重试标志和时间,下次 while(1) 到时再尝试重发,不用 osDelay 阻塞。这样主循环时序不会受影响。

相关代码

// 多包独立非阻塞重试机制 static uint32_t retry_tick[20] = {0}; if(msg.vehicle_debug_period == 0) { uint32_t now_tick = osKernelGetTickCount(); // 先处理所有到达重试时间的包 for(int i=0; i<20; i++) { if(vds_ptr->data_len[i] >
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

网站建设网站阳网站建设

深度解析Rimraf:企业级文件清理架构的最佳实践【免费下载链接】rimrafA `rm -rf` util for nodejs项目地址: https://gitcod

2026/06/30 13:05:35

成都市网站建设云网站建设

各位30+的程序员兄弟,如果你最近也在深夜刷着招聘软件,看着“35岁以下”的岗位要求陷入沉默;如果你每天重复着CRUD工作,看着刚毕业的

2026/06/30 12:17:00

开县网站建设网站外链建设

Bodymovin插件技术实现深度解析【免费下载链接】bodymovin-extensionBodymovin UI extension panel项目地址: https://gitcode.com/

2026/06/30 11:45:27

河南网站建设咸阳网站建设

二维码修复神器:三步让损坏二维码重获新生!【免费下载链接】qrazyboxQR Code Analysis and Recovery Toolkit项目地址: https:

2026/06/30 13:49:07

昆山网站建设淮安网站建设

终极指南:如何让AI模型不再说"不" - Transformers拒绝指令移除技术详解【免费下载链接】remove-refusals-with-transformersI

2026/06/30 10:15:49

网站建设 深圳seo网站建设

使用Miniconda统一团队AI开发环境:确保实验结果可复现在人工智能项目中,你是否遇到过这样的场景?一名研究员提交了准确率提升3%的模型代码,

2026/06/30 13:01:04

鞍山网站建设潜江网站建设

一键启动LoRA训练!lora-scripts自动化流程深度解读(支持SD和LLaMA2)在生成式AI飞速发展的今天,越来越多开发者希望基于St

2026/06/30 10:50:52

免费网站建设宿迁网站建设

如何彻底解决Obsidian PDF导出的中文排版缩进问题【免费下载链接】obsidian-better-export-pdfObsidian PDF export enhancement plugi

2026/06/30 13:38:36