01.12.2012, 20:47
|
#931
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Сообщение от С.М.С
|
bytesPerSector работает
|
Да, это я что-то на неё съехал... по ошибке...
Сообщение от С.М.С
|
программа зависала в цикле
|
Не совсем понял, о каком цикле речь...?
_________________________________________________
Черт, как не хочется расчехлять Студию с ЖЦЦой...
__________________
There's always more than one way to skin a cat.
|
|
|
|
01.12.2012, 20:55
|
#932
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Однако, непонятно в какой же момент получается ошибочное значение. Из Ваших описаний, если я их верно понял, следует что-то небывалое - при запрещенных прерываниях, сразу после присвоения - уже не то, что присваивали, я верно понял?
______________________
Я смотрю, этот же буфер используется при обмене через UART:
Код:
|
buffer[i++] = '\n'; //appending 'Line Feed (LF)' character
...
buffer[i++] = data; |
может попробовать временно использовать другой буфер, " от греха"?
__________________
There's always more than one way to skin a cat.
Последний раз редактировалось tempora; 01.12.2012 в 21:13.
|
|
|
|
01.12.2012, 21:59
|
#933
|
Гражданин KAZUS.RU
Регистрация: 03.07.2010
Сообщений: 843
Сказал спасибо: 156
Сказали Спасибо 378 раз(а) в 190 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Раньше я зацикливал, думал мало ли, может какой сбой и переменная не успела записаться. Теперь про выше приведённое условие
так идёт по первой ветке, что правильно, так как 9-8=1 следовательно true
Код:
|
cli();
sectorPerCluster = bpb-›sectorPerCluster;
if ( sectorPerCluster - bpb-›sectorPerCluster )
{transmitString_F (PSTR("first way"));
// ...
} else {transmitString_F (PSTR("second way"));
// ...
}
transmitString_F (PSTR("sectorPerCluster ="));
transmitHex(CHAR, sectorPerCluster); transmitByte(' ');// |
так идёт по второй ветке, потому как 9!=8.
Код:
|
cli();
sectorPerCluster = bpb-›sectorPerCluster;
if ( sectorPerCluster == (bpb-›sectorPerCluster) )
{transmitString_F (PSTR("first way"));
// ...
} else {transmitString_F (PSTR("second way"));
// ...
}
transmitString_F (PSTR("sectorPerCluster ="));
transmitHex(CHAR, sectorPerCluster); transmitByte(' ');// |
как выше видно, сначала идёт присваивание, затем условие, только потом UART следовательно не он ![Голова кругом](images/smilies/icon_rolleyes.gif) А получается как Вы сказали не возможное, что глобальной переменной не присваивается значение, точнее присваивается но в данном случае на 1 больше.
|
|
|
|
01.12.2012, 22:07
|
#934
|
Гражданин KAZUS.RU
Регистрация: 03.07.2010
Сообщений: 843
Сказал спасибо: 156
Сказали Спасибо 378 раз(а) в 190 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Для полной невозможности:
Код:
|
sectorPerCluster =0;
transmitString_F (PSTR("sectorPerCluster ="));
transmitHex(CHAR, sectorPerCluster); transmitByte(' ');//
sectorPerCluster =20;
transmitString_F (PSTR("sectorPerCluster ="));
transmitHex(CHAR, sectorPerCluster); transmitByte(' ');// |
получаем, сначала 1, затем 21, т.е. переменная содержит на 1 больше, чем мы ей присваиваем. Это уже закономерность, но где эта 1 дописывается не понятно.
|
|
|
|
01.12.2012, 22:53
|
#935
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Сообщение от С.М.С
|
но где эта 1 дописывается не понятно
|
А в окошке Disassembler пошагать?
__________________
There's always more than one way to skin a cat.
|
|
|
|
01.12.2012, 23:03
|
#936
|
Гражданин KAZUS.RU
Регистрация: 03.07.2010
Сообщений: 843
Сказал спасибо: 156
Сказали Спасибо 378 раз(а) в 190 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Да там всё хорошо, вроде. Поставил другую Mega32 значения в переменных то, что надо. Но проверка прошивки до конца не проходит, или студия глючная или МК.
Жесть, жестянская ![Шокирован](images/smilies/icon_eek.gif) Попробую, посмотрим, что дальше с FAT будет. Спасибо за уделённое время.
|
|
|
|
02.12.2012, 00:11
|
#937
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
М-да, получается как в анекдоте - "Ну, вот на этой Меге и продолжайте ( все будущие проекты)!"
__________________
There's always more than one way to skin a cat.
|
|
|
|
05.04.2013, 22:46
|
#938
|
Гуру портала
Регистрация: 26.01.2007
Адрес: Дивное, Россия
Сообщений: 14,796
Сказал спасибо: 7,279
Сказали Спасибо 18,273 раз(а) в 6,375 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
....................
__________________
Любое утверждение верно, включая и это.
|
|
|
|
29.04.2013, 19:49
|
#939
|
Временная регистрация
Регистрация: 09.11.2009
Сообщений: 43
Сказал спасибо: 44
Сказали Спасибо 5 раз(а) в 4 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Джентльмены!
Помогите разобраться с прерываниями
понимаю что ошибка в ДНК но где именно ![Бьюсь об стену](images/smilies/icon_obstenu.gif)
процедура прерывания не вызывается
без прерываний АЦП работает
Код:
|
#include ‹ioavr.h›
#include ‹intrinsics.h›
#pragma vector=ADC_vect
__interrupt void ADCint(void)
{
PORTB ^= 0xFF;
}
int main (void)
{
__enable_interrupt();
PORTB = 0xFF; /* Give PORTB and the User LEDs an initial startvalue */
DDRB = 0xFF; /* Set PORTB as output */
/*** Настройка АЦП ***/
ADCSRA |= (1 ‹‹ ADEN) // Включение АЦП
|(1 ‹‹ ADPS1)|(1 ‹‹ ADPS0)// предделитель преобразователя на 8
|(1 ‹‹ ADATE )|(1 ‹‹ ADIE ); // Включение Auto Trigger и прерываний
ADMUX |= (0 ‹‹ REFS1)|(0 ‹‹ REFS0) // внешний ИОН
|(1 ‹‹ MUX0)|(0 ‹‹ MUX1)|(0 ‹‹ MUX2)|(0 ‹‹ MUX3); // вход PC0
ADCSRA |= (1 ‹‹ ADSC); // Начинаем преобразование
while(1){}
} |
AVR 2560 платформа IAR ![Помогите!](images/smilies/icon_sos.gif)
Заранее благодарю
Последний раз редактировалось Митя; 29.04.2013 в 20:51.
|
|
|
|
29.04.2013, 20:21
|
#940
|
Временная регистрация
Регистрация: 08.02.2010
Сообщений: 62
Сказал спасибо: 4
Сказали Спасибо 14 раз(а) в 12 сообщении(ях)
|
Re: Уроки СИ для AVR микроконроллеров
Сообщение от Митя
|
|(1 ‹‹ ADPS1)|(1 ‹‹ ADPS0);// предделитель преобразователя на 8
|
" ; " - нужно убрать, по моему.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 22:29.
|
|