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

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

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

Сообщение vitalik_1984 »

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

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

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

xVekx писал(а):Код:
    uint8_t crc8=_crc_ibutton_update(0x00,data[0]);
    for(int crc8_size=1;crc8_size<size;crc8_size++)
    {
       uint8_t crc8=_crc_ibutton_update(crc8,data[crc8_size]);
    }
    if(crc8!=data[size-1]){return 0x00;}
Не будет это работать.
1. Надо убрать объявление переменной crc8 внутри цикла.
2. Надо учесть что последним байтом массива является CRC.
Реклама
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

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

Сообщение urry »

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

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

unsigned char fnCalcCrc(unsigned char *mas, unsigned char lenght)
{
	unsigned char i,data,crc,fb,st_byt;
	st_byt=0;
	crc=0;
	do{
		data=mas[st_byt];
		for (i=0;i<8;i++)// счетчик битов в байте
		{
			fb =crc  ^ data;
			fb&=1;
			crc >>= 1;     
			data >>=1;
			if (fb == 1)crc^=0x8c;// полином, мля
		}
		st_byt++;
	}while  (st_byt != lenght);// счетчик байтов в массиве
	return crc;
} 
//---------------------------------------------------
код не оптимальный по шустрости, но, поскольку работает, меня как бы ломает его переделывать...
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

вот мой код

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

// Timer2 overflow interrupt service routine
interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
// Reinitialize Timer2 value
TCNT2=0x05;
// Place your code here
static int counter;
counter++;
OCR2-=0,5;
if (counter>=500) {counter=0; OCR2=0xFA; sec++;};
if (sec>=10) sec=0;
PORTD=sec;
anod_min_l;
коректна ли сия команда ?

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

OCR2-=0,5;
компилятор на нее ругается....., как ее переписать корректно ?
Tell Me The Truth
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

:shock: кошмар это откуда такое значение?
Вообще значение счетчика изначально ФИЗИЧЕСКИ это целое число.
Чувствую опять все таки придется за вас делать.Хоть и говорите, что самому все хочется сделать.
Я же вам весь алгоритм уже раскатал в личке, что изменилось?
В поисках истины человек развивается.
Реклама
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

счас поставлю коменты и вышлю вам исходник
Tell Me The Truth
Реклама
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

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

Сообщение eess9 »

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

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

Сообщение vitalik_1984 »

В поисках истины человек развивается.
Skitalec
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вс окт 17, 2010 11:26:03

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

Сообщение Skitalec »

Здравствуйте!

Я только-только пытаюсь освоить язык программирования Си (хочу научиться программировать микроконтроллеры). И вот сразу возник вопрос: функция delay вызывается из delay.h или dos.h? А то мне попадается самая противоречивая информация.

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

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

Сообщение vitalik_1984 »

dos.h? ни разу не встречал.
возьмите слово delay вставьте в словарь. вопросы сами собой отпадут.
тем более,что даже название функции совпадает с названием файла .h
В поисках истины человек развивается.
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

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

Сообщение eess9 »

Сначала устанавливаем частоту кварца или внутреннего резонатора
#define F_CPU 12000000L //частота кварца, Гц
Она нужна чтобы контроллер правильно считат задержки, и далее:
#include <delay.h> // delay.h - этот файл содержит функции для создания пауз в программе.
Теперь чтобы сделать паузу вам нужно лишь написать :
delay_ms(x); // сделать паузу x милиСек
delay_us(x); // сделать паузу x микроСек
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

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

Сообщение eess9 »

В программе есть некая переменная (не порт контроллера), а именно число, допустим x. Как у нее инвертировать один бит?
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

eess9 писал(а):....а именно число, допустим x. Как у нее инвертировать один бит?
... именно число - это константа, так что никак :)
Инвертировать бит переменной можно так var^=1<<bit_num, где var - переменная, а bit_num - номер бита
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

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

Сообщение eess9 »

Спасибо за основательный ответ
Skitalec
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Вс окт 17, 2010 11:26:03

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

Сообщение Skitalec »

Спасибо!
Аватара пользователя
eess9
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Ср фев 29, 2012 01:58:32
Откуда: Харьков, Украина

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

Сообщение eess9 »

У контроллера ATTiny25таймер 0 выдает ШИМ 2кГц. Таймер 1 работает в режиме таймера при переполнении инвертируя вывод OC1A. Но как только приходит внешнее прерывание он почему-то сбрасывается даже если закомментировать обработчик прерывания. Если запрещаю прерывания, то все нормально. В чем моя ошибка?

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

#include <avr/io.h>
#include <avr/interrupt.h>

volatile int PWM=0xCC;
volatile unsigned int Data=0x00;
volatile int FlagWrite=0;
volatile int TimerData=0x00;
volatile int i=13;

ISR(TIMER1_OVF_vect)
{
	Data=0x0000;
	FlagWrite=0;
	TimerData=0x00;
	i=13;
}

/*ISR(INT0_vect)
{
	if (i == 13)
	{
		TimerData=TCNT1;
		TCNT1=0x00;
		if ((PINB & (1 << PB2)) == 0)
			asm("nop");
		else
			Data^=1<<i;
		FlagWrite=1;
		i--;
	}	
}*/	


int main()
{
	//---Instal Port---
	DDRB=0b00011011;
	PORTB=0x00;
	//---Instal PWM---
	TCCR0A=0b11000001;
	TCNT0=0x00;
	OCR0A=PWM;
	TCCR0B=0b00000001;
	//---Timer 1---
	TIMSK=0b00000100;
	TCCR1=0b00000101;
	GTCCR=0b00010000;
	PLLCSR=0x00;
	TCNT1=0x00;
	//---Interrupt---
	GIMSK=0b01000000;
	MCUCR=0b00000001;
	sei();
	return 0;
}
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

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

Сообщение ChipKiller »

eess9 писал(а):... В чем моя ошибка?

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

 int main()
{
   .....
   sei();
   return 0;
}
return 0; это откуда? ... а точнее куда ?
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

это стандарт си, если функция объявлена как инт,то она обязана чего либо вернуть.

впрочем студия вместе с Гцц и без этого пропускает.
В поисках истины человек развивается.
kalobyte
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

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

Сообщение kalobyte »

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

вот файл radio.cpp
CRadio::CRadio()
{
init(0x2020); // standart werte
setFreq(88.0); // werden automatisch beim standart construktor initialisiert
}
мой порт 2020, если я ставлю стандартный 378, то не работает

вот файл fsteuer.h
мой класс cradio является основным (насколько я это понимаю) и от него наследуюется класс cfsteuer
насколько я опять же понимаю, должны быть методы класса cradio быть доступны
в том числе конструктор с переменными параметрами

#include "Radio.h"
class cfsteuer: public CRadio
{
public:
float hoch(float);
float tief(float);

};

в главном файле создана переменная
cfsteuer st;
если делать st.CRadio (0x2020, f); , то тут ошибка возникает
типа оператор . нельзя использовать
1>c:\documents and settings\admin\my documents\htw\programmierung\edik\main.cpp(25): error C2274: 'function-style cast' : illegal as right side of '.' operator

не забудьте положить длл в папку с ехе
Вложения
edik.zip
(23.85 КБ) 182 скачивания
тематические ответы только в форуме, в приват не пишите
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Я конечно дико извиняюсь, что на барский стол со свиным рылом лезу(не понимаю я стилей и наследования),
Но по моему компилятор пишет что то вроде :
функцие- подобное приведение типов не допускается как правая часть выражения с точкой.
В поисках истины человек развивается.
Ответить

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