卡在结构体数组寻址

[复制链接]
168|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 | 显示全部楼层
哦,原来如此

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则