编辑: 匕趟臃39 2015-12-20
本篇文章中详细介绍了在 KEIL 环境中,使用 C51 开发时,进行调试的方法,希望对开 发是遇到的问题有所帮助.

(1) 调试时使用_set_response,_exit 函数调用,程序遇到函数_exit 时就退出,可以检 查中间变量.使用 C51 的debug 不准确,还是在 drvset 中调试好.过程如下,如write.c 程序: BYTE xdata bRes = 0;

WORD xdata dLen = 0;

//本次要写入的数据长度 WORD xdata offset = 0;

//本次要写入的数据偏移量 HANDLE xdata hFile = 0;

BYTE xdata pbData[250];

BYTE xdata dataArr[2];

BYTE xdata offsetArr[4];

memcpy(dataArr, pbInBuff, 2);

//本次要写入的数据长度 dLen = strtol(dataArr,NULL,16);

memcpy(offsetArr, pbInBuff+2, 4);

//本次要写入数据的偏移量 offset = strtol(offsetArr,NULL,16);

//屏蔽

1 //检查 dLen 转换后的值是否正确 //_set_response(8,&dLen);

//_exit();

//屏蔽

2 //检查 offset 转换后的值是否正确 //_set_response(8,&offset);

//_exit();

memcpy(pbData, pbInBuff+6, dLen);

//屏蔽

3 //检查 pbData 中的值是否正确 //_set_response(10,pbData);

//_exit();

打开屏蔽

1 时,程序运行到这里退出,使用 drvset 看返回值,返回是正确的,但第二次 运行时,数据就不对了 第一次结果: 第二次结果 可以看到 dLen 值发生了变化, 而把屏蔽

1 移到 memcpy(offsetArr, pbInBuff+2, 4);

前面则没有 错误,于是怀疑是 strtol 函数在转换时将内存中改写了.因此改为使用 CharToWORD 函数, 然后检查,每次运行后的结果都是正确的. 即: WORD CharToWORD(BYTE* pbData, BYTE bLen) { BYTE i=0;

BYTE bTemp=0;

WORD wRet = 0;

for(i=0;

i

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题