[PIC®/AVR®/dsPIC®产品] PIC16F 单片机计算复杂结构体数组卡导致不能及时进入Lin中...

[复制链接]
4213|13
 楼主| 箫声欲碎 发表于 2020-12-23 14:50 | 显示全部楼层 |阅读模式
调试发现单片机对于结构体数组计算的时候执行速度超级慢,会卡在结构体数组寻址那里,导致我的中断进不了,lin信号丢失。

结构体定义如下:
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)

请问这种的怎么重构代码?
lcczg 发表于 2020-12-23 16:37 | 显示全部楼层
觉得你定义了结构体数组chk_monit_ccb[BOOT_CHECKSUM_NUM_BLOCKS]。 为何这里却不是了呐 chk_monit_ccb.state

评论

@箫声欲碎 :你可以看下反汇编代码,看下哪里代码长了,执行慢了。  发表于 2020-12-28 15:05
抱歉,应该是chk_monit_ccb[i].state. 写错了。  发表于 2020-12-23 20:20
yzq13246068880 发表于 2020-12-28 17:05 | 显示全部楼层
非常不错
wooda 发表于 2021-1-2 11:10 | 显示全部楼层
这样搞一下:

u8 temp;
temp=  chk_monit_ccb[i].state;
if(checksumState == temp)
 楼主| 箫声欲碎 发表于 2021-1-4 09:29 | 显示全部楼层
wooda 发表于 2021-1-2 11:10
这样搞一下:

u8 temp;

最主要的原因还是单片机对于复杂的结构体解析的问题,我打算把结构体拆解,不用结构体,用单个全局变量代替了。
wooda 发表于 2021-1-4 09:51 | 显示全部楼层
箫声欲碎 发表于 2021-1-4 09:29
最主要的原因还是单片机对于复杂的结构体解析的问题,我打算把结构体拆解,不用结构体,用单个全局变量代 ...

结构体有助于编程人员理解和使用,在代码中适当用指针或者临时变量帮助单片机简化解析问题是合适的。
从一大堆变量到结构体使用,再到回到一大堆变量,再回到结构体,如此反复又不断改进使用方法,是我的历程
heimaojingzhang 发表于 2021-1-12 12:54 | 显示全部楼层
可不可以换一种表现形式
keaibukelian 发表于 2021-1-12 12:58 | 显示全部楼层
单片机的结构真的好复杂
labasi 发表于 2021-1-12 13:00 | 显示全部楼层
感觉结构体不太适用于单片机 太占空间了
paotangsan 发表于 2021-1-12 13:02 | 显示全部楼层
尽量使用局部变量来取代全局变量
renzheshengui 发表于 2021-1-12 13:03 | 显示全部楼层
总之就是想让程序更快的执行  同时尽可能占用更小的资源
heisexingqisi 发表于 2021-1-12 21:15 | 显示全部楼层
换一种方法
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

25

帖子

0

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