TI中文支持网
TI专业的中文技术问题搜集分享网站

img64x.lib库的问题

现在我使用img64x.lib中的 IMG_sobel(in_data, out_data, cols, rows);函数,发现当cols和rows为96、96或更大时时,程序老是死掉,而换成80、80或更小点的数就没问题,我使用时把img64x.lib添加到了工程中的libraries中,请问是什么问题?谢谢

Shine:

你好,

请问程序老是死掉是指死在某一处代码处还是跑飞了?

试试增加heap, stack size看是否有用?

erchao zhang1:

回复 Shine:

其中in_data, out_data数组通过#pragma DATA_SECTION(in_data,"data"),unsigned char in_data[200*200];#pragma DATA_SECTION(out_data,"data"),unsigned char out_data[200*200]在外部RAM中定义大小,发现其中IMG_sobel(in_data, out_data, cols, rows)当cols和rows分别为80、80时或小于80时,程序能正常运行,当分别为96、96时或大于96时,程序就跑飞了,影响了其中的图像采集程序。还有当不用#pragma DATA_SECTION定义时,而是直接定义到内部RAM中时,当为96时也能正常了。我的平台时DM648,BIOS操作系统。还请给予帮助,非常感谢

erchao zhang1:

回复 Shine:

其中in_data, out_data数组通过#pragma DATA_SECTION(in_data,"data"),unsigned char in_data[200*200];#pragma DATA_SECTION(out_data,"data"),unsigned char out_data[200*200]在外部RAM中定义大小,发现其中IMG_sobel(in_data, out_data, cols, rows)当cols和rows分别为80、80时或小于80时,程序能正常运行,当分别为96、96时或大于96时,程序就跑飞了,影响了其中的图像采集程序。还有当不用#pragma DATA_SECTION定义时,而是直接定义到内部RAM中时,当为96时也能正常了。我的平台时DM648,BIOS操作系统。还请给予帮助,非常感谢

Shine:

回复 erchao zhang1:

请问是定义到片外DDR吗?DDR能稳定工作吧? 如果只有IMG_sobel这个函数, 把其他代码暂时注释掉, 还会出现同样的问题吗?

erchao zhang1:

回复 Shine:

你好:

嗯,是定义到片外DDR了,DDR能正常工作。

在函数中只有下列时:

#pragma DATA_SECTION(StainImageSaveF,"Data_L3")unsigned char StainImageSaveF[200*200]; #pragma DATA_SECTION(StainImageSoF,"Data_L3")unsigned char StainImageSoF[200*200];

#pragma DATA_SECTION(StainImageSaveB,"Data_L3")unsigned char StainImageSaveB[200*200];

#pragma DATA_SECTION(StainImageSoB,"Data_L3")unsigned char StainImageSoB[200*200];

Recognize *Stain_Detect(BNIMAGE *pCISA_BNImage,BNIMAGE *pCISB_BNImage)

{

 int Heigth=80,Length=80; int Pixel_Num_F=0,Pixel_Num_B=0,Stain_Num_F=0,Stain_Num_B=0;

 IMG_sobel(StainImageSaveF,StainImageSoF,Length,Heigth); IMG_sobel(StainImageSaveB,StainImageSoB,Length,Heigth);

}

采集程序能正常运行,串口功能程序能正常输出数据,串口输出数据格式为 [0001,??????????]

当int Heigth=80,Length=80;改为int Heigth=120,Length=120;时串口输出数据刚开始能输出数据,后来就不输出了,程序跑飞工作不正常。

Heigth,Length为104或112时或更小时也能正常,当120以上递增时,不输出时刻数据越来越提前,以前除了IMG_sobel函数外还有其他程序时,超过80就不行了,现在只保留IMG_sobel函数时,大于等于120不行了,不知为何,应该修改什么地方?谢谢

erchao zhang1:

回复 Shine:

你好:

当Heigth=160,Length=160;时并把 

IMG_sobel(StainImageSaveF,StainImageSoF,Length,Heigth); IMG_sobel(StainImageSaveB,StainImageSoB,Length,Heigth);

其中的一个注释去掉只保留一个也正常

Shine:

回复 erchao zhang1:

stack, heap size都试过加大了吗?

erchao zhang1:

回复 Shine:

我在bios-》MEM-Memory Section Manager-》General-》stack size(MAUs)由原来的0x1200改为0xf000,在DDR2中general选中creat a heap in this memory,heap size由原来的0x003c0000改为0x004c0000,又在project-》build options-》 heap size值为0xf000, stack size值为0xf000,试了下还是不行,都不知道还能再改什么了

erchao zhang1:

回复 Shine:

你好:

请问用img64x.lib中的IMG_sobel(unsigned char *in,unsigned char *out,int col,int row)函数中的in、out是否可以通过#pragma DATA_SECTION将其数组空间开辟到DDR中使用,为何col和row过大时就不行呢(比如160,160),直接造成系统其他程序(图像采集程序)跑飞,如果可以开辟到DDR中使用,对stack,heap大小需求多少,具体在哪设置呢?我现在IMG_sobel函数在一个BIOS任务中运行而且只有这个函数,一加上这个IMG_sobel函数就程序跑飞,谢谢。

erchao zhang1:

回复 Shine:

你好:

我用的DM648,采用bios,有图像采集程序任务和图像处理,图像处理任务采用TI函数库img64x.lib中的IMG_sobel(unsigned char *in,unsigned char *out,int col,int row),其中将in和out通过#pragma DATA_SECTION在DDR中开辟两个数组空间,其中图像处理任务中连续调用两次IMG_sobel函数,col和row分别为160,160,最好运行系统程序时,图像采集程序老是跑飞,而换成TI的C代码后,即调用IMG_sobel_c(unsigned char *in,unsigned char *out,int col,int row)时,则程序没有问题,是不是IMG_sobel()库函数有什么设置要求啊,还有当用IMG_sobel()库函数时,col和row为80和80时系统运行也没问题,求解,谢谢

赞(0)
未经允许不得转载:TI中文支持网 » img64x.lib库的问题
分享到: 更多 (0)