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

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

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

Сообщение vitalik_1984 »

alexey6522 писал(а):Блииин, помогите! Спаял схему, до этого тестил на протеусе все работало, а в действительности вообще не принимаются не передаются данные, даже признаков жизни не подается, что делать, где капать, может кроме двух проводков еще нужно что-нибудь, куда-нибудь припоять, задействовано только 2 и 3 контакты Atmega8, на COM1 тоже 2 и 3.

Схему схемы в судию!!! какой корпус? На COM1 это что?Порт лпити или ком? Если ком, то еще бы о развязке сигналов подумать(на ком порту от+15 до-15 относительно общего).Так что возможно нужно мк будет поменять.
А вообще кроме входа выхода ещё и общий провод необходимо подключить...
В поисках истины человек развивается.
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

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

Сообщение avreal »

Ничегонеработает писал(а):Но ещё больше не понимаю, зачем это нужно.
Так цель та же самая
Ничегонеработает писал(а):свести на нет такой минус этого языка, как плохая читаемость исходника.
Только заход с другой стороны, минус как таковой пропадает :-)

Ну и, например, становится не страшно использовать те же protothreads, машина Даффа не пугает :-)
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

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

Сообщение Леонид Иванович »

avreal писал(а):становится не страшно использовать те же protothreads, машина Даффа не пугает :-)


Всё издеваетесь? :)
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

Сообщение Мастер Ломастер »

avreal писал(а):Только заход с другой стороны, минус как таковой пропадает :-)
Ну и, например, становится не страшно использовать те же protothreads, машина Даффа не пугает :-)

когда знаешь слишком много, начинаешь использовать свои знания с целью доказать, что они не напрасно лежат в голове. и из этого порой рождаются вещи, которые не в сказке сказать, ни пером описать... а простые смертные после взгляда на это и говорят: "Си - это кошмар нерожденного". причем все гуру во всех книжках пишут "будьте проще, если от написания двух операторов в двух строках смысл становится понятнее - так и пишите" и т.д. и т.п. однако сами пишут с точностью до наоборот. причем друг друга удивить у них все равно не выходит, а у остальных это вызывает только ужас... эффект Мерлина Мэнсона, однако :)))
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

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

Сообщение Леонид Иванович »

Мастер Ломастер писал(а):когда знаешь слишком много, начинаешь использовать свои знания с целью доказать, что они не напрасно лежат в голове


Вот-вот. Я даже определение таким знаниям придумал: "Знания, наличие которых в голове может быть установлено только путём специального спрашивания, называются бесполезными". Меня не перестаёт удивлять, что все люди стараются казаться на фоне других крутыми. Причем это делается даже в тех ситуациях, когда конкуренции нет. Я даже пост удивлённый когда-то написал об этом: http://leoniv.livejournal.com/110118.html Но мой друг, кандидат-психолог, отпостил на это дело простой ответ: мол, это глубинное свойство психологии, как плохих людей, так и хороших. Но я не прекращаю плохо одеваться, чтобы внешне соответствовать тому, что внутри.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

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

Сообщение urry »

Отчасти образование подобно какой-то заразной болезни - человек образованный разом становится непригодным к большому числу работ - и ты не можешь держать свою болезнь (то есть знания) при себе.(С) Т. Пратчетт.
желание заразить - чем еще объяснить сидение на форумах ...
:)
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

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

Сообщение Леонид Иванович »

urry писал(а):Отчасти образование подобно какой-то заразной болезни


Забавно!

urry писал(а):желание заразить - чем еще объяснить сидение на форумах ...


Cидение на форумах - заболевание посильнее образования :)
Аватара пользователя
Necroteeth
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс окт 10, 2010 17:43:48
Откуда: Воронеж

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

Сообщение Necroteeth »

Necroteeth писал(а):добрый день!
подскажите, пожалуйста, почему у меня какая-то хрень происходит:

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

#define F_CPU 1000000UL  // óêàçûâàåì ÷àñòîòó â ãåðöàõ
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/interrupt.h>
volatile int state=0;
volatile int decimal, entier;
int main()
{
   init();
   while(1)
   {
      for (int i=0;i<=20;i++)
      {
         decimal=i/10;
         entier=i%10;
         switch(state)
         {
            case 0:   PORTD=0b00100000;   PORTA=convert(entier);   break;
            case 1:   PORTD=0b01000000;   PORTA=convert(decimal);   break;
         }
         _delay_ms(250);
      }
   
   }
}

//***********************************************************************************
 
ISR(TIMER0_COMP)                     //îáðàáîò÷èê ïðåðûâàíèÿ òàéìåðà0
{
   state=~(state);
}

//***********************************************************************************

int Timer0_prepare()                  //ïðîöåäóðà èíèöèàëèçàöèè òàéìåðà0
{
   TIMSK|=(1<<OCIE0);                  //ðàçðåøèòü ïðåðûâàíèÿ ïî êîìïàðàòîðó òàéìåðà0

   TCCR0|=(1<<WGM00)|(1<<WGM01)|(1<<CS00)|(1<<CS02);//CTC mode, prescaler 1/1024
   TCCR0&=~(1<<CS01);

   OCR0=0b00001010;                  //êîìïàðàòîð íàñòðîåí ñðàáàòûâàòü ðàç â 10ms
   TCNT0=0b00000000;
}


//***********************************************************************************

int convert(int digit)                   //ïðîöåäóðà ïðåîáðàçîâàíèÿ ÷èñëà â ñèãíàë
{                                 //7-ñåãìåòíîãî èíäèêàòîðà
   int result;
   switch (digit)
      {
      case 0:   result=0b11000000; break;

      case 1: result=0b11111001; break;

      case 2: result=0b10100100; break;

      case 3: result=0b10110000; break;

      case 4: result=0b10011001; break;

      case 5: result=0b10010010; break;

      case 6: result=0b10000010; break;

      case 7: result=0b11111000; break;

      case 8: result=0b10000000; break;

      case 9: result=0b10010000; break;
      
      case 10: result=0b01111111; break;
      }
   return result;
}


int init()
{
   DDRA=0b11111111;
   DDRD=0b01100000;
   PORTD=0b00000000;
   Timer0_prepare();
   sei();
}


после входа в функцию convert программа переходит опять в начало функции main и в итоге ничего полезного не делает. где я допустил ошибку?
суть программы в том, чтобы на два индикатора АЛС321Б1 выводить число от 0 до 20. каунтер i должен перебирать число, а переменные decimal и entier хранить значения второго и первого разряда соответственно. текущий включенный индикатор должен определяться состоянием переменной state, которая изменяется (должна изменяться) по прерыванию таймера0.

может, кто-то все же уделит минутку внимания и скажет, почему после использования функции convert программа начинает выполняться с начала функции main, а не с места, где эта функция была вызвана? был бы крайне благодарен
demiurg301
Опытный кот
Сообщения: 812
Зарегистрирован: Ср мар 18, 2009 21:14:33

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

Сообщение demiurg301 »

Может функцию main "вниз спустить" под всю остальную писанино. У меня так вообще не компилися, т.к. в вышестоящей функции не увидело бы нижестоящие.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

Сообщение Мастер Ломастер »

Necroteeth писал(а):может, кто-то все же уделит минутку внимания и скажет, почему после использования функции convert программа начинает выполняться с начала функции main, а не с места, где эта функция была вызвана? был бы крайне благодарен
за отведенное вам время можно было методом удаления по одному всех операторов в программе разобраться, из-за которого у вас происходит кака :)))

для макроса ISR необходимо указывать константы, оканчивающиеся на _vect - то, что указали вы не работает. правильно так:
ISR(TIMER0_COMPA_vect) - или как-то похоже (я же не в курсе, какой именно у вас МК и какие у него есть векторы прерываний)
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

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

Сообщение urry »

с разрядностью данных какие-то непонятки - инт все таки в большинстве случаев 16 битное...

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

#define F_CPU 1000000UL  // o'e^a`c,u^a^a`a*i` ?a`n~o`i^o`o' a^ a~a*?o"a`o~
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
volatile unsigned char state=0;
volatile unsigned char decimal, entier;

//----------
void init(void);
unsigned char convert(unsigned char digit);


//----------
ISR(TIMER0_COMP_vect)                    //
{
   state^=1;
}
//----------
int __attribute__((naked)) main (void)
{
char i;
   init();
   while(1)
   {
      for ( i=0;i<=20;i++)
      {
         decimal=i/10;
         entier=i%10;
    cli();
         switch(state)
         {
            case 0: 
         PORTD=0b00100000; 
         PORTA=convert(entier);
         break;
            case 1:
         PORTD=0b01000000;
         PORTA=convert(decimal);
         break;
         }
   sei();
       _delay_ms(250);
      }
   
   }
}

//***********************************************************************************


//***********************************************************************************

void Timer0_prepare(void)                  //i"?i^o"a*a"o'?a` e`i'e`o"e`a`e"e`c,a`o"e`e` o`a`e'i`a*?a`0
{
                  //?a`c,?a*?e`o`u" i"?a*?u^a^a`i'e`y" i"i^ e^i^i`i"a`?a`o`i^?o' o`a`e'i`a*?a`0

   TCCR0|=(1<<WGM00)|(1<<WGM01)|(1<<CS00)|(1<<CS02);//CTC mode, prescaler 1/1024
   TCCR0&=~(1<<CS01);

   OCR0=0b00001010;                  //e^i^i`i"a`?a`o`i^? i'a`n~o`?i^a*i' n~?a`a'a`o`u^a^a`o`u" ?a`c, a^ 10ms
   TCNT0=0b00000000;
   TIMSK|=(1<<OCIE0);
}


//***********************************************************************************
unsigned char convert(unsigned char digit)                   //i"?i^o"a*a"o'?a` i"?a*i^a'?a`c,i^a^a`i'e`y" ?e`n~e"a` a^ n~e`a~i'a`e"
{                                 //7-n~a*a~i`a*o`i'i^a~i^ e`i'a"e`e^a`o`i^?a`
 volatile unsigned char result=0;
   switch (digit)
      {
      case 0:   result=0b11000000; break;

      case 1: result=0b11111001; break;

      case 2: result=0b10100100; break;

      case 3: result=0b10110000; break;

      case 4: result=0b10011001; break;

      case 5: result=0b10010010; break;

      case 6: result=0b10000010; break;

      case 7: result=0b11111000; break;

      case 8: result=0b10000000; break;

      case 9: result=0b10010000; break;
     
      case 10: result=0b01111111; break;
      }
   return result;
}
//----------

void init(void)
{
   DDRA=0b11111111;
   DDRD=0b01100000;
   PORTD=0b00000000;
   Timer0_prepare();
}
Аватара пользователя
Necroteeth
Потрогал лапой паяльник
Сообщения: 362
Зарегистрирован: Вс окт 10, 2010 17:43:48
Откуда: Воронеж

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

Сообщение Necroteeth »

хм... спасибо за ответы, попробую...
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

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

Сообщение avreal »

Мастер Ломастер писал(а):
avreal писал(а):Только заход с другой стороны, минус как таковой пропадает :-)

когда знаешь слишком много
Вы мне льстите. Я считаю, что я знаю слишком мало (для того, чтобы писать С-компиляторы), поэтому только объясняю другим нюансы языка С и связанные с ними особенности поведения компиляторов.

Кстати, с точки зрения тусовки у меня под окном на лавочке -- боюсь, самый расчайниковый чайник с этого форума знает слишком много. Ну так что нам всем тут делать теперь?

А по поводу полезности-бесполезности...
Ну если объяснение нюансов С тутошним обитателям -- занятие бесполезное, то и применяемые для этого знания суть никому не нужная (тут) суета.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

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

Сообщение Леонид Иванович »

avreal писал(а):Кстати, с точки зрения тусовки у меня под окном на лавочке


Эх, жалко, далеко Ваша лавочка...
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

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

Сообщение avreal »

Ничегонеработает писал(а):
avreal писал(а):Кстати, с точки зрения тусовки у меня под окном на лавочке
Эх, жалко, далеко Ваша лавочка...
Выслал бы почтой, если бы было возможно. Или с Сергеем передал бы, только ему фургончик побольше прикупить придётся :-)
Как они надоели -- каждый день «от обеда до дождя» одно и то же «гы-гы». Прям Воннегутовские «Галапагосы».
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Transistor
Прорезались зубы
Сообщения: 209
Зарегистрирован: Пт авг 27, 2010 18:05:09

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

Сообщение Transistor »

Как сделать глобальную переменною в CCS pic чтоби она была выдна изовсех функций.
Да кстате как передать строку в функцию или масив из чисел в функцию.
skader
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Чт дек 23, 2010 19:40:47

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

Сообщение skader »

В компиляторе H-Tech picc в упор неработает такая конструкция
while ( (TMR1H<100) || (!RCIF) )
пришлось обходить костылями из for и двух break-ов. Так и должно быть?
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

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

Сообщение Мастер Ломастер »

skader писал(а):В компиляторе H-Tech picc в упор неработает такая конструкция
while ( (TMR1H<100) || (!RCIF) )
пришлось обходить костылями из for и двух break-ов. Так и должно быть?
а что такое RCIF? если это НОМЕР БИТА в каком-то управляющем регистре - могут быть чудеса :)))
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

skader писал(а):В компиляторе H-Tech picc в упор неработает такая конструкция
while ( (TMR1H<100) || (!RCIF) )
C чего Вы взяли что она не работает ? Скажите, что Вы ей пытаетесь сделать, и покажите код, привязанный к этой конструкции.
skader
Первый раз сказал Мяу!
Сообщения: 34
Зарегистрирован: Чт дек 23, 2010 19:40:47

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

Сообщение skader »

RCIF - бит поднимаемый при приходе байта по юсарту.

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

while ( (TMR1H<100) || (!RCIF) )
{}
дальнейший код

В этом месте должна быть задержка или до прихода байта или до определенного превышением таймером определенного порога. По отдельности while ( TMR1H<100) и while (!RCIF) работали прекрасно.
Ответить

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