卡在结构体数组寻址

[复制链接]
822|18
 楼主| zhaoxqi 发表于 2022-8-5 22:13 | 显示全部楼层 |阅读模式
调试发现单片机对于结构体数组计算的时候执行速度超级慢,会卡在结构体数组寻址那里,导致我的中断进不了,lin信号丢失。
supernan 发表于 2022-8-5 22:16 | 显示全部楼层

楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因
 楼主| zhaoxqi 发表于 2022-8-5 22:18 | 显示全部楼层
结构体定义如下:
typedef struct boot_checksum_single_monitor_ccb
{
   U8 state;   
   U16 checksum;               
   U16 address;                  
} BOOT_CHECKSUM_SINGLE_MONITOR_CCB;
结构体数组声明如下:
static BOOT_CHECKSUM_SINGLE_MONITOR_CCB chk_monit_ccb[BOOT_CHECKSUM_NUM_BLOCKS];

通常卡在类似下面的语句,执行时间超长:

if(checksumState == chk_monit_ccb.state)

请问这种的怎么重构代码?
jiaxw 发表于 2022-8-5 22:20 | 显示全部楼层
觉得你定义了结构体数组chk_monit_ccb[BOOT_CHECKSUM_NUM_BLOCKS]。 为何这里却不是了呐 chk_monit_ccb.state
午夜粪车 发表于 2022-8-5 22:22 | 显示全部楼层
你可以看下反汇编代码,看下哪里代码长了,执行慢了
 楼主| zhaoxqi 发表于 2022-8-5 22:24 | 显示全部楼层
抱歉,应该是chk_monit_ccb[i].state. 写错了。
chuxh 发表于 2022-8-5 22:27 | 显示全部楼层
这样搞一下:

u8 temp;
temp=  chk_monit_ccb[i].state;
if(checksumState == temp)
 楼主| zhaoxqi 发表于 2022-8-5 22:29 | 显示全部楼层
最主要的原因还是单片机对于复杂的结构体解析的问题
tian111 发表于 2022-8-5 22:31 | 显示全部楼层
我打算把结构体拆解,不用结构体,用单个全局变量代替了
dengdc 发表于 2022-8-5 22:35 | 显示全部楼层
结构体有助于编程人员理解和使用,在代码中适当用指针或者临时变量帮助单片机简化解析问题是合适的。
dengdc 发表于 2022-8-5 22:37 | 显示全部楼层
从一大堆变量到结构体使用,再到回到一大堆变量,再回到结构体,如此反复又不断改进使用方法,是我的历程
juventus9554 发表于 2022-8-5 22:41 | 显示全部楼层
可不可以换一种表现形式
chenjunt 发表于 2022-8-5 22:42 | 显示全部楼层
单片机的结构真的好复杂
zhenykun 发表于 2022-8-5 22:44 | 显示全部楼层
感觉结构体不太适用于单片机 太占空间了
wyjie 发表于 2022-8-5 22:46 | 显示全部楼层
尽量使用局部变量来取代全局变量
llljh 发表于 2022-8-5 22:48 | 显示全部楼层
总之就是想让程序更快的执行  同时尽可能占用更小的资源
dingy 发表于 2022-8-5 22:51 | 显示全部楼层
换一种方法
zwll 发表于 2022-8-5 22:55 | 显示全部楼层

嗯,我再好好缕一缕吧,有了好消息及时通知大家
lium 发表于 2022-8-6 10:53 | 显示全部楼层
哦,原来如此
您需要登录后才可以回帖 登录 | 注册

本版积分规则

808

主题

10636

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部