Страница 6 из 386

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

Добавлено: Вт дек 14, 2010 22:46:53
Liv
O-LED: у Вас на аватаре сегменты для цифры "0" - ровненькие, а для остальных цифр какие-то кривые. С чем это связано?

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

Добавлено: Вт дек 14, 2010 22:57:02
O-LED
korr_den см личку

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

Добавлено: Вт дек 14, 2010 23:41:37
avreal
O-LED писал(а):ага. переменные int прекрасно работали беззнаковыми переменными без всяких signed
Вероятно, всё-таки знаковыми, а не беззнаковыми.

"просто" int — это предусмотренная стандартом сокращённая запись для signed int
short — штатное сокращение для signed short int
long — для signed long int

Всё честно.

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

Добавлено: Ср дек 15, 2010 10:59:41
V2oD2o
int x = 0;
char s[17];

interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
lcd_gotoxy(0,0);
lcd_puts(s);
x=0;
TCNT1H = 0xE1;
TCNT1L = 0x7A;
}

void main(void)

{

lcd_init(16);
lcd_clear();
DDRB=0b10000000;
TCCR1B=0x05;
TIMSK=0x04;
ACSR=0x80;
TCNT1H = 0xE1;
TCNT1L = 0x7A;
#asm ("sei");

while(1) { if (PINB.0) { sprintf(s, "%d ", x); x=x+1; } }

}

расчет:
1/8Мгц = 125нс на такт
125*1024=128мс на таймере /1024
1c/125мс=7812 тактов на 1с
65535-7812=57722=E17A

на PINB.0 генератор 1000Гц, программа выдает 2020..2022 на дисплее.. почему? :)

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

Добавлено: Ср дек 15, 2010 11:14:13
Gudd-Head
V2oD2o писал(а):почему?
Потому что вы не пробовали писать программу с комментариями???

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

Добавлено: Ср дек 15, 2010 11:54:06
ARV
V2oD2o писал(а):

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

while(1) { if (PINB.0) { sprintf(s, "%d ", x); x=x+1; } }
на PINB.0 генератор 1000Гц, программа выдает 2020..2022 на дисплее.. почему? :)
то есть вы считаете, что за 0,5 миллисекунды, пока у вас 1 на пине, x увеличится только на 1? у вас же все это дело в цикле, т.е. получается, пока 1 на пине, у вас может бог знает сколько раз цикл провернуться!

кстати, в прерываниях не рекомендуется заниматься выводом на дисплей. вообще не рекомендуется использовать функции, особенно когда неизвестно, сколько времени они занимают.

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

Добавлено: Ср дек 15, 2010 12:58:50
V2oD2o
Спасибо за ответ!
пытаюсь разобраться далее:

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

int x, y = 0;
char s[17];

interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
    x=0; //обнуляем отсчет за 1с
    y=1; //обновить дисплей?
    TCNT1H = 0xE1; //ставим таймер на точку 57722
    TCNT1L = 0x7A;
}
 
void  main(void)

{
    
    lcd_init(16); //LCD ini
    lcd_clear();
    DDRB=0b10000000; // первый бит PORTB - вход
    TCCR1B=0x05; // делим таймер на 1024
    TIMSK=0x04; 
    ACSR=0x80;
    TCNT1H = 0xE1; // ставим стартовую точку 57722
    TCNT1L = 0x7A;
    #asm ("sei");
    
while(1) { 
    if (y==1) { lcd_gotoxy(0,0); lcd_puts(s); y=0; } // 1 - обновляем, 0 - пропускаем
    if (PINB.0) { sprintf(s, "%d ", x); x++; while(PINB.0) {} }  // PINC.0=1 - прибавляем 1 к частоте, циклим такт
    }

}

все четко считает.. но только до 2800 Гц.. далее занижает - чем дальше тем больше, видимо где то у меня слишком много времени занимает просчет :?

есть идеи ?

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

Добавлено: Ср дек 15, 2010 13:11:30
Gudd-Head
V2oD2o писал(а):видимо где то у меня слишком много времени занимает просчет :? есть идеи ?
Сколько времени, по-вашему, занимает функция sprintf?

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

Добавлено: Ср дек 15, 2010 14:04:02
lix
вот примерный вариант без комментов :(

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

Добавлено: Сб дек 18, 2010 18:08:19
Кислый
всем привет. как в си коде для авр напрямую обратиться к ячейке памяти озу ?
на ассемблере пример видел. а на си - нет.

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

Добавлено: Сб дек 18, 2010 18:19:18
ARV
Кислый писал(а):всем привет. как в си коде для авр напрямую обратиться к ячейке памяти озу ?
на ассемблере пример видел. а на си - нет.

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

unsigned char *ptr;
ptr = (void*)123; // будем обращаться к ячейке с адресом 123
*ptr = 0; // обнулили эту ячейку
*ptr = 20; // записали туда 20
ptr++; // теперь будем работать со 124-й ячейкой
*ptr *= 2; // удвоим содержимое ячейки с адресом 124

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

Добавлено: Сб дек 18, 2010 18:21:18
lix
Кислый писал(а):всем привет. как в си коде для авр напрямую обратиться к ячейке памяти озу ?
на ассемблере пример видел. а на си - нет.
в си это не надо. тебе зачем?

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

// тут был код, но ARV опередил...

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

Добавлено: Сб дек 18, 2010 19:41:49
Кислый
ARV,
т.е. мы в любом случае должны выделить место для указателя ? но при этом не контролируем куда он запишется.. замечательно ))

Lix,
тебе зачем?
бесит меня неконтроллируемое распределение памяти при написании кода на си. была мысль обращаться так ( по адресам ) к РОН, РВВ и ОЗУ.
время требует си, а душа ассемблера ))

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

Добавлено: Сб дек 18, 2010 19:47:17
Кислый
или ну его нафиг и да здраствует Алгоритм Билдер ?

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

Добавлено: Сб дек 18, 2010 19:50:24
ARV
Кислый писал(а):ARV,
т.е. мы в любом случае должны выделить место для указателя ? но при этом не контролируем куда он запишется.. замечательно ))
вы, когда по телефону звоните, тоже не контролируете по каким парам в кабеле сигнал идет, какими релюхами коммутируется... но это ведь не мешает вам говорить?
распределение памяти четко регламентировано типом переменной. а много ли вам будет счастья от того, что вы будете знать адрес переменной?! он вам нужен? если да - вот вам указатель, а если нет - ну и нафига?!

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

Добавлено: Сб дек 18, 2010 19:58:19
Кислый
аналогия интересная. но! в ассемблере мы заранее знаем куда и что записываем. В си мы сначала записывам, потом только узнаем куда.. соответственно по аналогии с телефонным разговором : на телефонном аппарате кнопка "позвонить КОТУ". нажимаем, звоним, разговариваем (разговариваем с котом о_0) . он при этом только у самого кота узнаем что он в африке.. и мы попали на денюшку (( нафиг

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

Добавлено: Сб дек 18, 2010 20:11:50
Кислый
распределение памяти четко регламентировано типом переменной
кстати не уверен. читал, просто порядком обьявления переменных разных типов можно выиграть некоторое количество памяти.. ибо стандарт с не требует от компилятора беспросветного размещения переменных в памяти. если сохранил - напишу.

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

Добавлено: Сб дек 18, 2010 20:26:16
ARV
Кислый писал(а):
распределение памяти четко регламентировано типом переменной
кстати не уверен. читал, просто порядком обьявления переменных разных типов можно выиграть некоторое количество памяти.. ибо стандарт с не требует от компилятора беспросветного размещения переменных в памяти. если сохранил - напишу.
не читайте перед ужином большевистских газет :)

во-первых, ваша аналогия со звонком - не верна. правильная аналогия, не знать не КОМУ звоним, а КАК звоним. Си гарантирует, что в переменной будет сохранено то, что вы туда положили до тех пор, пока эта переменная существует. назначение переменной - ХРАНИТЬ данные. ГДЕ и КАК - это уже второстепенно и не сильно вас должно заботить. если генерал будет думать о действиях каждого рядового - он битвы не выиграет. поэтому, когда ассемблер давет вам возможность контролировать каждый бат памяти, надо подумать - а помогает ли это победе в битве или только отнимает мозговые силы?

во-вторых, если стандарт чего-то не требует, это не означает, что компилятор должен поступать по-идиотски. особенно компилятор для малоресурсных моделей МК.

наконец, в-третьих (уже повторяюсь), оставит в памяти компилятор дыры или нет - вам оно надо? главное, что все будет работать :)))

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

Добавлено: Сб дек 18, 2010 21:46:35
avreal
Кислый писал(а):
распределение памяти четко регламентировано типом переменной
кстати не уверен. читал, просто порядком обьявления переменных разных типов можно выиграть некоторое количество памяти..
Это называется «выравнивание» и оно «четко регламентировано типом переменной». Но 8-битников это не касается вообще. У них единица выравнивания — байт и дыр быть не может.

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

Добавлено: Сб дек 18, 2010 21:51:11
avreal
Кислый писал(а):бесит меня неконтроллируемое распределение памяти при написании кода на си. была мысль обращаться так ( по адресам ) к РОН, РВВ и ОЗУ.
время требует си, а душа ассемблера ))
Не советую. Получите объединение недостатков.