ARV, Вы, видимо, поторопились с ответом. Необдуманно...ARV писал(а):в первом случае у вас не со сдвигом была проблема, а с начальным присваиванием константы 0x12345678
Вопросы по С/С++ (СИ)
- Реклама
частично - согласен, но лишь частично - см. корректировку предыдущего моего постаАlex писал(а):ARV, Вы, видимо, поторопились с ответом. Необдуманно...ARV писал(а):в первом случае у вас не со сдвигом была проблема, а с начальным присваиванием константы 0x12345678
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 882
- Зарегистрирован: Ср фев 22, 2012 01:25:21
КажиСЯ я понял логику компиля... вернее - компилерописателей...
В этом случае - раз переменная temp - 32-х разрядная, то и константа подтягивается автоматом к 32-м разрядам (та скать - автоматическое приведение типа) и результат нормальный...
В этом случае - сначала вычисление происходит со сдвигом константы, а она как выяснилось по умолчанию 16-ти разрядная... указатель сдвига тоже обычный, следовательно никакого приведения к 32-м разрядам не происходит... и мы благополучно теряем FFFF... остается чистый 16-ти разрядный нолик...
Потом уже вычисляется &, и естественно правый 16-ти разрядный нолик приводится к 32-м разрядам... но вот незадача, сколько нолик не приводи, он так и остается ноликом )))
В итоге - то что имеем...
PS.
Ой... пока писал, ARV уже практически все объяснил...
PPS.
Хотя... внимательнее ваше объяснение почитал, помоему у меня более правдоподобно
...
В этом случае -
Код: Выделить всё
uint32_t temp = 0x12345678;
UartTransmitHexLong (temp & 0xffff0000);В этом случае -
Код: Выделить всё
uint32_t var = 0x12345678;
UartTransmitHexLong (var & (0x0000ffff << 16));Потом уже вычисляется &, и естественно правый 16-ти разрядный нолик приводится к 32-м разрядам... но вот незадача, сколько нолик не приводи, он так и остается ноликом )))
В итоге - то что имеем...
PS.
Ой... пока писал, ARV уже практически все объяснил...
PPS.
Хотя... внимательнее ваше объяснение почитал, помоему у меня более правдоподобно
Пункт стандарта 3.1.3.2 (кусочек):ARV писал(а): все числовые константы, если явно не указан их тип, имеют размерность int. поэтому даже число 0x23498579834759823476982347982347 все равно будет типа int.
Код: Выделить всё
Значение десятичной константы вычисляется по основанию 10,
значение восьмеричной константы вычисляется по основанию 8, а
шестнадцатеричной константы - по основанию 16. Лексически пер-
вая цифра является старшей цифрой значения.
Типом целой константы будет первый из перечисленных ниже
типов, в котором может быть представлено ее значение. Бессуф-
фиксные десятичные: int, long int, unsigned long int; бессуф-
фиксные восьмеричные или шестнадцатеричные: int, unsigned int,
long int, unsigned long int; константы с беззнаковым суффик-
сом: unsigned int, unsigned long int; константы с суффиксом
размера: long int, unsigned long int; константы с разными суф-
фиксами: unsigned long int.
- Реклама
ua1arn, это Вы к чему ? Как эта вырезка относится к типу констант по-умолчанию ?
Так относится, что ARV утверждает не совсем правду. Тип констант не всегда int, а зависит от значения (ну и суффиксов, разумеется).
Вот цитата из другой версии перевода стандарта на русский язык:
Вот цитата из другой версии перевода стандарта на русский язык:
Спойлер
- Вложения
-
- constants.png
- (117.98 КБ) 534 скачивания
Последний раз редактировалось ua1arn Пн сен 15, 2014 18:39:52, всего редактировалось 1 раз.
ua1arn писал(а):Тип констант не всегда int, а зависит от значения (ну и суффиксов, разумеется).
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 882
- Зарегистрирован: Ср фев 22, 2012 01:25:21
Так я не понял... и шо... все чет намеками какими то изъясняются...
Вы мне по русски скажите... 0x12345678 - это 16-ти разрядная или 32-х разрядная константа?.....
Если все так как утверждал ARV, то вроде у меня в голове все прояснилось...
Если все так как утверждает ua1arn, то у меня опять "разрыв шаблона" .....
Вы мне по русски скажите... 0x12345678 - это 16-ти разрядная или 32-х разрядная константа?.....
Если все так как утверждал ARV, то вроде у меня в голове все прояснилось...
Если все так как утверждает ua1arn, то у меня опять "разрыв шаблона" .....
0x12345678 - это 32-х разрядная константа. Для avr-gcc её тип signed long. Если написать 0xdeadbeaf - то unsigned long на этом же компиляторе. На arm-none-eabi-gcc её тип signed int, для второй unsigned int.
- Сообщения: 882
- Зарегистрирован: Ср фев 22, 2012 01:25:21
Почему тогда этот пример: дает результат 0x00000000 ?
Т.е. константа 0x0000ffff трактуется как 16-ти разрядная... (о... чет подумалось... может не представление числа а его значение играет роль, скольки разрядным оно будет... т.е. в данном случае 0x0000ffff помещается в 16 разрядов, поэтому и назначается 16-ти разрядным... не?)
Компилирую в AVRSTUDIO4...
Код: Выделить всё
uint32_t var = 0x12345678;
UartTransmitHexLong (var & (0x0000ffff << 16));Т.е. константа 0x0000ffff трактуется как 16-ти разрядная... (о... чет подумалось... может не представление числа а его значение играет роль, скольки разрядным оно будет... т.е. в данном случае 0x0000ffff помещается в 16 разрядов, поэтому и назначается 16-ти разрядным... не?)
Компилирую в AVRSTUDIO4...
- Сообщения: 882
- Зарегистрирован: Ср фев 22, 2012 01:25:21
Да... ua1arn прав...
этот вариант не работает т.к. тут константа 0x0000ffff не превышает 16 разрядов, соответственно константе и отводится 16 разрядов.....
а этот вариант работает т.к. тут константа 0x000fffff превышает 16 разрядов, соответственно константе назначается 32 разряда...
Вроде разобрались, всем спасибо
...
В общем, если нужно гарантированно обеспечить 32 разряда константе, лучше это указать явно или так UL или так (uint32_t)...
этот вариант не работает
Код: Выделить всё
uint32_t temp = 0x12345678;
UartTransmitHexLong (temp & (0x0000ffff << 16));а этот вариант работает
Код: Выделить всё
uint32_t temp = 0x12345678;
UartTransmitHexLong (temp & (0x000fffff << 16));Вроде разобрались, всем спасибо
В общем, если нужно гарантированно обеспечить 32 разряда константе, лучше это указать явно или так UL или так (uint32_t)...
возникла проблема одна ошибка и 2 предупреждения при компиляции
вот текст программки:
ругается на переход в функцию inki
если ставить на 8 строку снизу ошибок нет, если переход из void batt_fuel(void) два предупреждения и ошибка (места ошибок закоментированы)
вот текст программки:
Спойлер
Код: Выделить всё
#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;
}если ставить на 8 строку снизу ошибок нет, если переход из void batt_fuel(void) два предупреждения и ошибка (места ошибок закоментированы)
ну прочтите и, если не понятно, переведите варнинг и сообщение об ошибке, сразу все станет ясно.
каждая функция должна быть определена до первого обращения к ней. если inki у вас реализована после batt_fuel, поэтому из inki можно обращаться к batt_fuel, а наоборот - нельзя. чтобы решить проблему, надо либо поменять местами реализацию этих функций в коде, либо в самом начале файла описать прототипы всех функций.
каждая функция должна быть определена до первого обращения к ней. если inki у вас реализована после batt_fuel, поэтому из inki можно обращаться к batt_fuel, а наоборот - нельзя. чтобы решить проблему, надо либо поменять местами реализацию этих функций в коде, либо в самом начале файла описать прототипы всех функций.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Огромное спасибо! добавил
еще не приходилось с этим сталкиваться.
Код: Выделить всё
void inki(int t);Замучился с записью в eeprom, пишет всякую хрень
успевает записать несколько адресов от балды, в последних обычно уже FF либо FFFF в зависимости от размера ячейки.
в чем проблема может быть, с 3-4 строчками было все нормально, добавил еще адресов и усе, приплыли.....
спустя пару часов......
каким то чудным образом смог правильно записать значения после того как добавил еще два if распределив по 3 записи в каждом if
в чем прикол? компилятор или avr studio5? или оперативка в мк кончаетсяее.... хотя в железе вроде не подвисает.
Спойлер
Код: Выделить всё
#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)
{....... и так далее.....
в чем проблема может быть, с 3-4 строчками было все нормально, добавил еще адресов и усе, приплыли.....
спустя пару часов......
каким то чудным образом смог правильно записать значения после того как добавил еще два if распределив по 3 записи в каждом if
в чем прикол? компилятор или avr studio5? или оперативка в мк кончаетсяее.... хотя в железе вроде не подвисает.
Сделайте структуру с вашими полями, поисваивайте этим полям значения, а затем сохраняйте её одним обращением к функции eeprom_update_block
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Интересный комментарий...
_update_ вместо _write_ - это, естественно, правильно...
и структура вместо кучи переменных = однозначно!
Но. Если у автора есть проблема в последовательной записи в ЕЕ через _write_ (что, ничему не противоречит, и имеет право быть),
то чем поможет _update_, если этому апдэйту придется также, например, ВСЕ поля структуры перезаписывать? ... и тогда он нарвётся на тот-же глюк через полгода?
Непонятно, что значит - "успевает"? Её (запись) кто-то торопит?
Может, питание?...
_update_ вместо _write_ - это, естественно, правильно...
и структура вместо кучи переменных = однозначно!
Но. Если у автора есть проблема в последовательной записи в ЕЕ через _write_ (что, ничему не противоречит, и имеет право быть),
то чем поможет _update_, если этому апдэйту придется также, например, ВСЕ поля структуры перезаписывать? ... и тогда он нарвётся на тот-же глюк через полгода?
Непонятно, что значит - "успевает"? Её (запись) кто-то торопит?
Может, питание?...
данная последовательность нужна только при первом включении после сборки, там и упдайт был и врайт результат один.
пока было три записи подряд все норм, как только добавил еще, то в порследующих записях после третей-четвертой запись уже не происходит, либо прорисходит с ошибками.
данная запись сохраняет без ошибок:
передвигал sei(); перед еппром не компилирует
и еще сразу же порсле проршивки не включая, считываю еепром там уже значения лежат, программатор TL866А по ICSP.
Нашел косяк!
это программатор пишет хрень какую то...
при программировании если снять галку поддержки питания и программировать при включенном устройстве то все норм, если устройство не включать и программировать с подпиткой МК от программатора то пишет всякую хрень в еепром
спасибо всем за внимание вопрос закрываю.
пока было три записи подряд все норм, как только добавил еще, то в порследующих записях после третей-четвертой запись уже не происходит, либо прорисходит с ошибками.
данная запись сохраняет без ошибок:
Спойлер
Код: Выделить всё
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);
}и еще сразу же порсле проршивки не включая, считываю еепром там уже значения лежат, программатор TL866А по ICSP.
Нашел косяк!
это программатор пишет хрень какую то...
при программировании если снять галку поддержки питания и программировать при включенном устройстве то все норм, если устройство не включать и программировать с подпиткой МК от программатора то пишет всякую хрень в еепром
спасибо всем за внимание вопрос закрываю.
- Сообщения: 791
- Зарегистрирован: Вт июн 17, 2014 00:34:26
Добрый день, как обратиться к регистру SREG на Си, проект на меге16.
Вот все что есть в файле iom16.h
http://screenshot.su/show.php?img=ef1cc ... 08e69e.jpg
Вот все что есть в файле iom16.h
http://screenshot.su/show.php?img=ef1cc ... 08e69e.jpg
Последний раз редактировалось baghear Пт сен 19, 2014 11:18:20, всего редактировалось 2 раза.


