Цитата(BorisRozentsvaig @ Jun 3 2005, 16:19)
Через register тоже можно, не спорю. Но в данном случае главное не скорость, а чтобы заработало :-)
volatile - это для общности....

Согласен, но мой вариант более предсказуем с точки зрения компилятора (GCC). И в дизассемблере с ним проще разобраться.
Axer, дизассемблируйте Ващу функцию и посмотрите чего там скомпилилос. Я неоднократно нарывался на "неправильный код"(сам был виноват), т.к. GCC очень требователен к конструкциям языка.
Проверьте, какое значение указателя записывается перед вызовом функции и
что находится по этому указателю.
Да и стоит ли на текстовые сообщения ОЗУ тратить? У меня они только во флеше сидят.
#include <avr\io.h>
#include <avr\pgmspace.h>
const prog_char str[] = "test message";
void print(const prog_char *s)
{
char ch;
while(1)
{
ch = pgm_read_byte(s);
if (ch == 0) break;
PORTA = ch;
s++;
}
}
int main (void)
{
print(str);
print(PSTR("TEST2"));//или так
return 0;
}