编辑: 匕趟臃39 | 2015-12-20 |
(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