Например TDA7294

Форум РадиоКот • Просмотр темы - Вопросы по С/С++ (СИ)
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт июл 10, 2025 01:41:40

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7669 ]     ... , , , 8, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср дек 22, 2010 21:45:07 
Открыл глаза

Зарегистрирован: Пт ноя 26, 2010 23:12:18
Сообщений: 50
Рейтинг сообщения: 0
Здравствуйте!
кто может прокомментировать код на Си?

Очень нужно, думаю многим пригодится :)
Код:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <avr/pgmspace.h>

#include "font.h"

const prog_char message[] = " \003\001 Hello World! Write message here! ";
unsigned char message_length = 0;

unsigned int display_idx = 0;
unsigned char scan_idx = 0;

unsigned int signal_cnt = 0;
unsigned int speed = 200;

unsigned char display[8] = {0,0,0,0,0,0,0,0};

SIGNAL(SIG_OVERFLOW0) {
   if(PIND & _BV(PIND6)) {
      signal_cnt++;
   } else {
      speed = 200;
   }

   if(signal_cnt>speed) {
      signal_cnt = 0;

      speed -= 40;
      if( speed < 40 ) {
         speed = 40;
      }

      unsigned char i;
      for(i=0; i<8; i++) {
         unsigned char char_idx = (display_idx+i)%4;
         unsigned char msg_idx = ((display_idx+i-char_idx)/4)%message_length;
         display[i] = pgm_read_byte(font+(pgm_read_byte(message+msg_idx))*4+char_idx);
      }

      display_idx++;
      if(display_idx>(message_length+2)*4-9) {
         display_idx = 0;
      }
   }

   PORTB = ~(0x000000001 << scan_idx);
   PORTD = display[scan_idx];

   scan_idx++;
   if(scan_idx>6) {
      scan_idx = 0;
   }
}


int main(void) {
   message_length = strlen_P(message);
   signal_cnt = speed+1;

   DDRB = 0b01111111;
   PORTB= 0b01111111;
   DDRD = 0b00011111;
   PORTD= 0b00000000;

   TCNT0 = 0;
   TIMSK = _BV(TOIE0);
   TCCR0 = 3;

   sei();

   for(;;) {
      asm("sleep");
   }

   return 0;
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср дек 22, 2010 22:06:22 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 52
Зарегистрирован: Чт дек 31, 2009 19:27:45
Сообщений: 842
Откуда: Бровари, Україна
Рейтинг сообщения: 0
Gudd-Head писал(а):
А у меня sprintf() сожрало больше килобайта (!) флэш-памяти :(
А так и должно быть. Даже за два может перевалить, если полная поддержка всех форматов сделана. Стека — зависит от реализации, в avr-gcc он есть байт двадцать в варианте без плавающих форматов и байт сорок с плавающими.

*printf по сути интерпретаторы простого языка управления выводом. Если они используются только с форматными строками вида "%d", а место во флеше жмёт, то лучше itoa() использовать или вообще вручную.
*printf становятся интересными когда кило-два флеша не жалко, чтобы позволить себе писать
Код:
    printf( "foo = %5d (%04X), moo = %+dV", var1, var1, var2);
вместо
Код:
    put_str( "foo = " );
    put_int( var1 ); // да, тут ещё надо как-то объяснить, что короткие числа надо дополнять до 5 знаков пробелами
    put_str( " (" );
    put_hex( var1 ); // а тут нужно вывести старшие незначащие нули до ширины поля 4 знака
    put_str( "), moo = " );
    put_int( var2 ); // а тут пробелами дополнять не надо, но если число положительное, то перед ним тоже надо знак нарисовать
    put_char( 'V');

Я уже не говорю про
Код:
    int a;
    printf( "%*c", a, 'I');
которое означает приблизительно
Код:
    if( a > 0 ) {
        int b = a;         // a ещё будет нужно ниже
        do put_char( ' ' ); while( --b);
    }
    put_char( 'I' );
    if( a < 0 ) {
        do put_char( ' ' ); while( ++a);
    }
Да, не всегда нужно аж такое, но программируемую ширину поля вывода я иногда использую :-)

_________________
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт дек 23, 2010 16:45:19 
Открыл глаза

Зарегистрирован: Пт ноя 26, 2010 23:12:18
Сообщений: 50
Рейтинг сообщения: 0
А мне кто нить поможет? :? :cry:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт дек 23, 2010 16:51:14 
Друг Кота
Аватар пользователя

Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19693
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Maximka_18 писал(а):
А мне кто нить поможет?

А зачем?

_________________
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Измерить нннада?


Вернуться наверх
 
Выбираем индустриальные и медицинские источники питания MEAN WELL в открытом исполнении

Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт дек 23, 2010 16:53:01 
Опытный кот

Карма: 5
Рейтинг сообщений: 0
Зарегистрирован: Вс янв 17, 2010 15:32:19
Сообщений: 701
Откуда: Курган
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Gudd-Head писал(а):
Maximka_18 писал(а):
А мне кто нить поможет?

А зачем?


а за что? :)))

это вывод на сообщения на светодиодную матрицу, да. :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт дек 23, 2010 17:21:40 
Открыл глаза

Зарегистрирован: Пт ноя 26, 2010 23:12:18
Сообщений: 50
Рейтинг сообщения: 0
:dont_know:


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт дек 23, 2010 21:15:32 
Опытный кот
Аватар пользователя

Зарегистрирован: Вс янв 18, 2009 21:12:49
Сообщений: 703
Рейтинг сообщения: 0
Комментирую:

Код приведён не полностью. Стиль хороший, читабельный. Прерывание по переполнению таймера задействовано. Присутствует излишество в описании типов переменных, но это не портит общее восприятие программы.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт дек 24, 2010 21:39:50 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1900
Откуда: Москва
Рейтинг сообщения: 0
:))) :))) :)))
молодца, Asteroid!

_________________
Ставим плюсы: )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб дек 25, 2010 18:33:46 
Вымогатель припоя
Аватар пользователя

Карма: 3
Рейтинг сообщений: 4
Зарегистрирован: Сб сен 20, 2008 12:12:30
Сообщений: 525
Откуда: Minsk
Рейтинг сообщения: 0
Maximka_18 писал(а):
кто может прокомментировать код на Си?


Много магических чисел. Что такое 40? А 200? Нужно определить константы типа MIN_SPEED и т.д.
Ну и очень круто написано вот это "0x000000001 << scan_idx" :) Почему не "1 << scan_idx"?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб дек 25, 2010 21:18:40 
Открыл глаза

Зарегистрирован: Пт ноя 26, 2010 23:12:18
Сообщений: 50
Рейтинг сообщения: 0
Liv писал(а):
Maximka_18 писал(а):
кто может прокомментировать код на Си?


Много магических чисел. Что такое 40? А 200? Нужно определить константы типа MIN_SPEED и т.д.
Ну и очень круто написано вот это "0x000000001 << scan_idx" :) Почему не "1 << scan_idx"?


вот поэтому я и жду комментариев, чтобы понять что лишнее.
Спасибо)
:wink:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб дек 25, 2010 21:18:40 
Открыл глаза

Зарегистрирован: Пт ноя 26, 2010 23:12:18
Сообщений: 50
Рейтинг сообщения: 0
Liv писал(а):
Maximka_18 писал(а):
кто может прокомментировать код на Си?


Много магических чисел. Что такое 40? А 200? Нужно определить константы типа MIN_SPEED и т.д.
Ну и очень круто написано вот это "0x000000001 << scan_idx" :) Почему не "1 << scan_idx"?


вот поэтому я и жду комментариев, чтобы понять что лишнее.
Спасибо)
:wink:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб дек 25, 2010 21:56:04 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18401
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
если подключаете interrupt.h, то signal.h подключать не надо. более того, макрос SIGNAL "снаят с производства" и рекомендуется использовние макроса ISR. все "сигналы" - устаревшее, сохранено только для совместимости со старыми проектами

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн дек 27, 2010 20:45:45 
Грызет канифоль
Аватар пользователя

Карма: 1
Рейтинг сообщений: 4
Зарегистрирован: Пн окт 25, 2010 20:47:04
Сообщений: 271
Откуда: Казахстан, Астана
Рейтинг сообщения: 0
Люди помогите плиз, нужно вот что
Код:

uint8_t New; //есть переменная
uint8_t Data;
New = PINB & 0x03; //известно что будут приниматься байты 0х01, 0х10,0х11,0х00
   for (i=0;i<=3;i++)
   {
          Data = ? ; //как зделать так чтоб значение data было в таком виде 0b01101100 или в 0x6C
        }

_________________
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн дек 27, 2010 20:59:48 
Опытный кот

Карма: 5
Рейтинг сообщений: 0
Зарегистрирован: Вс янв 17, 2010 15:32:19
Сообщений: 701
Откуда: Курган
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Код:
Data = 0x6C


%) не понятно, что надо


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн дек 27, 2010 21:05:42 
Грызет канифоль
Аватар пользователя

Карма: 1
Рейтинг сообщений: 4
Зарегистрирован: Пн окт 25, 2010 20:47:04
Сообщений: 271
Откуда: Казахстан, Астана
Рейтинг сообщения: 0
ой спутался,
из четырех 0х01, 0х02,0х03,0х00
преврвтить волшебным образом одно одно 01101100 - 0x6C

_________________
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн дек 27, 2010 21:27:07 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18401
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
shurikss123 писал(а):
ой спутался,
из четырех 0х01, 0х02,0х03,0х00
преврвтить волшебным образом одно одно 01101100 - 0x6C

Код:
Data = 0;
for(uint8_t i=0; i<4; i++){
   New = PINB & 0x03;
   Data <<= 2;
   Data |= New;
}

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пн дек 27, 2010 21:31:22 
Грызет канифоль
Аватар пользователя

Карма: 1
Рейтинг сообщений: 4
Зарегистрирован: Пн окт 25, 2010 20:47:04
Сообщений: 271
Откуда: Казахстан, Астана
Рейтинг сообщения: 0
ARV писал(а):
shurikss123 писал(а):
ой спутался,
из четырех 0х01, 0х02,0х03,0х00
преврвтить волшебным образом одно одно 01101100 - 0x6C

Код:
Data = 0;
for(uint8_t i=0; i<4; i++){
   New = PINB & 0x03;
   Data <<= 2;
   Data |= New;
}


ой спасибо а то я чета чайник на сегодня перегрел чтением, книг

_________________
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб янв 01, 2011 22:07:02 
Грызет канифоль
Аватар пользователя

Карма: 1
Рейтинг сообщений: 4
Зарегистрирован: Пн окт 25, 2010 20:47:04
Сообщений: 271
Откуда: Казахстан, Астана
Рейтинг сообщения: 0
Всех с наступившим новым годом.

подскажите пожл. как мне конвертировать HEX 0x08e6 в DEC 2278.

пробывал всякие bcd2dec bin2dec, результат не тот
а вообще я радио мучу там формула такая
Код:
           
ra=0x08e6;//dec-2278
temp=ra;
temp=temp*50;//dec-113900
temp=(temp-10700);//dec-103200-103,2 fm

все работает, ток вот на дисплей нормально инфу ввывести не могу

_________________
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Сб янв 01, 2011 23:51:08 
Встал на лапы

Зарегистрирован: Вс мар 01, 2009 20:41:19
Сообщений: 125
Рейтинг сообщения: 0
Народ кто работал с http://www.roland-riegel.de/sd-reader/index.html отзовитесь
Начал портировать данные исходники на XMEGA128A3 в IAR.

C sd_raw разобрался все норма карточка пашет =).

Что делать с ?????
Fatal Error[Pe035]: #error directive: "Endianess undefined! Please define LITTLE_ENDIAN=1 or BIG_ENDIAN=1." S:\WORK\MicroSD_FAT_XMEGA128A3_USART_CP2102_USB\MSDFXUCU_002_port_sd_raw\byteordering.h 69.

(про прямой и обратный порядок данных я понял).
ТАК КАКОЙ выбрать LITTLE_ENDIAN=1 or BIG_ENDIAN=1??

shurikss123
Тип переменой какой ????
Если int32 вам читать про LITTLE_ENDIAN=1 or BIG_ENDIAN=1.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вс янв 02, 2011 00:14:15 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18401
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
shurikss123 писал(а):
Всех с наступившим новым годом.

подскажите пожл. как мне конвертировать HEX 0x08e6 в DEC 2278.

пробывал всякие bcd2dec bin2dec, результат не тот
а вообще я радио мучу там формула такая
Код:
           
ra=0x08e6;//dec-2278
temp=ra;
temp=temp*50;//dec-113900
temp=(temp-10700);//dec-103200-103,2 fm

все работает, ток вот на дисплей нормально инфу ввывести не могу

например, так:
Код:
printf("%d",ra);
:)))
вы не путайте присваивание значения в шестнадцатеричном формате с самим числом...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7669 ]     ... , , , 8, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y