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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

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

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

Сообщение isx »

Просто если я прочитаю книгу, то пока дойдёт до практики всё забуду, а после дня использования нескольких новых команд забыть их будет невозможно :)))
Вот у меня ещё всплыл геморрой. Как перевести из числового типа значение int в символьный char? В бейсике это делала одна команда, а тут никак не найду подходящего оператора....
Реклама
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

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

Сообщение hybroid »

Всё же книжку надо читать, не?
http://ru.wikipedia.org/wiki/Itoa_%28%D0%A1%D0%B8%29
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Проблема решена...
Так можно преобразовать числовое значение в символьное и вевести его на LCD.
Если кому нужно то вот пример:

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

char *lcdB = "XXX";
int code = 4;
....
sprintf (lcdB,"%u",code);
lcd_puts(lcdB);
%u - это служит для выбора данных в переменной code. Сейчас он означает, что code - это десятичное беззнаковое число.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Всё-таки книжки рулят ? Или гугл помог ? :))
Только вот он плохо Вам помог. Представляю что произойдёт, если Ваша переменная code будет больше 99 :))
Реклама
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Аlex писал(а):Всё-таки книжки рулят ? Или гугл помог ?
Хвала интернету и участникам форума)
Поставил значение 103....В протеусе всё в норме... А что должно было произойти?
Насчёт плохо помог есть малость... Теперь я предварительно не могу изменить значение lcdB.
По стандарту пишу: lcdB = "ytie"; а он на меня матом :))
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Поставил значение 103....В протеусе всё в норме...
Вам повезло - в следующей ячейке, после массива, оказалось нулевое значение :)
пишу: lcdB = "ytie"; а он на меня матом
А может он только заглавные буквы принимает ? :))
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

ввёл 9999 ... Всё норм....
Всмысле заглавные? Я уже и заглавные и прописные и что тока не пробовал :))) , он мне постоянно

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

Error: C:\Users\isx\Desktop\Ôëåêñ\Íîâàÿ ïàïêà\167.c(20): a value of type 'flash unsigned char [5]' can't be assigned to an entity of type 'unsigned char *'
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Значит он может принимать только неизвестные, типа ИКС :)))
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

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

Сообщение Chip115 »

Всем привет! Помогите, пожалуйста, понять где баг.
В общем вот код.

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

char chScan(void)
{
	chScanPort = ~P0 & 0xF0;  // Когда тут становится такое chScanPort=0x80 (в отладчике в вотчах показывает именно так)
	if(chScanPort != 0х80)   // Вот это условие все равно выполняется ((
	{
		P0 = ~(chScanPort << 1);	
		chScanYCount = 4*++chScanYCount;		
	}
	else 
	{
		P0 = 0xEF;
		chScanYCode = 0;
		chScanYCount = 0;
	}	
	return chScanYCode;
}
Условие if(chScanPort != 0х80) выполняется, когда chScanPort==0х80. Почему так? Мне надо что бы как только chScanPort==0х80, то выполнялось тело else.
Пишу в кейле. ((
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

А если так попробовать

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

   chScanPort = 0х80;
   if(chScanPort != 0х80)
   {
?
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Аlex писал(а):Значит он может принимать только неизвестные, типа ИКС :)))
Я чёт не понял... Теперь мне надо символ преобразовать в число чтоб вывести, но числа он не выводит, и надо преобразовывать их в символы....... Пойду к я лучше застрелюсь нахрен :kill:
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

isx писал(а):Пойду к я лучше застрелюсь нахрен :kill:
:)))

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

char lcdB[10] = "abcdef";

int code = 4;
....
sprintf (lcdB,"%u",code);
lcd_puts(lcdB);

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

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

Сообщение ChipKiller »

По стандарту пишу: lcdB = "ytie"; а он на меня матом
... это что за стандарт ... наверное Ваш личный? :)
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

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

Сообщение Chip115 »

Аlex писал(а):А если так попробовать

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

   chScanPort = 0х80;
   if(chScanPort != 0х80)
   {
?
Не помогло ((( Все равно попадает в тело ифа.

Вот дизасм. можете глянуть? а то я не очень в асме ((

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

    43:         chScanPort = 0x80;
C:0x0800    750A80   MOV      chScanPort(0x0A),#P0(0x80)
    44:         if(chScanPort != 0) 
C:0x0803    E50A     MOV      A,chScanPort(0x0A)
C:0x0805    6011     JZ       C:0818
    45:         { 
    46:                 P0 = ~(chScanPort << 1);      
C:0x0807    25E0     ADD      A,ACC(0xE0)
C:0x0809    F4       CPL      A
C:0x080A    F580     MOV      P0(0x80),A
    47:                 chScanYCount = 4*++chScanYCount;                
C:0x080C    0509     INC      chScanYCount(0x09)
C:0x080E    E509     MOV      A,chScanYCount(0x09)
C:0x0810    25E0     ADD      A,ACC(0xE0)
C:0x0812    25E0     ADD      A,ACC(0xE0)
C:0x0814    F509     MOV      chScanYCount(0x09),A
    48:         } 
    49:         else  
C:0x0816    8008     SJMP     C:0820
    50:         { 
    51:                 P0 = 0xEF; 
C:0x0818    7580EF   MOV      P0(0x80),#RSTSRC(0xEF)
Пишу в кейле под силабс С8051F330
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Эх... Вот бы ещё знать Ваш АСМ... :))
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Аlex писал(а):
isx писал(а):Пойду к я лучше застрелюсь нахрен :kill:
:)))

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

char lcdB[10] = "abcdef";

int code = 4;
....
sprintf (lcdB,"%u",code);
lcd_puts(lcdB);

Так тоже не катит, та же ошибка....
ChipKiller писал(а):
По стандарту пишу: lcdB = "ytie"; а он на меня матом
... это что за стандарт ... наверное Ваш личный? :)
Дык у меня на таком стандарте всё работало... Как поставил sprintf всё отказало к чертям собачьим
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Так тоже не катит, та же ошибка....
А у меня работает :)
У Вас наверное компиль нестандартный :))
Как поставил sprintf всё отказало к чертям собачьим
Может контроллер израсходовал всю память и сошёл сума :))
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

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

Сообщение hybroid »

sprintf как-то неразумно толкать в МК. Хотя я ХЗ, может у вас там ARM с 128 метрами памяти отдельным чипом :)))
Так а чем itoa/atoi не устраивает? :)
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

допускает ли Си перенос команды на другую строчку ?
Tell Me The Truth
Ответить

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