TC264代码移植遇到的问题

记录一下自己再从k66将代码移植到TC264遇到的一些问题。

图像错位问题

问题描述

用的是逐飞的库函数,采集图像的大小为120*188,但是车子运行的时候会出现图像错位的情况,最后发现是TC264的dma-list的问题(个人推测),应该是dma的目标地址多改变或者少改变了一次,即原本为搬运到了 mt9v03x_image[0][0]的数据被错误的搬运到了mt9v03x_image[60][0]最终导致采集回来的图像出现错位的情况。(下图为图像错位的示例)
在这里插入图片描述

解决方法

在逐飞科技的康哥的建议下,将原图像采集的数据大小改小,使其传输次数小于16384,这样就可以采用一次dma进行传输而不是用dma_list功能。

字节对齐相关问题

问题描述

在使用sd卡记录小车运行的图像以及数据时,传回上位机又发现了错位的问题还有指针操作可能会溢出的问题,但是用k66对以保存图像数据的sd卡进行传输进行却没有问题,所以将目光转移到了串口传输的问题上,经过一次次排查发现串口功能正常,再观察是否为自己写的串口dma的问题,发现也不是。所有有很长一段时间都是用TC264来运行代码,用一块K66来传输存储的图像,这种方法还是有利有弊的。

//传输结构体的示例
typedef struct
{
	uint8 Verific[5];
	uint8 Pixels_width;
	uint8 Pixels_height;
	uint8 Coefficient_Num;
	uint8 Parameter_Num;
	uint8 Data_Con[50*4*2];
	uint8 Par_Con[1*8];
	My_LCR Lcr[70];
	uint8 Pixels[1629];  
	#endif
}My_Data_Type;

这个问题卡了很长的时间,有一次偶然想到是不是字节对齐的问题,于是通过sizeof获取My_Data_Type结构体的实际大小,发现与预计的字节数有一定的误差,但K66上运行发现两者是相同的,所以在K66结构体内部为单字节对齐(内存分布为连续的),而相同的结构体在TC264上却不是,所以导致一部分为内存为空,指针遍历的时候会出现栈溢出的问题。(这一段讲的可能有问题,欢迎斧正)。
关于更多字节对齐的问题可以参考其他的文章。

解决方法

由于对字节对齐的理解不够深刻,所以只能通过改变传输协议来实现指针的正确遍历,最后成功实现图像的传输,代码基本移植完毕。

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zccccccc_tz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值