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

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

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

Сообщение Chip115 »

Все спасибо! Буду пробовать ))
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
XyLigan_xD
Родился
Сообщения: 9
Зарегистрирован: Вт мар 20, 2012 19:02:25

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

Сообщение XyLigan_xD »

Народ,срочно нужна помощь.Имеется программа для МК,написанная на языке С.Но к ней нужна блок-схема,и комментарии к каждой строчке.
Нужна помощь сегодня,т.к в понедельник утром уже надо сдавать..
Очень надеюсь на помощь. Пишите в ЛС,кто сможет помочь.Программа не большая,и действий она делает мало.
В ЛС подробно опишу и со схемой,что делает программа
Вложения
Код.txt
(881 байт) 168 скачиваний
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Специально для лентяев, в качестве исключения, прогулявших сессию.
Код.txt
(2.45 КБ) 155 скачиваний

Без всяких схем понятно, что что то вы там намутили...
Можно проще ваш ентот код сделать:

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


  PORTB 
0b11111111;    //все ноги порта B высокий уровень - выход.(выключены СД?)
    
PORTD 0b11111111;}    //все ноги порта подтяжка на плюс включена.
   
if ((PIND 0b00000001) != _states[0]) {    //Когда кнопка(выключатель),подключенная(ный) к 0 ноге не нажата(не включен)
                    //и не равен нулевой ячейке массива _states то
      
if (_states[0]) _light = !_light;        // если нулевая ячейка массива _states не ноль( что за чушь?)
      
_states[0] = PIND 0b00000001;}    //при не нажатом выключателе присваиваем состояние 
                    //ноги ненажатого выключалеля( что за чушь?)
    
if ((PIND 0b00000010) != _states[1]) {    //Когда кнопка(выключатель),подключенная(ный) к 1 ноге не нажата(не включен)
                                                                 //и не равен первой ячейке массива _states то
         
if (_states[1] && ++_mode == 5_mode 1;//если ячейка массива (тут у меня мозг взрывается)
         
_states[1] = PIND 0b00000010;//тут присваиваем значение если кнопка(выключатель),подключенная(ный) к 1 ноге не нажата(не включен)
                                                        //и не равен первой ячейке массива _states
    
}//конец если кнопка(выключатель),подключенная(ный) к 1 ноге не нажата(не включен)
       
}
 

Например вот так:

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


select 
= (PIND 0b00000011);
switch (
select) {//точка выбора действий зависит от select
     
case 1:  if (_states[0]) _light = !_light;    // тут сами сообразите
      
_states[0] = PIND 0b00000001;}    //
     
case 2
     case 
3
     case 
4:
 
В поисках истины человек развивается.
____Eugene____
Открыл глаза
Сообщения: 47
Зарегистрирован: Вт авг 31, 2010 18:26:35

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

Сообщение ____Eugene____ »

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

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

Сообщение coredumped »

____Eugene____ писал(а):как можно обратиться к переменной или массиву определенного в другом файле ?

элементарно - объявите ее (переменную) точно так же, как во внешнем файле, только перед объявлением добавьте слово extern
пример:
extern int i;
extern char c[9999];
Все будет только лучше, в крайнем случае - хуже.
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Добрый вечер... Решил переходить с WinAVR на CVAVR. Оказалось здесь много что не состыковывается. Косяков много было, но в результате переработок убрал многие, но одна ошибка всё же осталась.
#include <mega8.h>
if (tim == 10) {code = butte / 16 + 1;
lcd_init( 16 );
lcd_clear( );
lcd_gotoxy( 0,0 );
lcd_putsf( unsigned char code );
lcd_gotoxy( 0,1 );
lcd_putsf( "ЛОШАРА" );
while( 1 ){ };
}

Ругается на выделенную строку

Error: C:\Users\isx\Desktop\Ôëåêñ\Íîâàÿ ïàïêà\167.c(28): function argument #1 of type 'flash unsigned char' is incompatible with required parameter of type 'flash unsigned char *'

Подскажите что нужно подправить, у меня ато варианты кончились...
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

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

Сообщение ut1wpr »

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

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

Сообщение isx »

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

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

Сообщение isx »

С проблемой разобрался.. Надо было включить библиотеку <stdio.h> . Странно, но нигде об этом не упомяналось :dont_know:
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Имеется вот код:
void main( void )
{
DDRB = 0b11111111;
for(;;)
{
for (butte=1;butte<=8;butte*2) {
PORTB = butte;
}
}
}

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

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

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

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

butte *= 2
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Это почему так :shock: :shock:
Понятия не имею почему, но работает :) Спасибо огромное..)
Последний раз редактировалось isx Ср май 23, 2012 09:35:44, всего редактировалось 1 раз.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Потому что так записывается

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

butte = butte*2
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

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

Сообщение ut1wpr »

butte * 2 // Значение переменной butte удвоить (сместить влево на один разряд). А дальше? Чему присвоить результат действия? Куда впихнуть?

См. предыдущий пост. Там правильно. И учи матчасть.
Ну и в свете "смещения битов" лучше для понимания сути записать так:

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

for( i = 1; i <= 8; i <<= 1 ) // your code here
С уважением,
Виктор.
Аватара пользователя
Барсук
Открыл глаза
Сообщения: 64
Зарегистрирован: Сб апр 24, 2010 08:48:05
Откуда: Новосибирск

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

Сообщение Барсук »

доброго времени суток
обясните пожалуйста чем отличаются эти две записи

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

key=key|0x10;

так работает
а так нет

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

key|=(1<<5);

вроде одно и тоже
Я НЕ суслик, Я БАРСУК
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

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

Сообщение uldemir »

потому что 0x10 это 1<<4
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
cahek80
Держит паяльник хвостом
Сообщения: 903
Зарегистрирован: Сб сен 11, 2010 17:32:42

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

Сообщение cahek80 »

Барсук, 0x10 = 16, (1<<5) = 32
или я ошибаюсь?

ЗЫ
упс.. опередили.
Не нужно дергать спящего тигра за усы! Не высыпается 3-ий день!
Аватара пользователя
Барсук
Открыл глаза
Сообщения: 64
Зарегистрирован: Сб апр 24, 2010 08:48:05
Откуда: Новосибирск

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

Сообщение Барсук »

Спасибо
блин иза такой простой ошибки целый день убил :oops:
позор на мою седую голову
с уважением барсук
Я НЕ суслик, Я БАРСУК
Аватара пользователя
isx
Поставщик валерьянки для Кота
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

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

Сообщение isx »

Добрый вечер)... Помогите с алгоритмом для меню.
Имеется клавиатура 4х4 подключённая к атмеге8. Информация о нажатой клавише считывается с помощью кода

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

 if ((PINB&butt) == 0x00){
           key = butt*10+butte;

Значения butt и butte изменяются от 1 до 4, соответственно код 16-ой клавиши равен 44.
Так вот, нужно сделать меню, чтобы при нажатии на клавишу с кодом "44" появлялось новое меню с возможностью ввода числа с той же клавиатуры и одновременно всё это выводилось на ЖК дисплей (на дисплей выводится информация через char lcdA[] )
После повторного нажатия на клавишу с кодом "44" это число должно сохраниться в к-нибудь переменной не как символ, а как число.
Писать код я не прошу, интересуют только следующие моменты:
1)Как сделать меню, чтобы была иерархия, и последующие нажатие на клавишу не сбивало предыдущий выбор?
Что то типо того:

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

                                    -Установить Ширину             - "ввод числа"
            - Настройка            -Установить Высоту              - "ввод числа"
                                    -Установить Длину               - "ввод числа"
 Меню
                                    -Установить значение "а"     - "ввод числа"
            - Ввод                   -Установить значение "b"     - "ввод числа"     
                                    -Установить значение "c"     - "ввод числа"


2) Как при вводе числа (на самом деле данные будут не числовые, а символьные) прибавлять последующий символ слева от предыдущего?
3) Как преобразовать символьную строку в числовое значение и возможно ли в СИ такое?

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

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

Сообщение vitalik_1984 »

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

есть предложение использовать switch в вашем приложении 4х4 это 4+4 бита можно в одной переменной поместить результат нажатия клавиш.

можно и как код клавиши сохранять.

если как у вас,то

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


unsigned char buttons
(unsigned char button){

switch (button){
case 44:{//тут нужно сделать сохранение видимого введенного числа;
menu (punkt++);break}//тут меню это функция вызова строк меню по номеру punkt
case 11://обрабатываем нажатие 1
{chislo[punkt][numb_chislo++]=0x31;//тут добавляем к строке нажатую кнопку
menu (punkt);//обновляем экран
}
default :break.
       }//end of switch

 

примерно так можно.правда только что придумал.сделайте текст алгоритма,можно ваш код оформить.
В поисках истины человек развивается.
Ответить

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