Например TDA7294

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

Текущее время: Сб июл 26, 2025 09:48:00

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


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



Начать новую тему Ответить на тему  [ Сообщений: 7669 ]     ... , , , 202, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт сен 16, 2014 07:54:13 
Электрический кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 129
Зарегистрирован: Чт июн 20, 2013 00:00:58
Сообщений: 1031
Откуда: москва, м.Сходненская
Рейтинг сообщения: 0
возникла проблема одна ошибка и 2 предупреждения при компиляции
вот текст программки:
Спойлер
Код:
#define F_CPU 8000000UL
#include <avr/io.h>
//#include <stdio.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/eeprom.h>
unsigned char edinicy EEMEM;
unsigned char desyatki EEMEM;
unsigned char sotny EEMEM;
unsigned char ostatok_probega EEMEM;
//.......................0.....1.....2.....3.....4.....5.....6.....7.....8.....9....пусто
const char digit[11] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10}; // масив цифр для отправки на К155ИД1
volatile char lev[7] = {255, 1, 1, 255, 255, 255, 255};
volatile uint8_t out[3] = {10, 10, 10};
volatile unsigned char lever;
unsigned int D1, D1N, p, S, df, t;
unsigned char k, sh, l1, l2, l3, l4, ds, n=0, sot, des, edin, batt_8, fuel_8, batt, fuel;
volatile uint8_t fr[3]; // какой разряд изменился
uint8_t tscr[3]; // временный экран
uint8_t iocr = 0, dig = 0;
char ms = 0, digr;
const uint8_t psc[25]={1,11,32,43,64,85,106,157,178,199,220,251,255,251,220,199,178,157,106,85,64,43,32,11,1}; // ступени яркости
const uint8_t lm1[21]={0,1,2,3,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5};//массивы для шкалы
const uint8_t lm2[21]={0,0,0,0,0,0,1,2,3,4,5,5,5,5,5,5,5,5,5,5,5};//----
const uint8_t lm3[21]={0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,5,5,5,5,5};//----
const uint8_t lm4[21]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5};//----
const uint8_t anod[4]={0,1,4,5};//распределение анодных портов для шкалы
volatile uint8_t catod[4]={0,0,0,0};//   временный массив
   
void epprom_convert(uint16_t prob)
{
       sot = prob / 100;// сотни
      des = (prob / 10) % 10;//десятки
      edin = prob % 10;//еденицы   
}
   
void shkala(uint8_t l)   //разложение на разряды шкалы в пятиричной системе счисления
{               //с занесением во временный ммассив
   catod[0]=lm1[l];
   catod[1]=lm2[l];
   catod[2]=lm3[l];
   catod[3]=lm4[l];
}

void code(char lever)//пятеричная система переводится на конкретные порты
{
   switch (lever)
   {
   case 0:   break;
   case 1:   PORTB|=(1<<0);   break;
   case 2:   PORTB|=(1<<0)|(1<<4);   break;
   case 3:   PORTB|=(1<<0)|(1<<4)|(1<<5);   break;
   case 4:   PORTB|=(1<<0)|(1<<4)|(1<<5)|(1<<6);   break;
   case 5:   PORTB|=(1<<0)|(1<<4)|(1<<5)|(1<<6)|(1<<7);   break;
   }
   
}

ISR(TIMER0_OVF_vect)//шкала
{
 //организация отрезка выборки ~500ms c ДС
   if (p++>1950)
   {
      D1=S;//перекладываем насчитаное для дальнейшей обработки
      S=0;//сбрасываем насчитаное за 0,5сек
      p=0;
      D1N=D1N+D1/6; //суммируем пробег метры
      if (D1N>1000)// если насчитали больше км складываем в конечную копилку
         {
         df++;
         D1N=D1N/100; //тут оставшиеся десятки, а может даже и сотни возвращаем в сумматор
         }
   }
  PORTB&=~((1<<0)|(1<<4)|(1<<5)|(1<<6)|(1<<7));//сбрасываем катоды шкалы
  PORTD&=~((1<<0)|(1<<1)|(1<<4)|(1<<5));//сбрасываем аноды шкалы
  PORTD|=(1<<anod[k]);               //перебираем аноды
  code(catod[k]);                  //выводим значение для каждого анода
   k++;
   if (k>3){k=0;}               //что бы начать все сначало
}
void batt_fuel(void)
{
   ADCSRA|=(1<<ADSC);
   ADMUX^=(1<<0); //меняем канал
   batt=(batt_8*200)/255;//формула расчета напряжения
   fuel=(255-fuel_8)/255;
   inki(batt);                              //ругается на эту строчку! т.е. на переход в функцию inki
///// Warning   1   implicit declaration of function 'inki' /////Error   3   previous implicit declaration of 'inki' was here
   shkala(fuel);
}
// void inki (int D1)
// {
//    
// }

void inki(int t) // эффект плавной смены цифр, здесь идет поиск тех цифр, которые надо менять ////Warning   2   conflicting types for 'inki'
{
 uint8_t i;// запомнили новое время для 3 разрядов и заносим в массив tscr[]
       tscr[0] = t / 100;// сотни
      tscr[1] = (t / 10) % 10;//десятки
      tscr[2] = t % 10;//еденицы
      for (i = 0; (i < 3); i++) // сравнили с тем, что было 6 раз (цикл)
         if (tscr[i] != out[i]) // узнаём в каком разряде поменялась цифра, массив out[i] содержит текущие значения
            {fr[i] = 1;} // цифра изменилась создаем массив с индикатором 1 измененных цифр
         else
            {fr[i] = 0;} // цифра осталась
         iocr = 0;
}

ISR (TIMER2_OVF_vect) // реализация ШИМ управления яркостью ламп и подсветки
{
   uint8_t i;// переменная i
   PORTB &=~((1<<1)|(1<<2)|(1<<3));
   OCR2 = lev[dig]; // подготавливаемся к выводу следуйщего разряда. таймер по совпадению
   if (iocr < 25)// плавная смена яркости цифр
      {
      if (++ms == 18) // ~38ms
         {
         ms = 0;
         for (i = 0; i < 3; i++) //без 100грамм не разобраться:
            {
            if ((fr[i] == 1) || (iocr == 0))
               {
               lev[i] = psc[iocr];
               }
            if (iocr == 12)
               {
               out[i] = tscr[i];
               }               
            }
         iocr++;
         }
      }
}

ISR (TIMER2_COMP_vect) // реализация ШИМ управления яркостью ламп и подсветки
{
   if(dig < 3)// три разряда 0,1,2 digr3-еденицы
   {
       PORTC = digit[out[dig]]; // выводим цифру на дешифратор катоды т.е.0-9
       digr=dig+1;   
   if (dig==0){if (out[0]!=0){PORTB|=(1<<digr);}}// далее выбор анодов цифр с гашением 0
   if (dig==1){if ((out[0]!=0)||(out[1]!=0)){PORTB|=(1<<digr);}}
   if (dig==2){PORTB|=(1<<digr);}   
   }   
   if (++dig > 3){dig = 0;}
}

ISR(ADC_vect)
{
   if((ADMUX & 0xE6)==1) // Если был выбран канал ADC6 BATT
   {
      batt_8=ADCH;
      PORTC|=(1<<4);//зажигаем запятую
   }
   else
   {
      fuel_8=ADCH;
   }

}

ISR(INT0_vect)
{
S++;// здесь складываются импульсы от ДС
}

ISR(INT1_vect)
{
cli();
 PORTB=0x00;//тушим всю индикацию для снижения энергопотребления
 PORTD&=~((1<<0)|(1<<1)|(1<<4)|(1<<5));
 PORTC&=~((1<<0)|(1<<1)|(1<<2)|(1<<3));
epprom_convert(df);//раскладываем на разряды
if (eeprom_read_byte(&edinicy)!=edin)//если есть изменения, то:
   {
   eeprom_write_byte(&edinicy, edin);// сохраняем пробег поразрядно
   }
if (eeprom_read_byte(&desyatki)!=edin)
   {
   eeprom_write_byte(&desyatki, des);
   }
if (eeprom_read_byte(&sotny)!=edin)
   {
   eeprom_write_byte(&sotny, sot);
   }
if (eeprom_read_byte(&ostatok_probega)!=D1N)//не забываем про остаточек пробега
   {
      eeprom_write_byte(&ostatok_probega, D1N);
   }
}

int main(void)
{
   /**********************************настройка портов******************************/
   DDRB|=(1<<0)|(1<<4)|(1<<5)|(1<<6)|(1<<7)|(1<<1)|(1<<2)|(1<<3);
   DDRD|=(1<<0)|(1<<1)|(1<<4)|(1<<5)|(1<<3);
   DDRC|=(1<<0)|(1<<1)|(1<<2)|(1<<3);//к дешифратору
/**********************************настройка таймера2 индикация цифр*****************************/
TCCR2 |= (1 << CS20) | (1 << CS21);   //предделитель на 32
TIMSK |= (1<<OCIE2) | (1<<TOIE2);
/**********************************настройка таймера1 индикация шкалы*****************************/
TCCR0 |= (1<<CS01);// | (1<<CS00); //предделитель на 8 //на 64
TIMSK |= (1<<TOIE0);
/**********************************настройка внешнего прерывания INT0*****************************/
MCUCR |= (1<<ISC01);            //по убывающему фронту
GICR |= (1<<INT0);      
/**********************************настройка внешнего прерывания INT1*****************************/
//для мониторинга питания, на случай его пропадания записать пробег в eeprom
MCUCR |= (1<<ISC11)|(1<<ISC10);      //по нарастающему фронту
GICR |= (1<<INT1);
/**********************************настройка ADC*****************************/
   ADMUX |= (1 << REFS0)|(1<<REFS1); // Vref=2,56V
   ADMUX |= (1 << MUX0)|(1<<MUX1)|(1<<MUX2)|(1<<ADLAR); // Подключаем канал ADC7, 8-bit ADC
   ADCSRA |= (1 << ADEN) // разрешение АЦП
   |(1 << ADSC) // запуск преобразования
   |(1 << ADPS2)|(1 << ADPS1)|(1 << ADPS0)|(1<<ADFR) // предделитель на 128
   |(1 << ADIE); // разрешение прерывания от АЦП
/********************************************************************************/
D1N=eeprom_read_byte(&ostatok_probega);//прочитали остаточек
df=(eeprom_read_byte(&sotny)*100)+(eeprom_read_byte(&desyatki)*10)+eeprom_read_byte(&edinicy);//прочитали пробег
   sei();
   while(1)//тестовые формулы и т.д.
   {
      sh=(ADCH*100)/1275;
      ds=D1/10;
      inki(df);
      shkala(ds);
//       inki(batt);      ///если ставим здесь переход в функцию inki - ошибок нет!
//       shkala(fuel);
      _delay_ms(1000);
      ADCSRA|=(1<<ADSC);
      //batt_fuel(); //отображение 3 режима
   }
   return 0;
}

ругается на переход в функцию inki
если ставить на 8 строку снизу ошибок нет, если переход из void batt_fuel(void) два предупреждения и ошибка (места ошибок закоментированы)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт сен 16, 2014 09:36:26 
Ум, честь и совесть. И скромность.
Аватар пользователя

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

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

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт сен 16, 2014 09:55:26 
Электрический кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 129
Зарегистрирован: Чт июн 20, 2013 00:00:58
Сообщений: 1031
Откуда: москва, м.Сходненская
Рейтинг сообщения: 0
Огромное спасибо! добавил
Код:
void inki(int t);

еще не приходилось с этим сталкиваться.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт сен 18, 2014 18:05:18 
Электрический кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 129
Зарегистрирован: Чт июн 20, 2013 00:00:58
Сообщений: 1031
Откуда: москва, м.Сходненская
Рейтинг сообщения: 0
Замучился с записью в eeprom, пишет всякую хрень :cry:
Спойлер
Код:
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <avr/eeprom.h>
unsigned char edinicy EEMEM;
unsigned char desyatki EEMEM;
unsigned char sotny EEMEM;
unsigned char vid_ EEMEM;
unsigned int ostatok_probega EEMEM;
unsigned int calibration EEMEM;
unsigned char u_l EEMEM;   //хранит low калибровки бака
unsigned char u_f EEMEM;   //хранит full калибровки бака
unsigned int full_p EEMEM;
/////////////////////////
бла, бла...
////////////////////////
int main(void)
{
/////////////////////////
бла, бла...
////////////////////////
   
   if (eeprom_read_byte(&vid_)>4)
   {
   eeprom_write_byte(&u_l, 249);
   eeprom_write_byte(&u_f, 24);   
   eeprom_write_word(&ostatok_probega, 0);   
   eeprom_write_byte(&vid_, 2);
   
   eeprom_write_byte(&edinicy, 0);
   eeprom_write_byte(&desyatki, 0);
   eeprom_write_byte(&sotny, 0);
   eeprom_write_word(&full_p, 55555); здесь например 65535 при считывании
   eeprom_write_word(&calibration, 458); здесь 9
   }
sei();
D1N=eeprom_read_word(&ostatok_probega);//прочитали остаточек
df=(eeprom_read_byte(&sotny)*100)+(eeprom_read_byte(&desyatki)*10)+eeprom_read_byte(&edinicy);//прочитали и собрали пробег
vid=eeprom_read_byte(&vid_);
calib_v=eeprom_read_word(&calibration);
ul=eeprom_read_byte(&u_l);
uf=eeprom_read_byte(&u_f);

while(1)
   {....... и так далее.....


успевает записать несколько адресов от балды, в последних обычно уже FF либо FFFF в зависимости от размера ячейки.
в чем проблема может быть, с 3-4 строчками было все нормально, добавил еще адресов и усе, приплыли.....
спустя пару часов......
каким то чудным образом смог правильно записать значения после того как добавил еще два if распределив по 3 записи в каждом if :shock:
в чем прикол? компилятор или avr studio5? или оперативка в мк кончаетсяее.... хотя в железе вроде не подвисает.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт сен 18, 2014 22:33:54 
Ум, честь и совесть. И скромность.
Аватар пользователя

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

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт сен 18, 2014 22:48:08 
Вымогатель припоя

Карма: 22
Рейтинг сообщений: 114
Зарегистрирован: Пн июн 14, 2010 13:07:29
Сообщений: 630
Откуда: Жуковский
Рейтинг сообщения: 0
Интересный комментарий...
_update_ вместо _write_ - это, естественно, правильно...
и структура вместо кучи переменных = однозначно! :beer:

Но. Если у автора есть проблема в последовательной записи в ЕЕ через _write_ (что, ничему не противоречит, и имеет право быть),
то чем поможет _update_, если этому апдэйту придется также, например, ВСЕ поля структуры перезаписывать? ... и тогда он нарвётся на тот-же глюк через полгода?

Непонятно, что значит - "успевает"? Её (запись) кто-то торопит?
Может, питание?... :idea:


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

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт сен 19, 2014 05:28:56 
Электрический кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 129
Зарегистрирован: Чт июн 20, 2013 00:00:58
Сообщений: 1031
Откуда: москва, м.Сходненская
Рейтинг сообщения: 0
данная последовательность нужна только при первом включении после сборки, там и упдайт был и врайт результат один.
пока было три записи подряд все норм, как только добавил еще, то в порследующих записях после третей-четвертой запись уже не происходит, либо прорисходит с ошибками.
данная запись сохраняет без ошибок:
Спойлер
Код:
if (eeprom_read_byte(&vid_)>4)
   {
   eeprom_write_word(&full_p, 0);
   eeprom_write_word(&calibration, 275);
   eeprom_write_byte(&u_l, 219);
   eeprom_write_byte(&vid_, 1);
   }
   if (eeprom_read_word(&ostatok_probega)>3000)
   {
   eeprom_write_word(&ostatok_probega, 0);
   eeprom_write_byte(&u_f, 44);
   }
   if (eeprom_read_byte(&sotny)>9)
   {
   eeprom_write_byte(&edinicy, 3);
   eeprom_write_byte(&desyatki, 2);
   eeprom_write_byte(&sotny, 1);
   }

передвигал sei(); перед еппром не компилирует :shock:
и еще сразу же порсле проршивки не включая, считываю еепром там уже значения лежат, программатор TL866А по ICSP.
Нашел косяк!
это программатор пишет хрень какую то...
при программировании если снять галку поддержки питания и программировать при включенном устройстве то все норм, если устройство не включать и программировать с подпиткой МК от программатора то пишет всякую хрень в еепром :)))
спасибо всем за внимание вопрос закрываю.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт сен 19, 2014 10:54:30 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 48
Зарегистрирован: Вт июн 17, 2014 00:34:26
Сообщений: 791
Рейтинг сообщения: 0
Добрый день, как обратиться к регистру SREG на Си, проект на меге16.
Вот все что есть в файле iom16.h
http://screenshot.su/show.php?img=ef1cc ... 08e69e.jpg


Последний раз редактировалось baghear Пт сен 19, 2014 11:18:20, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт сен 19, 2014 11:05:29 
Электрический кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 129
Зарегистрирован: Чт июн 20, 2013 00:00:58
Сообщений: 1031
Откуда: москва, м.Сходненская
Рейтинг сообщения: 0
кусочек из даташита правда 8меги от 16 у меня нет.
Спойлер
Код:
C Code Example
char cSREG;
cSREG = SREG; /* store SREG value */
/* disable interrupts during timed sequence */
_CLI();
EECR |= (1<<EEMWE); /* start EEPROM write */
EECR |= (1<<EEWE);
SREG = cSREG; /* restore SREG value (I-bit) */

посмотрите в даташите вашего МК


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт сен 19, 2014 11:09:01 
Опытный кот
Аватар пользователя

Карма: 8
Рейтинг сообщений: 106
Зарегистрирован: Ср фев 22, 2012 01:25:21
Сообщений: 882
Рейтинг сообщения: 0
baghear писал(а):
Добрый день, как обратиться к регистру SREG на Си, проект на меге16.
Вот все что есть в файле iom16.h
http://screenshot.su/show.php?img=ef1cc ... 08e69e.jpg
Интересно... а для чего может на Си понадоюится управление регистром SREG ?

Mishany писал(а):
Спойлер
Код:
C Code Example
char cSREG;
cSREG = SREG; /* store SREG value */
/* disable interrupts during timed sequence */
_CLI();
EECR |= (1<<EEMWE); /* start EEPROM write */
EECR |= (1<<EEWE);
SREG = cSREG; /* restore SREG value (I-bit) */
Ах да... вспомнил... я и сам так делал когдато... - например чтобы в нужном месте запомнить состояние прерываний, запретить прерывания, а потом восстановить то запомненное состояние...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Пт сен 19, 2014 11:17:56 
Опытный кот
Аватар пользователя

Карма: 7
Рейтинг сообщений: 48
Зарегистрирован: Вт июн 17, 2014 00:34:26
Сообщений: 791
Рейтинг сообщения: 0
SREG должен для такой манипуляции быть должен быть определен в дефайнах.
Как компилятор отличает unsigned, вот кусочек кода и по дизассемблеру не видно отличий?
http://screenshot.su/show.php?img=b5a53 ... fa14a2.jpg


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

Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1900
Откуда: Москва
Рейтинг сообщения: 0
Приветствую всех!
Не понимаю, почему этот код неправильно работает :
Код:
   volatile uint32_t asd = 0;
   volatile uint8_t qwe = 0;
   asd = asd/qwe;
   if(asd > 0xFF)
      qwe = 0 ;
При отладке, после выполнения деления, asd = 0xFFFFFFFF. Объясните пожалуйста почему так?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср сен 24, 2014 17:43:12 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4565
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Дык, на ноль то делить нельзя :) Получается максимальное число.


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

Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1900
Откуда: Москва
Рейтинг сообщения: 0
:oops: че то и вправду туплю... пора отдыхать.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср окт 01, 2014 13:41:41 
Друг Кота
Аватар пользователя

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср окт 01, 2014 13:57:32 
Ум, честь и совесть. И скромность.
Аватар пользователя

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

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

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


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

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

Ну, что-то вроде универсальной. Чтобы пользователь мог залить её на "любой" МК с "любой" частотой и, например, работать по 1-Wire любой ногой.
Т.е. всё по разным файлам, с соответствующими понятными варнингами при компиляции.

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


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

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
в свое время я этой темой "увлекался" и, как мне кажется, достиг практически желаемого вами :)
правда, на любую частоту рассчитывать не приходится, т.к. код на Си 1-wire маловероятно будет работать при тактовой от 1 МГц и ниже... но если выше - работает, проверено на 8 и более МГц :))

поищу по закромам - выложу, если найду :)

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

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


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

Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21
Сообщений: 19730
Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Ну, я потому и писал в кавычках "любой".
ARV писал(а):
код на Си 1-wire маловероятно будет работать при тактовой от 1 МГц и ниже...
С АСМовскими вставками наверняка будет. На 1 МГц самое быстрое что требуется это всего-то через 13 тактов считать значение от слэйва. Кстати про скорость и 1-Wire: viewtopic.php?p=2125243#p2125243
ARV писал(а):
поищу по закромам - выложу, если найду :)
Хорошо бы. А то я поначалу быдлокодил всё в один файл, без возможности какого-либо переноса.

Или просто на словах, что должно быть и чего-как объявлять. Например, подключаемые файлы .h и .c — что в каждом?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср окт 01, 2014 15:07:34 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1430
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4565
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Вот, небольшое пособие о том, как оформлять модули. Мало, конечно, написано, но общий принцип понять можно.


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

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


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

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


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

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


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