Решил написать функцию вывода строки в массив да так чтобы можно было эту строку брать как из SRAM так и из FLASH а поскольку указатели на FLASH и SRAM это разные вещи, то и типы указателей должны быть разные.
решил сделать тип void чтобы тип можно было задать при вызове функции с приведением типа.
вот код функции
Код
void LCDString(unsigned char StrNum, unsigned char StrPos, void *pStr)
{
unsigned char i, c;
i = StrPos;
c = *((char*)pStr++);
while ((i < SYM_STR-2) && (c != 0x00))
{
LCDStr[StrNum][i] = c;
c = *((char*)pStr++);
i++;
}
}
{
unsigned char i, c;
i = StrPos;
c = *((char*)pStr++);
while ((i < SYM_STR-2) && (c != 0x00))
{
LCDStr[StrNum][i] = c;
c = *((char*)pStr++);
i++;
}
}
прблема в том что компилятор не может сделать ++ для указателя типа void.
если создать отдельную переменную типа char *pS; то все нормально.
т.о. вопрос ? как сделать ++ указателю типа void без отдельной переменной, если возможно.
И еще вопрос. Если нужен передавать параметр типа bool
то можно как-то использовать
#if
#endif
т.е. напрмер
Код
strcpy(char *pStr, bool S_F)
{
#if S_F // если передан указатель на FLASH
flashcpy()
#else
Sramcpy()
#endif
}
{
#if S_F // если передан указатель на FLASH
flashcpy()
#else
Sramcpy()
#endif
}
или может так :
Код
strcpy(char *pStr)
{
#ifdef S_F
flashcpy()
#else
Sramcpy()
#endif
}
а вызов функции делать так
#define S_F
strcpy(*pStr)
#undef S_F
{
#ifdef S_F
flashcpy()
#else
Sramcpy()
#endif
}
а вызов функции делать так
#define S_F
strcpy(*pStr)
#undef S_F
Есть еще вариант передавать два указателя, для Flash и SRAM и ненужный передавать 0
Или может еще каким образом поступают при такой задаче, просьба поделиться опытом ...