0
PIC18F67J60 용 마이크로 칩 C18 컴파일러에 이상한 문제가 있습니다.마이크로 칩 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은 실제로 멀리 포인터를 사용합니까? –
예 참으로 : 서명 된 char memcmppgm2ram (자동 void * s1, 자동 const MEM_MODEL rom void * s2, 자동 sizeram_t n); MEM_MODEL은 멀리까지 정의됩니다. – JakobJ