Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Вопросы по С/С++ (СИ)

Сообщение ChipKiller »

Дык у меня на таком стандарте всё работало... Как поставил sprintf всё отказало к чертям собачьим
- копирование строки и присваивание значения переменной - разные вещи. Для начала - что Вы хотите сделать?
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Аlex »

FreshMan писал(а):допускает ли Си перенос команды на другую строчку ?
Если только он будет не с похмелья и ему не будет тяжело смотреть вниз :)))

Расшифруйте свой вопрос.
Реклама
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: Вопросы по С/С++ (СИ)

Сообщение isx »

У мя стандартный CVAVR.
А возможно вот это

Код: Выделить всё

char flash *lcdA = "erye";
вывести через

Код: Выделить всё

 sprintf (lcdA,"%u",code);
 lcd_putsf( lcdA );
Просто в таком виде само собой ошибка летит. Я пробовал *lcdA в строке со sprintf, но толку нет всё равно...
Последний раз редактировалось isx Вт июн 05, 2012 19:01:49, всего редактировалось 1 раз.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Вопросы по С/С++ (СИ)

Сообщение FreshMan »

а как это сделать ?
If (x==0)
y=1
так мона ?
Tell Me The Truth
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Вопросы по С/С++ (СИ)

Сообщение ChipKiller »

Код: Выделить всё

char flash *lcdA = "erye"; 
такой же маразм как и

Код: Выделить всё

lcdB = "ytie";
:)

ЗЫ. небольшой намек - зачем существует функция strcpy() ? :))
Последний раз редактировалось ChipKiller Вт июн 05, 2012 19:04:08, всего редактировалось 1 раз.
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Аlex »

Квалификатор flash, скорее всего, говорит о том, что бы поместить массив в область программной памяти. А Вы его пытаетесь изменить, вот и ошибка...
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Аlex »

FreshMan писал(а): If (x==0)
y=1
так мона ?
мона и даже - нуна :))
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: Вопросы по С/С++ (СИ)

Сообщение 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 ); 
  sprintf (lcdA,"%u",code);
  lcd_putsf( lcdA );
  lcd_gotoxy( 0,1 ); 
  lcd_puts(lcdB);
  
               }
В таком варианте компилятор ругается на lcdA = "BEZHELME";
Если убрать строку sprintf (lcdA,"%u",code); то всё работает и на экране светиться BEZHELME
Если оставить строку sprintf (lcdA,"%u",code); , и убрать строку lcdA = "BEZHELME";, то всё начнёт работать нормально....
Но мне переодически необходимо менять содержимое lcdA....
Последний раз редактировалось isx Вт июн 05, 2012 19:08:56, всего редактировалось 1 раз.
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Вопросы по С/С++ (СИ)

Сообщение ChipKiller »

2 Chip115 if(chScanPort != 0х80) и if(chScanPort != 0) - разные вещи, чего же вы ждете от дизассемблера?
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Аlex »

isx , у Вас памяти маловато :))
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Вопросы по С/С++ (СИ)

Сообщение ChipKiller »

2 isx - еще раз

Код: Выделить всё

lcdA = "BEZHELME";
... это что?

Аlex - у него маловато знаний и внимательности, а не памяти :)
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: Вопросы по С/С++ (СИ)

Сообщение isx »

Это вся программа, а памяти там ещё много свободной...
ChipKiller писал(а):2 isx - еще раз

Код: Выделить всё

lcdA = "BEZHELME";
... это что?

Код: Выделить всё

lcdA = "BEZHELME";
это я присваиваю переменной lcdA значение (или массив символов) BEZHELME.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: Вопросы по С/С++ (СИ)

Сообщение isx »

вот кстати ошибка Error: C:\Users\isx\Desktop\Ôëåêñ\Íîâàÿ ïàïêà\167.c(26): function argument #1 of type 'flash unsigned char *' is incompatible with required parameter of type 'unsigned char *'
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Аlex »

это я присваиваю переменной lcdA значение (или массив символов) BEZHELME.
А lcdA какой тип имеет ? :)
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: Вопросы по С/С++ (СИ)

Сообщение isx »

Код: Выделить всё

char flash *lcdA = "erye";
здесь она объявляется
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Аlex »

isx писал(а):

Код: Выделить всё

char flash *lcdA = "erye";
здесь она объявляется
А у Вас в исходнике

Код: Выделить всё

  lcdA = "BEZHELME";
Я говорю - памяти всё таки мало :)))
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: Вопросы по С/С++ (СИ)

Сообщение isx »

Так в самом верху исходника она объявляется...
А то что вы указали находится в main. Там её значение меняется...
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Вопросы по С/С++ (СИ)

Сообщение ChipKiller »

ладно - цирк уже надоел
1 если переменная находится во flash - это константа
2 если строку нужно поместить в RAM - делаем так strcpy(lcdB,"Text") ;
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Re: Вопросы по С/С++ (СИ)

Сообщение isx »

Это получается мне надо перевести её в RAM, поменять значение, и потом опять во FLASH?
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Аlex »

isx , в Си нельзя просто так присваивать указателю целую строку через знак равенства. Это делается через оператор strcpy, который копирует одну область памяти в другую.
Ответить

Вернуться в «Разные вопросы по МК»