0
我有用於PIC18F67J60的Microchip C18編譯器的這個奇怪問題。Microchip C18 - 奇怪的代碼行爲(可能與擴展模式/非擴展模式相關)
我已經創建了一個非常簡單的函數,該函數應該返回更大字符串中的子字符串的索引。
我不知道什麼是錯的,但行爲似乎與其他擴展模式是否啓用有關。
隨着MPLAB.X啓用擴展模式,我得到:
- 的
memcmppgm2ram
函數返回零所有的時間。
隨着MPLAB.XI無效擴展模式得到:
- 迭代變量
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真的需要一個遠的指針嗎? – 2012-01-28 17:59:56
確實是:signed char memcmppgm2ram(auto void * s1,auto const MEM_MODEL rom void * s2,auto sizeram_t n); MEM_MODEL被定義爲遠 – JakobJ 2012-01-28 19:07:18