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

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

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

Сообщение hybroid »

Вот это точно достойно сайта http://govnokod.ru , шедевр ёмана :))
Ещё вчера и я долдычил про itoa, даже ссылку на википедию дал :(
Реклама
Михаил Л
Родился
Сообщения: 6
Зарегистрирован: Пт май 18, 2012 12:45:08

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

Сообщение Михаил Л »

Здравствуйте, тут был вынужден заняться написанием кода с помощью языка С(в программе IAR) для подключения Ацп ADS1274 к микроконтроллеру STM32F103C6T6A LQFP48 с ядром ARM Cortex M3. Начал искать в интернете примеры программ, т. к. ничего в этом не шарю, но пока что не нашёл ничего путного. Может кто-нибудь поделится какой-нибудь полезной информацией, которая сможет мне помочь в этом деле?
Заранее спасибо!
Реклама
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Так что даже так использовать её выгодней...
вообще можно проще и короче.

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

unsigned char func(unsigned char x){
switch (x)
  {
   case 0: 
   return '0';
   break;  
   case 1:
    return '1';
   break;   
   case 3:
    return  '3';
   break;   
   case 4:
    return '4';
   break;   
   case 5:
  return '5';
   break;   
   case 6:
   return  '6';
   break;   
   case 7:
   return  '7';
   break;    
   case 8:
   return '8';
   break;   
   case 9:
   return  '9';
   break;
  }
}
temp=code;
AA[0]=func(temp / 100);
AB[0]=func(temp /10);
 AC[0]=func(temp);

хотя я не понимаю для чего вы так присваиваете в массив.
и учите учебники настоятельно вам люди советуют.
В поисках истины человек развивается.
Совесть
Встал на лапы
Сообщения: 106
Зарегистрирован: Пн мар 26, 2012 05:25:06

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

Сообщение Совесть »

:))) вы бы тоже туда заглянули.
1. Работать ваше произведение не будет. Хотя нет, будет конечно, но вот как...

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

temp=code;
AA[0]=func(temp / 100);
AB[0]=func(temp /10);
AC[0]=func(temp);
2. Зачем вообще нужна эта функция? ее вполне заменит
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

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

Сообщение urry »

:)
упрощенная версия itoa - где-то так...

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

char dArr[4];
//----------------------------------
void fn_CharToStr(unsigned char cChar)
{
	const flash unsigned char cStep[3]={100,10,1};
	unsigned char i,atemp;//
	unsigned char val,temp;//
	val=cChar;//
	for (i=0; i<3; i++)//
	{
		temp=cStep[i];
		atemp=0;//
		while(val >= temp)//  
		{
			atemp++;//
			val-=temp;//
		}
			dArr[i]=atemp+0x30; 
 	}
	dArr[i]=0;// формируем завершающий нуль  
}
//------------------------------------

Реклама
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

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

Сообщение coredumped »

Михаил Л писал(а):Здравствуйте, тут был вынужден заняться написанием кода с помощью языка С(в программе IAR) для подключения Ацп ADS1274 к микроконтроллеру STM32F103C6T6A LQFP48 с ядром ARM Cortex M3.
Какой именно помощи Вы ожидаете? Здесь обсуждаются методы и приемы программирования на языке С. Что именно не получается?
Все будет только лучше, в крайнем случае - хуже.
Реклама
Михаил Л
Родился
Сообщения: 6
Зарегистрирован: Пт май 18, 2012 12:45:08

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

Сообщение Михаил Л »

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

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

Сообщение ChipKiller »

Михаил Л писал(а):...начал искать то, что может мне помочь в написании программы, но пока что нашёл только пару статей по теме только для микроконтроллеров AVR.
наверное у меня специальный Яндекс - по фразе "примеры кода для stm32f100" почему-то 3 миллиона ссылок :) ... и кроме данного форума есть другие, где под ARMы выделены отдельные ветки
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

urry писал(а):const flash unsigned char cStep[3]={100,10,1};
В том то и дело, что у меня компилятор ругается когда я делаю присоединение flash и flash ... По этой же причине пришлось отказаться от itoa.... Не хочет компиль выводить такие данные на LCD...
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

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

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

Сообщение vitalik_1984 »

Совесть писал(а)::))) вы бы тоже туда заглянули.
1. Работать ваше произведение не будет. Хотя нет, будет конечно, но вот как...

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

temp=code;
AA[0]=func(temp / 100);
AB[0]=func(temp /10);
AC[0]=func(temp);
И чем ваши строчки отличны от моих?
Вообще я просто показал автору, что зная хотя бы что такое функция можно себе жизнь упростить, а не тупо копировать одно и то же.
Вообще я бы уж точно не стал таким образом делать.
Я между прочим поглядываю, но иногда забываю как правильно,
а под рукой только телефон, поэтому бывает ошибочно что либо пишу.
Совесть писал(а): 2. Зачем вообще нужна эта функция? ее вполне заменит
Да вот я тоже не знаю, че человек парится
ChipKiller писал(а):по фразе "примеры кода для stm32f100" почему-то 3 миллиона ссылок
Не обманывайте себя, поиск ищет как логическое или "для stm32f100" и всего три тысячи результатов. :sleep:
В поисках истины человек развивается.
Совесть
Встал на лапы
Сообщения: 106
Зарегистрирован: Пн мар 26, 2012 05:25:06

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

Сообщение Совесть »

:facepalm: мои строки? это ваш код. Вы вглядитесь внимательнее в них. Еще внимательнее. Еще... Если не видите проблему, попробуйте прогнать в симуляторе.
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

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

Сообщение Roman Venom »

isx
Гы. а в пиках itoa работает. Просто надо смотреть синтаксис именно в микрочиповских шпаргалках.
Успех - императив!
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Блин.... что то не ладное твориться... Толи я от экзамена не отошёл, толи с компилятором у меня что то не так...
Посмотрите пожалуйста код:

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

 #include <mega8.h>
 #include <lcd.h>  
 #include <stdio.h>   
 #include <io.h>   
#include <delay.h>
#include <string.h>
 #asm
     .equ __lcd_port=0x12; PORTD
 #endasm             
 

char flash *lcdA = "erye";
char lcd_buf[10] = "RAZMER = ";
char RAZMER[5] = "rrrr";

int code = 2;
int pozicia = 0;
   
    void main( void )  {   
    
  if (pozicia < 4)  {
 
 
switch (code)
  {
   case 0: 
  RAZMER[pozicia] = '0';
   break;  
   case 1:
  RAZMER[pozicia] = '1';
   break;    
   case 2:
  RAZMER[pozicia] = '2';
   break;   
   case 3:
  RAZMER[pozicia] = '3';
   break;   
   case 4:
  RAZMER[pozicia] = '4';
   break;   
   case 5:
   RAZMER[pozicia] = '5';
   break;   
   case 6:
  RAZMER[pozicia] = '6';
   break;   
   case 7:
  RAZMER[pozicia] = '7';
   break;    
   case 8:
  RAZMER[pozicia] = '8';
   break;   
   case 9:
   RAZMER[pozicia] = '9';
   break;   
   }    
     
   code = code + 1;  
   pozicia = pozicia + 1;
    }
     
      
    lcd_init( 16 );  
  lcd_clear( );
  lcd_gotoxy( 0,0 ); 
  lcd_putsf( lcdA );  
  lcd_gotoxy( 0,1 );   
 strcat(lcd_buf, RAZMER);      
lcd_puts( lcd_buf ); 
               ;}  
        
Как видно из кода здесь в массив RAZMER[] поочерёдно, начиная с нулевого элемента присваивается символ, соответствующего значения переменной CODE, которая с каждым циклом возрастает на 1 (как и переменная "pozicia"). Потом всё это выводится на экран.
Изначально массив RAZMER[5] = "rrrr". Так вот, вместо "RAZMER = 2345" на экране появляется "RAZMER = 2rrr" .. Почему то к pozicia и к CODE не прибавляется единица после каждого цикла...

Проект протеуса почему то не разрешается на форум выкладывать.... :dont_know:
Аватара пользователя
Roman Venom
Сверлит текстолит когтями
Сообщения: 1135
Зарегистрирован: Сб июл 11, 2009 18:42:21
Откуда: Украина, г.Николаев

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

Сообщение Roman Venom »

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

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

Сообщение isx »

Незнай... я так всегда делаю...
Тут не в этом дело, потому что если прописать вместо задающего цикла просто

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

RAZMER[0] = '9';
RAZMER[0] = '6';
RAZMER[0] = '8';
то он выводит "RAZMER = 968r"
Совесть
Встал на лапы
Сообщения: 106
Зарегистрирован: Пн мар 26, 2012 05:25:06

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

Сообщение Совесть »

Roman Venom писал(а):Почему у вас в присваивании начального значения переменных типа char двойные кавычки?
Потому-что именно так записываются строки. А где вы увидели присвоение переменной типа чар ? Я нашел только массивы и указатели.
Вот это:

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

RAZMER[0] = '9';
RAZMER[0] = '6';
RAZMER[0] = '8';
не может выводить 968 - вы врете.
Выводит только 1 символ потому что надо книги читать, обратите внимание на разделы с управляющими конструкциями.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Упс, опечатался..... :oops: ...
Я имел ввиду:

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

RAZMER[0] = '9';
RAZMER[1] = '6';
RAZMER[2] = '8';
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

может хватит выносить всем мозг и начать уже думать?
добавьте внизу вашего кода еще один кейс
и посмотрите как поменяется результат

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

  RAZMER[pozicia] = '7';
   break;    
   case 8:
  RAZMER[pozicia] = '8';
   break;   
   case 9:
   RAZMER[pozicia] = '9';
   break; 
   def[s]o[/s]ault: RAZMER[pozicia] = 'x'; break;  
   }    
 
Последний раз редактировалось vitalik_1984 Чт июн 07, 2012 16:44:15, всего редактировалось 3 раза.
В поисках истины человек развивается.
Совесть
Встал на лапы
Сообщения: 106
Зарегистрирован: Пн мар 26, 2012 05:25:06

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

Сообщение Совесть »

:facepalm: а что поменяется в работе вышеприведенного примера? ничего
Ответить

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