我对PIC18F67J60的Microchip C18编译器有这个奇怪的问题。
我创建了一个非常简单的函数,该函数应在较大的String中返回Sub-String的索引。
我不知道出什么问题了,但是该行为似乎与是否启用了扩展模式有关。
在MPLAB.X中启用扩展模式后,我得到:memcmppgm2ram
函数始终返回零。
在MPLAB.X中禁用扩展模式后,我得到:
迭代器变量i
的值计为:0, 1, 3, 7, 15, 21
我在想一些堆栈问题或其他东西,因为这真的很奇怪。
完整的代码如下所示。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char bigString[] = "this is a big string";
unsigned char findSubStr(char *str, const rom char *subStr, unsigned char n, unsigned char m)
{
unsigned char i;
for (i=0; i < n-m; i++)
{
if(0 == memcmppgm2ram(&str[i], (const far rom void*)subStr, m))
return i;
}
return n; // not found
}
void main(void)
{
char n;
n = findSubStr(bigString, (const rom void*)"big", sizeof(bigString), 3);
}
最佳答案
memcmppgm2ram()
将指向数据存储器(ram)的指针作为其第一个参数。您正在传递指向字符串文字的指针,该文字位于程序存储器(rom)中。
您可以改用memcmppgm()
,或使用memcpypgm2ram()
或strcpypgm2ram()
将另一个字符串复制到ram。
不幸的是,我目前无法访问此编译器,因此我无法对其进行测试。