RAM - хранит переменные, а flash константы
RAM - можно менять, а flash - нет
что не ясно?
Код: Выделить всё
char flash *lcdA = "erye";
char *lcdB = "Tyujfkvi";
int code = 4;
void main( void )
{
lcdA = "BEZHELME";
lcd_init( 16 );
lcd_clear( );
lcd_gotoxy( 0,0 );
lcd_putsf( lcdA );
lcd_gotoxy( 0,1 );
lcd_puts(lcdB);
}А вам не повезло, вы не знаете как работает стандартная функция. И при этом еще и пытаетесь блеснуть остроумием.Аlex писал(а):Вам повезло - в следующей ячейке, после массива, оказалось нулевое значениеПоставил значение 103....В протеусе всё в норме...
Это кто вам сказал?Аlex писал(а):в Си нельзя просто так присваивать указателю целую строку через знак равенства. Это делается через оператор strcpy, который копирует одну область памяти в другую.
Про то что константы хранятся и в RAM не слышали? И даже больше, по умолчанию они там и хранятся.ChipKiller писал(а):RAM - хранит переменные, а flash константы
RAM - можно менять, а flash - нет
... ага - питание включаем и весь RAM уже в константахСовесть писал(а):Про то что константы хранятся и в RAM не слышали? И даже больше, по умолчанию они там и хранятся.
... да - клоунов полноСовесть писал(а): Да уж, веселый день сегодня.
Куда уж нам, невезучим, до Вас... Если Вы собрались форматировать строку в массив, размером превышающую размер массива, то желаю Вам удачи...А вам не повезло, вы не знаете как работает стандартная функция.
Мне приснился сон, в котором сидим - я, Керниган и Ритчи за столом и пьём пиво. И тут они мне говорят - "Alex, никогда и ни за что на свете, не присваивай строки знаком равенства !". Вот я теперь хожу и всем советую.Это кто вам сказал?
А тут кто-то кого-то дураком назвал ? Ткните в меня ссылкой, плиз...Совесть писал(а):Дурак не тот кто не знает, а тот кто знать не хочет.
Всё просто. lcdA у Вас - указатель на строку-константу. Ему можно присвоить адрес строки (даже через равенство), просто некоторые специалисты не следят за диалогом, не вникают в суть и не понимают что Вы хотите. Вы считаете lcdA некой переменной, хранящей строку, но это не так. Это всего лишь указатель на строку. А т.к. этот указатель на константу, то, соответственно, строку на которую он указывает изменить нельзя (что пытается сделать sprintf) !isx писал(а):А почему тогда вот это рабоет нормально:Код: Выделить всё
char flash *lcdA = "erye"; char *lcdB = "Tyujfkvi"; int code = 4; void main( void ) { lcdA = "BEZHELME"; lcd_init( 16 ); lcd_clear( ); lcd_gotoxy( 0,0 ); lcd_putsf( lcdA ); lcd_gotoxy( 0,1 ); lcd_puts(lcdB); }
... для такого вопроса этого явно недостаточноАlex писал(а):Объяснил как смог
Это получается мне надо перевести её в RAM, поменять значение, и потом опять во FLASH?
Код: Выделить всё
char lcd_buf[10];
Код: Выделить всё
strcpy(lcd_buf,"String 1") ; \\ Копируем в буфер/массив строку "String 1"
lcd_gotoxy( 0,0 ); \\ Перемещаем курсор
lcd_putsf( lcd_buf ); \\ Выводим буфер на LCD
Код: Выделить всё
int var;
var=2;
sprintf(lcd_buf,"String %u",var); \\ Форматируем строку
lcd_gotoxy( 0,1 ); \\ Перемещаем курсор
lcd_putsf( lcd_buf ); \\ Выводим буфер на LCD
Код: Выделить всё
if (punkt == 0) {lcdA = "Lineyka v1.0"; lcdB = "Glavnoe menu"; }
if (punkt == 1) { lcdA = " Options"; lcdB = " "; }
if (punkt == 11) {lcdA = "Options"; lcdB = "Kalibrovka";}
if (punkt == 111) { lcdA = "Kalibrovka"; lcdB = "Wait!!! "; }
if (punkt == 12) { lcdA = "Options"; lcdB = "Proverka"; }
if (punkt == 121) { lcdA = "Proverka"; lcdB = "Wait!!! "; }
if (punkt == 2) { lcdA = " Vvod Visoti"; lcdB = " "; }
if (punkt == 21) {lcdA = " Vvod Visoti"; lcdB = "Visota";}
if (block == 1) {lcdA = " VVOD"; lcdB = code; } // вот именно здесь необходимо присвоить числовое значение lcdB
lcd_init( 16 );
lcd_clear( );
lcd_gotoxy( 0,0 );
lcd_putsf( lcdA );
lcd_gotoxy( 0,1 );
lcd_putsf( lcdB );Код: Выделить всё
char lcd_buf[16];
sprintf(lcd_buf, "%d", 1234);
lcd_putsf(lcd_buf);
Код: Выделить всё
int code = 964;
char lcd_buf[10] = "isx";
char AA[2] = "1";
char AB[2] = "1";
char AC[2] = "1";
int a = 0;
int b = 0;
int c = 0;
void main( void )
{
a = code / 100;
b = (code / 10) - (a*10);
c = code - (a*100 + b*10);
switch (a)
{
case 0:
AA[0] = '0';
break;
case 1:
AA[0] = '1';
break;
case 3:
AA[0] = '3';
break;
case 4:
AA[0] = '4';
break;
case 5:
AA[0] = '5';
break;
case 6:
AA[0] = '6';
break;
case 7:
AA[0] = '7';
break;
case 8:
AA[0] = '8';
break;
case 9:
AA[0] = '9';
break;
}
switch (b)
{
case 0:
AB[0] = '0';
break;
case 1:
AB[0] = '1';
break;
case 3:
AB[0] = '3';
break;
case 4:
AB[0] = '4';
break;
case 5:
AB[0] = '5';
break;
case 6:
AB[0] = '6';
break;
case 7:
AB[0] = '7';
break;
case 8:
AB[0] = '8';
break;
case 9:
AB[0] = '9';
break;
}
switch (c)
{
case 0:
AC[0] = '0';
break;
case 1:
AC[0] = '1';
break;
case 3:
AC[0] = '3';
break;
case 4:
AC[0] = '4';
break;
case 5:
AC[0] = '5';
break;
case 6:
AC[0] = '6';
break;
case 7:
AC[0] = '7';
break;
case 8:
AC[0] = '8';
break;
case 9:
AC[0] = '9';
break;
}
lcd_init( 16 );
lcd_clear( );
lcd_gotoxy( 0,0 );
lcd_putsf( lcdA );
lcd_gotoxy( 0,1 );
strcat(lcd_buf, AA);
strcat(lcd_buf, AB);
strcat(lcd_buf, AC);
lcd_puts( lcd_buf );
}