在使用CCS5.2调试emcv中的下列代码时,经常遇到了内存出错或者不足的问题。
#include <string.h>
#include "highgui/highgui.h"
#include "cv/cv.h"
#include <iostream>
int main(void)
{
//int n=0;
//int i=0;
const char* path = "F:\\11.bmp";
size_t n = std::strlen(path);
IplImage* img = cvLoadImage(path, 1);
CvSize size;
size.width = img->width;
size.height = img->height;
std::cout<<"w,h,channels:"<<size.width<<" " <<size.height<<" "<<img->nChannels<<std::endl;
IplImage* grayImg = cvCreateImage(size,img->depth, 3);
//cvCvtColor(img, grayImg, CV_BGR2GRAY);
cvCopy(img, grayImg);
const char* savePath="F:\\g.bmp";
cvSaveImage(savePath, grayImg);
cvReleaseImage(&img);
cvReleaseImage(&grayImg);
return 0;
}
在工程的属性设置中,C6000 Linker->Basic Options->(-stack size) ,设置为0x56000,
C6000 Linker->Basic Options->(-heap size) ,设置为0x56000,程序运行正常。
当增大设置值时,就出现内存不足的提示,或者报错。
针对以上问题,查看了C6000的官网资料,heap size 和stack size的问题。
在.cmd文件中,.system 代表的是heap size,也就是malloc() 占用的内存。
.stack 代表的是stack size,是程序运行时的堆栈(run time stack)内存。
意识到这一点,可能是两个设置不一致导致的问题,所以就把.cmd中的.stack 和 .system注释掉。
再增大属性设置中的stack size 和heap size,则就不会出现问题了。
这个问题总算是解决了。