По класической схеме да и в моей программе отладочные строки типа "Ошибка", "Время вышло" описываются вначале программы с префиксом __flash вот так
Код
__flash unsigned char PPPerr1[14] = {"\x0D\x0A CRC Error\x0D\x0A"};
потом в самой программе я вызываю функцию вывода отладочной строки через указатель на первый символ этой строки
Код
#ifdef debugPPP
PrintSTRfronFLASH( &PPPerr1[0], 14, DEBUG); //CRC Error
#endif
PrintSTRfronFLASH( &PPPerr1[0], 14, DEBUG); //CRC Error
#endif
все работает нормально но когда объемы исходного кода большие приходится каждый раз переходить в начало страницы и обявлять новые строки
Код
__flash unsigned char PPPerr...
__flash unsigned char PPPerr..
__flash unsigned char PPPerr..
__flash unsigned char PPPerr...
__flash unsigned char PPPerr..
__flash unsigned char PPPerr..
__flash unsigned char PPPerr...
Возможно ли непостредственно в процедуре вызова обявлять выводимую строку ???
что подобное этому
Код
PrintSTRfronFLASHa( "\x0d Hello WORLD" , DEBUG);
У меня такое работает только если строка находится в SRAM, как только добавляю префикс
Код
__flash
пишет ошибкуКод
Error[Pe167]: argument of type "char *" is incompatible with E:\RADIO\IAR4.21A\avr\tutor\Xbox4\main.c 87
parameter of type "unsigned char __flash *"
parameter of type "unsigned char __flash *"
вот мои процедуры для
Код
void main(void);
void PrintDebug(unsigned char __flash stringD[25]);
void PrintDebug(unsigned char __flash stringD[25])
{
unsigned temp = 0;
for(temp = 0; stringD[temp] != 0; temp += 1)
putchar(stringD[temp], DEBUG);
}
void main(void)
{
PrintDebug("\x0d Hello WORLD");
while(1);
}
void PrintDebug(unsigned char __flash stringD[25]);
void PrintDebug(unsigned char __flash stringD[25])
{
unsigned temp = 0;
for(temp = 0; stringD[temp] != 0; temp += 1)
putchar(stringD[temp], DEBUG);
}
void main(void)
{
PrintDebug("\x0d Hello WORLD");
while(1);
}
если такое возможно.
компилято IAR 4.20 for AVR