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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

Tolmi писал(а): в первом случае x-- будет выполнено только если a<=10 и любом b
вот этот момент мне и не понятем
можете разжевать почему именно так а не иначе ?
Tell Me The Truth
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

Сообщение eess9 »

народ подскажите плиз!

2 семисегментных индикатора включены каждый на свой 74HC4094. Регистры включены последовательно. Надо вывести двухзначное число data1 (тип int) на индикаторы. Использовал следующий код (data2 тоже int)

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

data2=data1/10;
	inder(data1);
	inder(data1-data2*10);
Но выводится только младший разряд. Причем функция inder() работает корректно. Если, например, написать

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

inder(1);inder(2);

То 12 выдается нормально на индикаторы. в чем я туплю? Ведь если допустим data1=24; то data2=data1/10; даст 24/10=2 (ведь тип то int), а дальше data1-data2*10
- 24-2*10=4. Вроде все корректно.
Реклама
Говорящий с текстолитом
Сообщения: 1658
Зарегистрирован: Вс дек 11, 2011 05:25:04
Откуда: Киев, Украина

Сообщение Tolmi »

FreshMan писал(а): вот этот момент мне и не понятем
можете разжевать почему именно так а не иначе ?
Учитесь читать код. Иначе как писать программы, если Вы даже не может их прочесть ?
In theory, theory and practice are the same. In practice, they're not.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

как работает оператор if я знаю......., а вот смысл вышеизложенной команды я толком понять не могу :)
Tolmi писал(а):Учитесь читать код.
да оно понятно......, мы всю жизь чему-то учимся....., подскажите если можете :wink:
Tell Me The Truth
Реклама
Эиком - электронные компоненты и радиодетали
Говорящий с текстолитом
Сообщения: 1658
Зарегистрирован: Вс дек 11, 2011 05:25:04
Откуда: Киев, Украина

Сообщение Tolmi »

eess9 писал(а):

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

data2=data1/10;
	inder(data1);
	inder(data1-data2*10);
А почему не использовать

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

inder(data/10);
inder(data%10);
Так заработает ? :tea: И симпатичнее...




FreshMan писал(а):как работает оператор if я знаю......., а вот смысл вышеизложенной команды я толком понять не могу :)
А если записать лесенкой, так будет понятнее?

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

if (a>10) 
   {
    if (b<5)
        {
         x++;
    }
} 
else 
  {
   x--;
};
In theory, theory and practice are the same. In practice, they're not.
Контактная информация:
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

eess9 писал(а):Надо вывести двухзначное число data1 (тип int) на индикаторы. Использовал следующий код (data2 тоже int)

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

data2=data1/10;
	inder(data1); <<<<<<<<<<< ЕСЛИ data1 ТУТ БОЛЬШЕ 9, ТО ЧТО НА ИНДИКАТОР ВЫВЕДЕТ ФУНКЦИЯ ???? НАВЕРНОЕ data2 ДОЛЖНО БЫТЬ???
	inder(data1-data2*10);
в чем я туплю?
И что вы тупите :)) :)) :)) Внимательнее надо быть.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
Мудрый кот
Аватара пользователя
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

Сообщение Kavka »

Уважаемые любители валерьянки, поделитесь ссылочками на сравнение по размеру/качеству/корректности кода различный версий avr-gcc. Может у кого на примете есть какой материал? Порылся в гугле и очень мало чего нашёл толкового. В основном тесты avr-libc, да на форумах по мелочи. Про "не так искал" - вполне допускаю. :) Поэтому и спрашиваю.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

FreshMan, скачайте же Вы, наконец, книгу по Си и почитайте хоть чуть-чуть, Вы половину темы завалили подобными глупыми вопросами. Иначе так и будете всю жизнь учиться...
Столько учиться и задавать вопросы про простейший оператор - :facepalm:

eess9, а для чего эта строка

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

data2=data1/10;
, если Вы data2 даже и не пытаетесь вывести на индикатор ?
Подсчитать 10-тки подсчитали, а выводить их кто будет ? :)
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

Аlex писал(а):почитайте хоть чуть-чуть
читал и не единожды !
Аlex писал(а):Иначе так и будете всю жизнь учится...
каждому свое.....
Аlex писал(а):Вы половину темы завалили подобными глупыми вопросами.
спасибо за понимание....., всегда знал что на Вас можна расчитывать в трудную минуту....., больше спрашивать не буду.
Tell Me The Truth
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

А что Вы огорчаетесь ? Вы задали вопрос - Вам ответили, причём нормально... всё разжевали...
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Сообщение FreshMan »

Аlex писал(а):А что Вы огорчаетесь ?
а Вы сами подумайте, на языке Си :wink: , понравится ли Вам когда Вас будут обзывать дураком, в косвенной форме ?
Tell Me The Truth
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

Вопрос:main должна быть обязательно в конце?
И главный вопрос на счет char array[512] ; пишет ошибку на счет Hardware Stack has a dangerous low value; -200, мне очень желательно чтобы буфер array был на 512 байт чтобы читать блоками,как настроить?



Спойлер#include <stdio.h>
#include <mega48.h>
#include <delay.h>
#include <string.h>
#include <io.h>

#define data(x) SPDR=x; while (!( SPSR&(1<<7)));

int i,temp;
char array[512] ;




void main() {

DDRB=0b11101111;



// 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x33;




//настройка SPI
SPCR=0b01010011;
SPSR=1;


//подаем 74 импульса
PORTB.2=1;
delay_ms(10);

for(i=0;i<10;i++)
{

data(0xff)
}
PORTB.2=0;


printf(" --------------MMC------------- \r\n");

//CMD0


data(0x40);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);


while (temp!=0x01)
{
data(0xff);
temp= SPDR;
if (i>10)
{data(0x40);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);
i=0;
}
i++;

}
printf("CMD0 proshlo uspeshno temp=%d\n\r",temp,"\r\n");

//CMD1
data(0x41);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);
while (temp!=0x00)
{data(0xff);
temp= SPDR;
if (i>20)
{data(0x41);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);
i=0;
}
i++;
}

printf("CMD1 proshlo uspeshno temp=%d\n\r",temp,"\r\n");
delay_ms(20);
printf("CID chitaet \r\n");
//CID регистр чтение байтов
data(0x4A);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);
for (i=0;i<16;i++)
{
data(0xff);
array=SPDR ;
}

for (i=0;i<16;i++)
{
printf(" %d",array," ") ;
}
printf("\r\n") ;

printf("CSD chitaet \r\n");
//CID регистр чтение байтов
data(0x4A);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);
for (i=0;i<16;i++)
{
data(0xff);
array=SPDR ;
}
for (i=0;i<16;i++)
{
printf(" %d",array," ") ;
}
printf("\r\n") ;

read(2) ;
}






void read(int m) // сколько секторов читаем
{
//CMD17 чтение байтов
data(0x52);
data(0x00);
data(0x03);
data(0xf6);
data(0x00);
data(0x95);
i=0;
while (temp!=0xfe)
{ data(0xff);
temp= SPDR;
}
printf("CMD17 proshlo uspeshno temp=%d\n\r",temp,"\r\n");

for (i=0;i<m;i++) //чтение 512 кб
{
for (i=0;i<512;i++) //чтение 512 кб
{
data(0xff);
array=SPDR ;
}

for (i=0;i<m;i++)
{
if (array!=0x00)
putchar(array) ;
}
}
data(0x4С);
data(0x00);
data(0x03);
data(0xf6);
data(0x00);
data(0x95);
i=0;
}
Вложения
Безымянный.GIF
(51.79 КБ) 296 скачиваний
Встал на лапы
Аватара пользователя
Сообщения: 135
Зарегистрирован: Вт фев 21, 2012 20:42:26
Откуда: Санкт-Петербург, Россия, Земля

Сообщение U235 »

спящий писал(а):главный вопрос на счет char array[512] ; пишет ошибку на счет Hardware Stack has a dangerous low value; -200, мне очень желательно чтобы буфер array был на 512 байт чтобы читать блоками,как настроить?
Никак не настроить - у Вашего МК 512 байт - это вся оперативная память. Вы пытаетесь всю её занять, а ведь нужно ещё место и под стек и под переменные.
А из наших труб идет необычный дым. Стой! Опасная зона! Работа мозга!...
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

тоесть у меня неполучиться сделать буфер на 512 цифр?
Опытный кот
Аватара пользователя
Сообщения: 736
Зарегистрирован: Пн янв 10, 2011 03:06:36
Откуда: Ростов-на-Дону

Сообщение Goldsmith »

спящий писал(а):Вопрос:main должна быть обязательно в конце?
Нет.
спящий писал(а):тоесть у меня неполучиться сделать буфер на 512 цифр?
Может получиться, если будете хранить по 2 цифры в байте. При таком объеме оперативной памяти нужно быть экономнее.
Любой дурак может писать код. Настоящий профессионал - это тот, кто способен постоянно создавать продукт высокого качества, укладываясь при этом в бюджет.
J. Ganssle
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

FreshMan писал(а):
Аlex писал(а):А что Вы огорчаетесь ?
а Вы сами подумайте, на языке Си :wink: , понравится ли Вам когда Вас будут обзывать дураком, в косвенной форме ?
Никто Вас дураком не называл, даже в косвенной форме. Я Вас назвал лентяем. И книжек Вы не читали по множеству раз, не врите... всё очевидно...
Мне вообще не понятно, как Вы пишете программы, не зная даже как работает оператор if ... :roll: А в книжки про него можно подробно прочитать, не лазая на форумы.
Контактная информация:
Мучитель микросхем
Сообщения: 447
Зарегистрирован: Ср сен 26, 2012 14:12:47
Откуда: Київ

Сообщение Cheba »

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

Сообщение vitalik_1984 »

я тоже думаю что он такой огромный не нужен.Можно ведь читать именно то, что нужно, а если невозможно добраться сразу до того, что нужно- то можно просто ненужную информацию пропустить.
Видимо на этом говорилGoldsmith
Goldsmith писал(а):Может получиться, если будете хранить по 2 цифры в байте. При таком объеме оперативной памяти нужно быть экономнее.
скажем так можно хранить только 256 байт пусть из первой половины блока потом если нужно то храним из второй половины.А то что не попадает в нужную область памяти можно просто пропускать.
Простите за повторение, просто хотелось чтобы было понятнее.
Контактная информация:
Мучитель микросхем
Сообщения: 447
Зарегистрирован: Ср сен 26, 2012 14:12:47
Откуда: Київ

Сообщение Cheba »

vitalik_1984 писал(а): скажем так можно хранить только 256 байт пусть из первой половины блока потом если нужно то храним из второй половины.
даже 256 - обычно много. Что там такого ценного, чтобы хранить даже половину блока? Всё равно обрабатываются как правило кусочки совсем небольшой длины. Или там RAR архив на флэшке?
Тогда выбор МК для решения задачи не оправдан.

Да, есть ещё задачи, когда обязательно нужно выбрать из какого-то устройства весь блок в 512 байт, даже если он целиком не нужен. Но для таких целей лучше использовать внешнюю RAM, перелить в неё, а потом уж искать нужное в ней и выбирать для работы в МК.
Потрогал лапой паяльник
Сообщения: 303
Зарегистрирован: Сб янв 08, 2011 13:48:41

Сообщение спящий »

как найтислово в массиве так,и вывод индекса I ?(слово lol):

for (i=0;(i<200&&(array!='l')&&(array[i+1]!='o')&&(array[i+2]!='l'));i++)
{
}

printf("vivod indeksa lol",i,"\r\n");
Ответить

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