Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс мар 03, 2013 17:50:20
Что бы выйти в любом месте, а не дожидаться конца цикла. Тем более, что вопрос и был в том, как выйти.Зачем лишнее сравнение?
Здесь можно немножко помяукать :)
https://radiokot.ru/forum/
Что бы выйти в любом месте, а не дожидаться конца цикла. Тем более, что вопрос и был в том, как выйти.Зачем лишнее сравнение?
Код: Выделить всё
interrupt [ADC_INT] void adc_isr(void)
{
switch (chanel){
case 0:{
chanel1=ADCW;
break;
}
case 6:{
// chanel6=ADCW;
break;
}
}
}что-то не получаетсяА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); Ну да, только таких сравнений нужно по всему циклу натыкать, чтобы в любом месте выйти.Аlex писал(а):Что бы выйти в любом месте, а не дожидаться конца цикла. Тем более, что вопрос и был в том, как выйти.Зачем лишнее сравнение?
Что то ваш делитель http://SSMaker.ru/a5f60959/ не совпадает с вашими расчетами.pokk писал(а):Частота синхронизации АЦП 62 кГц
А запуск преобразования от таймера 4 кГц (250us).
Код: Выделить всё
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;
} Естественно. Откуда нужно прервать цикл, туда и "тыкать".таких сравнений нужно по всему циклу натыкать, чтобы в любом месте выйти
Это уже к фанатам CV. Тут я паскомпиль выдает ошибку :
Код: Выделить всё
...
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);
Так возвратится значение по адресу my_files, а не указатель.unalex писал(а):Код: Выделить всё
... return *my_files; }
неужели мой код не получил данные из массива?servo писал(а):получить данные из массива из основного кода
а у меня всё так же =( только чуть медленнее ошибки пошли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; }

Получил, но не все и не известно какиеunalex писал(а):неужели мой код не получил данные из массива?
Аlex писал(а):Получил, но не все и не известно какие
Код: Выделить всё
FileNameArray[f][i] = *(fat_find_name_files() + f*sizeof(byte) + i);Код: Выделить всё
return *my_files;Код: Выделить всё
return my_files;Код: Выделить всё
return &my_files[0][0];