Что бы выйти в любом месте, а не дожидаться конца цикла. Тем более, что вопрос и был в том, как выйти.Зачем лишнее сравнение?
CodeVision AVR в вопросах и ответах
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Re: CodeVision AVR в вопросах и ответах
Даже такой код выдаёт туже ошибку. Видать и правда что-то с таймером хотя он не так уже и быстро включает
Код: Выделить всё
interrupt [ADC_INT] void adc_isr(void)
{
switch (chanel){
case 0:{
chanel1=ADCW;
break;
}
case 6:{
// chanel6=ADCW;
break;
}
}
}- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
сообщение удалил, сорри за невнимательность
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Re: CodeVision AVR в вопросах и ответах
Удалил свой комментарий о невнимательности пользователя unalex 
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
чего весь проект не выкладываем? Военная разработка? Может это глюк протеуса, бывает с ним всякое, даже один и тот же проект заново созданный бывает работает с той же самой прошивкой, с которой не работает первоначально созданный.
Re: CodeVision AVR в вопросах и ответах
Там черт ногу сломит
Сильно не бейте.
Re: CodeVision AVR в вопросах и ответах
Аlex писал(а):servo писал(а):Как правильно это сделать не могли бы Вы примерчик накидатьКод: Выделить всё
char* func(){
static char arr[16]; // Создаём массив
............ // Работаем с массивом
............ //
............ //
return arr; // Возвращаем указатель на массив
}
что-то не получается
Код: Выделить всё
//в заголовочном файле объявляю массив
static byte my_files[50][11];Код: Выделить всё
//функция в библиотеке
byte* fat_find_name_files() {
byte i;
byte f; //Счетчик прочитаных записей
addr.al=rootoff; //Будем пролистывать все сначала, т.е. сначала корневой директории
do {
sd_read(addr); //Читаем
f=0;
do {
for (i=0;i<11;i++) my_files[f][i]=sd_byte(); //Читаем имя
sd_skip(21); //Пропускам 21 байт
f++;
if (my_files[f][0]==0)
{ //Закончились записи
sd_skip(514-(f<<5)); //Дочитаем не дочитаное (пропустим) + CRC 2 байта
return 0; //Ни чего не нашли
}
//Если равно 0xe5, это удаленая запись
//Так же проверяется атрибуты и имя
if (my_files[f][0]!=0xe5)
{
sd_skip(514-(f<<5));
//return 1; //Что-то есть :)
}
} while(f<16); //Пока не прочитали 16 записей 16*32(размер записи)=512(размер блока) байт
sd_skip(2); //CRC
addr.al+=512; //Следующий блок
} while(addr.al<dataoff); //Пока не кончатся записи
return my_files;
}
Код: Выделить всё
//тут пытаюсь получить данные из массива из основного кода
do{
for (i=0;i<11;i++) FileNameArray[f][i] = *fat_find_name_files();
f++;
}while(FileNameArray[f][i]!=0); компиль выдает ошибку : Library error: D:\_____________.c(170): incompatible return expression of type 'byte [50][11]', expect a 'flash byte'
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Аlex писал(а):Что бы выйти в любом месте, а не дожидаться конца цикла. Тем более, что вопрос и был в том, как выйти.Зачем лишнее сравнение?
Ну да, только таких сравнений нужно по всему циклу натыкать, чтобы в любом месте выйти.
pokk писал(а):Частота синхронизации АЦП 62 кГц
А запуск преобразования от таймера 4 кГц (250us).
Что то ваш делитель http://SSMaker.ru/a5f60959/ не совпадает с вашими расчетами.
http://SSMaker.ru/445aec9c/
Поправил
http://SSMaker.ru/81e95283/
Работает без без предупреждений, думаю, что остальное самостоятельно проверите?
Спойлер
Код: Выделить всё
void INIT_TIMER(void)
{
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7.813 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// OC1C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x0D;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x07;
OCR1AL=0xCF;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
}
Последний раз редактировалось vitalik_1984 Вс мар 03, 2013 21:59:17, всего редактировалось 2 раза.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Естественно. Откуда нужно прервать цикл, туда и "тыкать".таких сравнений нужно по всему циклу натыкать, чтобы в любом месте выйти
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Это уже к фанатам CV. Тут я паскомпиль выдает ошибку :
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
Код: Выделить всё
...
return *my_files;
}
Код: Выделить всё
//тут пытаюсь получить данные из массива из основного кода
do{
for (i=0;i<11;i++) FileNameArray[f][i] = *(fat_find_name_files() + f*sizeof(byte) + i);
f++;
}while(FileNameArray[f][i]!=0);
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Re: CodeVision AVR в вопросах и ответах
vitalik_1984, а что эта за программка во второй картинке ?
при расчёте таймера у меня что-то там не сходилось я посчитал одни значение получилось а CV выдал другое долго смотрел где накосячил так и не нашёл и кажись свои значения взял уже не помню. Потом проверил это в протеусе в таймере написал porb=1; в главном цикле portb=0; и осциллографом по мерил интервал он выдал 252us.
Благодарю за помощь сейчас с таймером буду разбираться.
при расчёте таймера у меня что-то там не сходилось я посчитал одни значение получилось а CV выдал другое долго смотрел где накосячил так и не нашёл и кажись свои значения взял уже не помню. Потом проверил это в протеусе в таймере написал porb=1; в главном цикле portb=0; и осциллографом по мерил интервал он выдал 252us.
Благодарю за помощь сейчас с таймером буду разбираться.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Так возвратится значение по адресу my_files, а не указатель.unalex писал(а):Код: Выделить всё
...
return *my_files;
}
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
Аlex
неужели мой код не получил данные из массива?
servo писал(а):получить данные из массива из основного кода
неужели мой код не получил данные из массива?
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Re: CodeVision AVR в вопросах и ответах
vitalik_1984 писал(а):Работает без без предупреждений, думаю, что остальное самостоятельно проверите?Спойлер
Код: Выделить всё
void INIT_TIMER(void)
{
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7.813 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// OC1C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x0D;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x07;
OCR1AL=0xCF;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
}
а у меня всё так же =( только чуть медленнее ошибки пошли
Пока разбирался возник по таймеру вопрос
подставил всё в формулу из datasheet atmega128 стр 124
Получил

что-то 4000 Гц не пахнет. Видать по этому я и поставил другой делитель не 1024. И частота ошибок как раз из за этого уменьшилась.
Может не по той формуле посчитал ?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Получил, но не все и не известно какиеunalex писал(а):неужели мой код не получил данные из массива?
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
Аlex писал(а):Получил, но не все и не известно какие
Код: Выделить всё
FileNameArray[f][i] = *(fat_find_name_files() + f*sizeof(byte) + i);какие просит, такие и даем
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: CodeVision AVR в вопросах и ответах
unalex учите С. Аlex вам написал, что ... это ни о чем.
можно написать либо
PS. еще один момент - возврат указателя на массив в вашем случае не нужен, так как массив не создается динамически и его адрес и так известен.....
Код: Выделить всё
return *my_files;можно написать
Код: Выделить всё
return my_files;Код: Выделить всё
return &my_files[0][0];PS. еще один момент - возврат указателя на массив в вашем случае не нужен, так как массив не создается динамически и его адрес и так известен.....
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: CodeVision AVR в вопросах и ответах
Вообще если честно я не вижу вообще смысла возвращать ни сам массив ни указатель на него
функция отработала, модифицировала массив, бери и читай
функция отработала, модифицировала массив, бери и читай
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
unalex , откуда тогда взяться универсальности? Указатель нужен для того, чтобы пихнуть функции любые данные, либо вернуть в произвольное место.
Хотя с другой стороны, лучше возвращать удачна ли операция или сколько получилось циклов в случае, если функция с циклом внутри и что либо считает.
pokk Это простой онлайн калькулятор таймера AVR первый попавшийся в поиске.
Хотя с другой стороны, лучше возвращать удачна ли операция или сколько получилось циклов в случае, если функция с циклом внутри и что либо считает.
pokk Это простой онлайн калькулятор таймера AVR первый попавшийся в поиске.
В поисках истины человек развивается.