У меня странная проблема с компилятором Microchip C18 для PIC18F67J60.
Я создал очень простую функцию, которая должна возвращать индекс подстроки в большей строке.
Я не знаю, что не так, но поведение, похоже, связано с тем, включен или нет расширенный режим.
С расширенным режимом в 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);
}