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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

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

Сообщение uk8amk »

ОК, тогда ещё вопрос.
Указатели поддерживают работу с адресной арифметикой.
Для асинхронной модификации(подпрограмма прерывания) обычных типов данных и передачи этих данных в основную программу их объявляют с квалификатором volatile.
Если я в таком случае декларирую volatile указатель, то будет ли это означать что адресная арифметика также не будет подвергаться оптимизации?
Реклама
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

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

Сообщение menzoda »

Да

Добавлено
На самом деле не совсем. См. мой ответ ниже.
Последний раз редактировалось menzoda Вс ноя 06, 2016 10:47:50, всего редактировалось 1 раз.
Реклама
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

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

Сообщение uk8amk »

Спасибо
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

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

Сообщение menzoda »

Я немного соврал.

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

volatile int *ptr

это указатель на переменную, которая трактуется как volatile. А в случае

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

int * volatile ptr

сам указатель трактуется как volatile. Если сделать вот так

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

volatile int *ptr;
ptr++;
...
*ptr = data;
то компилятор на свое усмотрение может и применить некие оптимизации инкремента. Например, решить, что это можно и попозже посчитать, а не в данном месте. При этом доступ к ячейке будет volatile. Но если сделать вот так

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

int * volatile ptr;
ptr++;
то тогда он уже будет обязан инкрементировать здесь и сейчас. При этом доступ к ячейке будет не volatile. Ну а чтобы совсем связать его руки, то можно сделать вот так:

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

volatile int* volatile ptr;
ptr++;
*ptr = data;
Тогда и доступ к самому указателю будет volatile, и к ячейке на которую он указывает.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
roma1984
Встал на лапы
Сообщения: 129
Зарегистрирован: Вт сен 23, 2008 14:29:06
Откуда: Ukraine
Контактная информация:

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

Сообщение roma1984 »

Здраствуйте! Подскажите новичку в сфере программирования про АЦП, точней как измерить значения на 4 входах. Сижу, курю примеры и уроки, но так и не понял что к чему.
В протеусе код написанный в АВР студии сипит ошибками.
Надо перевести этот рабочий код с среди ардуино в нормальный код на си для АВР студии
Спойлерfloat Upin1=0.0;
float Upin2=0.0;
float Upin3=0.0;
float Upin4=0.0;
float Ipin=0.0;
float U1=0.0;
float U2=0.0;
float U3=0.0;
float U4=0.0;
void setup() {
pinMode(0,INPUT);
pinMode(1,INPUT);
pinMode(2,INPUT);
pinMode(3,INPUT);
pinMode(4,INPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
digitalWrite(9,HIGH);//пин заряда
digitalWrite(10,HIGH);// соответствие пину 8 в протеусе - пин разряда (8 пин =пину 10)
}

void loop() {
//делаем замер напряжения падения на транзисторах пин PA4
Ipin=analogRead(4);
Ipin=(Ipin*5)/1023.0;
//делаем замер напряжения на входах
Upin1=analogRead(0);
Upin1=(Upin1*5)/1023;//вход PA0
Upin2=analogRead(1);
Upin2=(Upin2*5)/1023;//вход PА1
Upin3=analogRead(2);
Upin3=(Upin3*5)/1023.0;//вход PA2
Upin4=analogRead(3);
Upin4=(Upin4*5)/1023.0;//вход PA3
//вычисляем напряжение на аккумуляторах
U1=Upin1/(51/78.00);
U2=Upin2/(51/171.00);
U3=Upin3/(51/251.00);
U4=Upin4/(51/351.00);
if (U4>U3)
{
U4=U4-U3;
}
if (U3>U2)
{
U3=U3-U2;
}
if (U2>U1)
{
U2=U2-U1;
}
//защита от переразряда
if ((U1<3)||(U2<3)||(U3<3)||(U4<3))
{
digitalWrite(10, LOW);
}
else
{
digitalWrite(10, HIGH);
}
//защита от перезаряда
if ((U1>4.2)||(U2>4.2)||(U3>4.2)||(U4>4.2))
{
digitalWrite(9, LOW);
}
//защита от КЗ
// if (Ipin>4)
// {
// digitalWrite(9, LOW);
// digitalWrite(10, LOW);
// }
}
Мой код, или бред :))
Первий Вариант
Спойлер#include <avr/io.h>
#include <avr/delay.h>
float Upin1, Upin2, Upin3, Upin4, Ipin, U1, U2, U3, U4;
int main(void)
{
Upin1, Upin2, Upin3, Upin4, Ipin, U1, U2, U3, U4=0;

DDRA=0x00;
DDRB=0x7;
void ADC_init()
{
ADMUX=0x00; // Настройки канала PА0 опорноє Vcc 0b00000000
ADCSRA=0x83; // 0b10000011 ADEN=1, ADSC=0, ADATE=0, ADIF=0, ADIE=0, предделитель на 8 частота АЦП 125 кГц ADPS2=0 ADPS1=1 ADPS0=1
}

//функция получает в качестве аргумента номер канала и возвращает значение на входе
unsigned int ADC_result(unsigned char adc_input)
{
ADMUX=adc_input | (ADMUX & 0x00);
_delay_us(10); //задержка для стабилизации входного напряжения
ADCSRA |= 0x40; //ADSC = 1. Запуск преобразования (в режиме однократного преобразования)
while((ADCSRA & 0x10)==0); //ждем, пока АЦП закончит преобразование (ADIF = 0)
ADCSRA|=0x10; //ADIF= 1 преобразование закончено
return ADCW; //ADCW - содержит ADCH и ADCL как нам нужно
}

while(1)
{
Upin1=ADC_result(0)*0.0048875855327468;
Upin2=ADC_result(1)*0.0048875855327468;
Upin3=ADC_result(2)*0.0048875855327468;
Upin4=ADC_result(3)*0.0048875855327468;
Ipin=ADC_result(4)*0.0048875855327468;
}
}
Второй Вариант
Спойлер#include <avr/io.h>
#include <avr/delay.h>
float Upin1, Upin2, Upin3, Upin4, Ipin, U1, U2, U3, U4;
int main(void)
{
Upin1, Upin2, Upin3, Upin4, Ipin, U1, U2, U3, U4 =0;

DDRA=0x00;
DDRB=0x7;

ADMUX=0x00; // Настройки канала PА0 опорноє Vcc 0b00000000
ADCSRA=0x83; // 0b10000011 ADEN=1, ADSC=0, ADATE=0, ADIF=0, ADIE=0, предделитель на 8 частота АЦП 125 кГц ADPS2=0 ADPS1=1 ADPS0=1

while(1)
{
ADMUX |= 0x00; //выставляем канал PA0
_delay_us(30); //задержка для стабилизации
ADCSRA |= 0x40; //ADSC = 1. Запуск преобразования (в режиме однократного преобразования)
while((ADCSRA & 0x10)==0); //Ждём флаг окончания измерения
ADCSRA|=0x10; //ADIF= 1 преобразование закончено
Upin1=ADCH;

ADMUX |= 0x01; //выставляем канал PA1
_delay_us(30); //задержка для стабилизации
ADCSRA |= 0x40;//ADSC = 1. Запуск преобразования (в режиме однократного преобразования)
while((ADCSRA & 0x10)==0); //Ждём флаг окончания измерения
ADCSRA|=0x10; //ADIF= 1 преобразование закончено
Upin2=ADCH;

ADMUX |= 0x02; //выставляем канал PA2
_delay_us(30); //задержка для стабилизации
ADCSRA |= 0x40;//ADSC = 1. Запуск преобразования (в режиме однократного преобразования)
while((ADCSRA & 0x10)==0); //Ждём флаг окончания измерения
ADCSRA|=0x10; //ADIF= 1 преобразование закончено
Upin3=ADCH;

ADMUX |= 0x03; //выставляем канал PA3
_delay_us(30); //задержка для стабилизации
ADCSRA |= 0x40;//ADSC = 1. Запуск преобразования (в режиме однократного преобразования)
while((ADCSRA & 0x10)==0); //Ждём флаг окончания измерения
ADCSRA|=0x10; //ADIF= 1 преобразование закончено
Upin4=ADCH;

ADMUX |= 0x04; //выставляем канал PA4
_delay_us(30); //задержка для стабилизации
ADCSRA |= 0x40; //ADSC = 1. Запуск преобразования (в режиме однократного преобразования)
while((ADCSRA & 0x10)==0); //Ждём флаг окончания измерения
ADCSRA|=0x10; //ADIF= 1 преобразование закончено
Ipin=ADCH;
}
}
Реклама
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

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

Сообщение uk8amk »

Нельзя внутри одной функии(main) создавать другие ф-ции(ADC_init и др.).

Нельзя писать так Upin1, Upin2, Upin3, Upin4, Ipin, U1, U2, U3, U4 =0;
Но можно писать так U2= U3= U4 =0;
Реклама
Аватара пользователя
roma1984
Встал на лапы
Сообщения: 129
Зарегистрирован: Вт сен 23, 2008 14:29:06
Откуда: Ukraine
Контактная информация:

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

Сообщение roma1984 »

Переделал
Спойлер#include <avr/io.h>
#include <util/delay.h>
# define F_CPU 1000000UL
float Upin1, Upin2, Upin3, Upin4, Ipin, U1, U2, U3, U4;

void ADC_init()
{
ADMUX=0x00; // Настройки канала PА0 опорноє Vcc 0b00000000
ADCSRA=0x83; // 0b10000011 ADEN=1, ADSC=0, ADATE=0, ADIF=0, ADIE=0, предделитель на 8 частота АЦП 125 кГц ADPS2=0 ADPS1=1 ADPS0=1
}

//функция получает в качестве аргумента номер канала и возвращает значение на входе
unsigned int ADC_result(unsigned char adc_input)
{
ADMUX=adc_input | (ADMUX & 0x00);
_delay_us(10); //задержка для стабилизации входного напряжения
ADCSRA |= 0x40; //ADSC = 1. Запуск преобразования (в режиме однократного преобразования)
while((ADCSRA & 0x10)==0); //ждем, пока АЦП закончит преобразование (ADIF = 0)
ADCSRA|=0x10; //ADIF= 1 преобразование закончено
return ADCW; //ADCW - содержит ADCH и ADCL как нам нужно
}

int main(void)
{
Upin1=0; Upin2=0; Upin3=0; Upin4=0; Ipin=0; U1=0; U2=0; U3=0; U4=0;

DDRA=0x00;
DDRB=0x7;

while(1)
{
//Upin1=ADC_result(0)*0.0048875855327468;
//Upin2=ADC_result(1)*0.0048875855327468;
//Upin3=ADC_result(2)*0.0048875855327468;
//Upin4=ADC_result(3)*0.0048875855327468;
//Ipin=ADC_result(4)*0.0048875855327468;
}
}
Все нормально, ошибок в протеусе нет, но когда раскоментирую
//Upin1=ADC_result(0)*0.0048876;
//Upin2=ADC_result(1)*0.0048876;
//Upin3=ADC_result(2)*0.0048876;
//Upin4=ADC_result(3)*0.0048876;
//Ipin=ADC_result(4)*0.0048876;
в протеусе появляются ошибки (PC=0x00CA. [AVR MEMORY] Writing to memory location 0x0171 outside of memory size 0x0160. [U2]
), ругается на память,
и когда компилиш
Warning
"Compiler optimizations disabled; functions from <util/delay.h>
"F_CPU not defined for <util/delay.h>"

Понял. Оптимизацию включил а строку # define F_CPU 1000000UL надо било поставить перед #include <util/delay.h>
Последний раз редактировалось roma1984 Вс ноя 06, 2016 18:41:04, всего редактировалось 1 раз.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

roma1984 писал(а):Warning
"Compiler optimizations disabled; functions from <util/delay.h>
"F_CPU not defined for <util/delay.h>"
ну так включите оптимизацию и определите константу F_CPU для всего проекта, как полагается - всех делов-то!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
roma1984
Встал на лапы
Сообщения: 129
Зарегистрирован: Вт сен 23, 2008 14:29:06
Откуда: Ukraine
Контактная информация:

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

Сообщение roma1984 »

Спасибо! Это все мелочи, больше все интересует цикл измерения АЦП, правильно ли он присваивает значения на входах переменным Upin, может и от этого сипят ошибки в протеусе. Не пойму просто логики этого выражения ADMUX=adc_input | (ADMUX & 0x00); Как он понимает с какого порта проводить измерения кроме нулевого PA0 который указан.

Добавлено after 4 minutes 22 seconds:
Так и есть, ставлю значения от 0 до 1023 в формулу и ошибок нет. Значит значения adc_input(0) содержат всякий бред.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

roma1984 писал(а):Не пойму просто логики этого выражения ADMUX=adc_input | (ADMUX & 0x00);
А откуда оно вообще взято ?
По сути, выражение "ADMUX & 0x00" - бесполезно, ибо всегда будет равно нулю.
В итоге, вся конструкция сведётся к

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

ADMUX=adc_input;
:dont_know:

Но ошибок тут нет. Значение ADMUX будет зависимо от значения adc_input.
Аватара пользователя
roma1984
Встал на лапы
Сообщения: 129
Зарегистрирован: Вт сен 23, 2008 14:29:06
Откуда: Ukraine
Контактная информация:

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

Сообщение roma1984 »

С уроков по АЦП с инета , хотя єсть готовий проект по меге8 и там такого типа ADMUX=adc_input | (ADC_VREF_TYPE & 0xff); где переменой присваивают #define ADC_VREF_TYPE 0x40 для тини44 в опорним VCC вроде надо #define ADC_VREF_TYPE 0x00
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

roma1984 писал(а):типа ADMUX=adc_input | (ADC_VREF_TYPE & 0xff)
Дак тут 0xff. Разницу чуете ? :)
Кстати, и тут тоже операция "& 0xff" бесполезна :) При разрядности выражения в 8 бит, конечно же.
Тут всё сведётся к

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

ADMUX=adc_input | ADC_VREF_TYPE;
Для чего лишнюю операцию делать ... :dont_know:
Аватара пользователя
roma1984
Встал на лапы
Сообщения: 129
Зарегистрирован: Вт сен 23, 2008 14:29:06
Откуда: Ukraine
Контактная информация:

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

Сообщение roma1984 »

Вроде проясняєтса :)) Когда в коде появляєтся например для PA0 порта ADC_result(0) то строка unsigned int ADC_result(unsigned char adc_input) переводит значения 0 из одной системи вычислений в другую и функция ADMUX=adc_input присваиваєт ето число ADMUX. Осталось понять как конвертируются числа и что делаєт | (ADMUX & 0x__) .
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Что за "конвертирование систем вычислений" ? Это что за "чудо зверушка" такая ? :)
roma1984 писал(а):что делаєт | (ADMUX & 0x__)
Да ничего оно не делает. Отбрасывает в маске лишние биты, да и всё.
Я в АВРах не бум-бум, но судя по названию регистра, ADMUX - это мультиплексор входов АЦП. И, судя по коду, по всей видимости, выбор идёт через младшие биты.
Ничего тут таинственного нет, КМК :dont_know:
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

roma1984 писал(а):єсть готовий проект по меге8 и там такого типа ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
все дело в "такого типа" - это расплывчатое выражение говорит о том, что вы нифига не знаете, как оно там на самом деле. ну или вам на это фиолетово, что недопустимо.

на самом деле там наверняка "что-то типа этого": ADMUX=adc_input | ADC_VREF_TYPE; либо (вероятнее всего) ADMUX= ADC_VREF_TYPE | (adc_input & 0x07);
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
roma1984
Встал на лапы
Сообщения: 129
Зарегистрирован: Вт сен 23, 2008 14:29:06
Откуда: Ukraine
Контактная информация:

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

Сообщение roma1984 »

Аlex C "конвертирование систем вычислений" я немного перегнул , спал уже наверно на ходу, там просто беззнаковое целое число .
ADMUX это мультиплексор входов 2 первые бита выбор опорного (00 Vсс), остальные 6 - выбор входа:
ADC0 (PA0) - 000000
ADC1 (PA1) - 000001
ADC2 (PA2) - 000010
ADC3 (PA3) - 000011
ADC4 (PA4) - 000100
ADC5 (PA5) - 000101
ADC6 (PA6) - 000110
ADC7 (PA7) - 000111
Реально меняются 3 последние биты , если маска отбрасывает лишние биты, то надо не трогать просто 5 первых бит.
И тогда получится ADMUX=adc_input | (ADMUX & 0x07) .
Вроде так?
ARV Да, я в этом плане новичок, так и написал, в тех уроках, что я смотрел нет описание этой строки
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Если первые 2 бита - опорное, значит их, при выборе входа, трогать не нужно.
Получается, что переменную adc_input нужно ещё сдвинуть влево на 2 бита. Что-то в этом роде :

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

ADMUX &= 0x03;    // Очищаем все биты, кроме 2-ух младших, в кторых лежит настройка опорного.
ADMUX |= adc_input<<2;  // Устанавливаем биты мультиплексора из переменной adc_input
:dont_know:

Или я что-то не так понял :roll:
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

roma1984 писал(а):И тогда получится ADMUX=adc_input | (ADMUX & 0x07) .
Вроде так?
нет, не так. так вы гасите в ADMUX все биты, кроме младших трех, а потом к этим трем добавляете еще и те, которые в adc_input

правильно так, как я вам писал:
ARV писал(а):ADMUX= ADC_VREF_TYPE | (adc_input & 0x07);
или так, ближе к вашему варианту

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

ADMUX = (ADMUX & 0xF8) | (adc_input & 0x07);
но согласитесь, первый вариант проще
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
roma1984
Встал на лапы
Сообщения: 129
Зарегистрирован: Вт сен 23, 2008 14:29:06
Откуда: Ukraine
Контактная информация:

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

Сообщение roma1984 »

Опять сипит ошибки в протеусе, уже голова болит.
Спойлер#include <avr/io.h>
# define ADC_VREF_TYPE 0x00
# define F_CPU 1000000UL
#include <util/delay.h>

void ADC_init()
{
ADMUX=0x00; // Настройки канала PА0 опорноє Vcc 0b00000000
ADCSRA=0x83; // 0b10000011 ADEN=1, ADSC=0, ADATE=0, ADIF=0, ADIE=0, предделитель на 8 частота АЦП 125 кГц ADPS2=0 ADPS1=1 ADPS0=1
}

//функция получает в качестве аргумента номер канала и возвращает значение на входе
unsigned int ADC_result(unsigned char adc_input)
{
ADMUX= ADC_VREF_TYPE | (adc_input & 0x07);
_delay_us(10); //задержка для стабилизации входного напряжения
ADCSRA |= 0x40; //ADSC = 1. Запуск преобразования (в режиме однократного преобразования)
while((ADCSRA & 0x10)==0); //ждем, пока АЦП закончит преобразование (ADIF = 0)
ADCSRA|=0x10; //ADIF= 1 преобразование закончено
return ADCW; //ADCW - содержит ADCH и ADCL как нам нужно
}

float Upin1, Upin2, Upin3, Upin4, Ipin, U1, U2, U3, U4;
int main(void)
{
Upin1=0; Upin2=0; Upin3=0; Upin4=0; Ipin=0; U1=0; U2=0; U3=0; U4=0;

DDRA=0x00;
DDRB=0x7;

while(1)
{
Upin1=ADC_result(0)*0.0048876;
//Upin2=ADC_result(1)*0.0048876;
//Upin3=ADC_result(2)*0.0048876;
//Upin4=ADC_result(3)*0.0048876;
//Ipin=ADC_result(4)*0.0048876;
}
}
Добавлено after 13 minutes 26 seconds:
CV AVRавтоматом такоє генерит
Спойлер#include <tiny44.h>

#include <delay.h>

#define ADC_VREF_TYPE 0x00

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=(adc_input & 0x3f) | ADC_VREF_TYPE;
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

// ADC initialization
// ADC Clock frequency: 125,000 kHz
// ADC Bipolar Input Mode: Off
// ADC Auto Trigger Source: ADC Stopped
// Digital input buffers on ADC0: On, ADC1: On, ADC2: On, ADC3: On
// ADC4: On, ADC5: On, ADC6: On, ADC7: On
DIDR0=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
ADCSRB&=0x6F;
Аватара пользователя
roma1984
Встал на лапы
Сообщения: 129
Зарегистрирован: Вт сен 23, 2008 14:29:06
Откуда: Ukraine
Контактная информация:

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

Сообщение roma1984 »

Скопировал код с CodeVisionAVR опять не работает, думаю что за фигня пишу в AVR Studio 5.0 моргание пином протеус матерится, пишу в CodeVisionAVR все работает. Походу AVR Studio 5.0 баганя какая то.
Ответить

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