3398|6

9795

帖子

24

TA的资源

版主

楼主
 

讲个笑话,我因为一个for循环没写好,忙了整整一下午。 [复制链接]

本帖最后由 littleshrimp 于 2021-7-15 09:00 编辑

大概是这样的,我想把二维数组rx_data某行里的某段数据添加到key的指定位置

memcopy(key,0,rx_data[0],5,3);
memcopy(key,3,rx_data[1],2,6);
memcopy(key,9,rx_data[2],2,6);
memcopy(key,15,rx_data[3],2,1);

因为没找到合适的函数,我就自己写了一个下边这样的2B函数

 

key是一个16字节数据,每次输出的数据都不对,因为我原来使用vscode调试gd32vf103,还没找到在线仿真的功能(还没找到一个好用的方法),只能一次次编译下载后通过串口查看数据。

弄了一段时间没找到原因,然后想着还是用NucleiStudi的在线调试功能吧,装了NucleiStudi,GD32官方的CAN例程移到项目里时发现eclic_irq_enable函数不可用。

检索了nuclei_sdk里的所有文件,发现只有一处匹配的地方,MD,官方把使用这个函数也给注释了,不调用这个函数CAN收到数据时没法触发中断,后来把GD32官方的代码一点点移到工程里以后才能正常编译。

进入调试模式后,使用像牛一样慢的调试速度终于把问题找到了,就下边这句话:

 for(uint32_t i = sIndex;i<len;i++)

改为 下边这样后正常

for(uint32_t i = sIndex;i<sIndex+len;i++)

最新回复

逻辑错误没有一个好的环境,确实不好调。   详情 回复 发表于 2021-7-19 17:54
点赞 关注
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 

回复
举报

2942

帖子

4

TA的资源

五彩晶圆(中级)

沙发
 

for(uint32_t i = sIndex;i<sIndex+len;i++)这条语句真不怎么样。

1、i这样的变量只管循环的,不应该在循环中介入程序逻辑。

2、i循环的变量和地址的类型往往是不同的,如果i是uint16或uint8这可能容易导致溢出。如果在64系统中更是要小心。

 

点评

第一个问题应该这样写吗? for(uint32_t i=0;i<len;i++) { d = s[sIndex+i]; }     详情 回复 发表于 2021-7-15 08:56
 
 
 

回复

9795

帖子

24

TA的资源

版主

板凳
 
bigbat 发表于 2021-7-15 08:08 for(uint32_t i = sIndex;i<sIndex+len;i++)这条语句真不怎么样。 1、i这样的变量只管循环的,不应该 ...
第一个问题应该这样写吗?
for(uint32_t i=0;i<len;i++)
{
	d[index++] = s[sIndex+i];
} 

 

点评

是的,我觉得这样好一些  详情 回复 发表于 2021-7-15 13:12
这样写感觉也没毛病!  详情 回复 发表于 2021-7-15 09:09
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

1942

帖子

3

TA的资源

版主

4
 
littleshrimp 发表于 2021-7-15 08:56 第一个问题应该这样写吗? for(uint32_t i=0;i<len;i++) { d = s[sIndex+i]; }    ...

这样写感觉也没毛病!

 
 
 

回复

2942

帖子

4

TA的资源

五彩晶圆(中级)

5
 
littleshrimp 发表于 2021-7-15 08:56 第一个问题应该这样写吗? for(uint32_t i=0;i<len;i++) { d = s[sIndex+i]; }    ...

是的,我觉得这样好一些

点评

的确 这样不容易错你说的第二个问题,我没太理解  详情 回复 发表于 2021-7-15 14:12
 
 
 

回复

9795

帖子

24

TA的资源

版主

6
 
bigbat 发表于 2021-7-15 13:12 是的,我觉得这样好一些

的确 这样不容易错
你说的第二个问题,我没太理解

 
 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

7
 

逻辑错误没有一个好的环境,确实不好调。

个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表