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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Встал на лапы
Сообщения: 106
Зарегистрирован: Пн мар 26, 2012 05:25:06

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

Можно во флеш. AVR106: C functions for reading and writing to Flash memory on tinyAVR and megaAVR devices http://www.atmel.com/Images/doc2575.pdf
Можно в еепром. AVR100: Accessing the EEPROM on tinyAVR and megaAVR devices http://www.atmel.com/Images/doc0932.pdf
Ну и книжек на русском по AVR более чем достаточно.
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

Babulesnik писал(а):По сути мне нужно хранить только одну переменную типа int.
не одну а две- контрольную сумму забыли.
В поисках истины человек развивается.
Контактная информация:
Реклама
isx
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2316
Зарегистрирован: Вс июн 26, 2011 20:03:21

Сообщение isx »

Добрый вечер).. Совсем запутался в своих подсчётах и не могу написать элементарный алгоритм.
Нужно сделать как бы условие в условии. Тоесть:
If (a < 5) {

a = a++;
};
Внутри него надо сделать ещё один такой же с условием, чтоб использовать "a1" из первого алгоритма поочерёдно со всеми "a" из второго (a1,a2,a3,a4,a5), затем "a2" из первого алгоритма поочерёдно со всеми "a" из второго и т.д.
Хотел сделать как то с двумерным массивом, но забыл что хотел и теперь туплю :))
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

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

for (a=0;a<=5;a++){
     for(b=0;b<=5;b++){/*нужные действия*/};
} 
В поисках истины человек развивается.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

Сообщение Mr.Denis »

Ребята! Подскажите, ключевое слово volatile где ставится?
У меня есть 3 переменные которые обрабатываются в прерывании и соответственно изменяются в процессе программы. На них я поставил volatile.
Правильно я сделал?

А на переменные EEPROM нужно ставить volatile? Они тоже меняются в программе и одна из них изменяется в прерывании!
STM32F4 Discovery + KEIL + Windows 7
Реклама
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

Контактная информация:
Реклама
Прорезались зубы
Сообщения: 220
Зарегистрирован: Пт авг 07, 2009 22:06:49
Откуда: Россия, Москва

Сообщение Mr.Denis »

Спасибо! Прочитал но что-то не совсем понял.
Переменнуя которая хранится в EEPROM и обрабатывается в прерывание, надо индифицировать как volatile?
STM32F4 Discovery + KEIL + Windows 7
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

Переменные не размещаются в EEPROM, в нём хранятся данные. Если и есть возможность объявить такую переменную, то это уже привелегии компилятора. И volatile тут совсем не причём.
Контактная информация:
Встал на лапы
Сообщения: 149
Зарегистрирован: Чт июл 28, 2011 18:12:28

Сообщение alexey6522 »

Ребята, почему МК серии мега128 передает по USART 241 152 байта и на этом все заканчивается, до тех пор пока не сделаешь reset? А прием делается в неограниченном кол-во байтов. Может это из-за переполнения буфера? Как это исправить?
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

alexey6522, причём тут Си ?
Контактная информация:
Встал на лапы
Сообщения: 149
Зарегистрирован: Чт июл 28, 2011 18:12:28

Сообщение alexey6522 »

программу для МК пишу на Си
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

Вы программу можете писать на чём угодно.
Где Вы видите в Вашем вопросе хоть что-нибудь, что касается языка Си ?
Контактная информация:
Модератор
Аватара пользователя
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

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

Может это из-за переполнения буфера? Как это исправить?
Ошибка в строке №135.
Исправить - ручками... :write:
Контактная информация:
Открыл глаза
Сообщения: 55
Зарегистрирован: Ср янв 12, 2011 13:10:37
Откуда: Якутск

Сообщение UA0QQE »

сообщение можно удалить
Последний раз редактировалось UA0QQE Чт апр 05, 2012 10:47:37, всего редактировалось 1 раз.
I=U/R :)))
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

При динамической индикации нужно использовать таймеры.Где у вас таймер?
В поисках истины человек развивается.
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 172
Зарегистрирован: Пн мар 19, 2012 13:04:11

Сообщение MS24 »

void study(ReceiveData())
{

}

char ReceiveData()
{
if(UCSR0A & (1<<RXC0))
{
char r_Data, status;
status=UCSR0A;
r_Data = UDR0;
return r_Data;
}
}


Ребят, подскажите где ошибка в синтаксисе?
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

1.при объявлении переменной нельзя использовать скобки

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

char ReceiveData()
2.во входных данных функции, при ее объявлении обязательно указывать тип данных, а у вас просто переменная.
Ставим плюсы: )
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Сообщение ut1wpr »

MS24 писал(а):

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

char ReceiveData()
   {
	if(UCSR0A & (1<<RXC0))
	{
	char r_Data, status;
	status=UCSR0A;
	r_Data = UDR0;
              return r_Data;
   }
}
Ребят, подскажите где ошибка в синтаксисе?
Не только в синтаксисе. В голове тоже...

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

char ReceiveData(){
  while(!(UCSR0A & (1<<RXC0)) continue;  // Ждем принятый байт
  return UDR0;                           // Возвращаем значение принятого байта
}
В первой строке программа "намертво зависает" (что не есть хорошо!) в ожидании принятого байта.

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

Сообщение vitalik_1984 »

ibiza11 писал(а):1.при объявлении переменной нельзя использовать скобки

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

char ReceiveData()
Да какая же это переменная?это же функция!
Только нужно было еще дополнить

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

char ReceiveData(void){
   if(UCSR0A & (1<<RXC0))
       {
       char r_Data, status;
       status=UCSR0A;
       r_Data = UDR0;
       return r_Data;
       }
else return 0;
} 
такую функцию нужно запускать много раз, чтобы получить данные когда они придут
В поисках истины человек развивается.
Контактная информация:
Нашел транзистор. Понюхал.
Сообщения: 172
Зарегистрирован: Пн мар 19, 2012 13:04:11

Сообщение MS24 »

Спасибо за помощь, реализовал проще:
void study()
{
while (!(PIND & (1<<PD2)))
{
if(UCSR0A & (1<<RXC0))
{
char r_Data, status;
status=UCSR0A;
r_Data = UDR0;
if (r_Data == 0)
{ PORTA = 0x00;
PORTB = 0x00;
PORTC = 0x00;
PORTA = PORTA|(1<<0);
}
Ответить

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