так будет не верно, даже если вы добавите размерность в массивы! массив listing у вас состоит из двух структур типа MY_TAB, вы же инициализируете только первую.demonchik писал(а):то есть так будет верно:Код: Выделить всё
typedef struct _mytab {
char *_ffname;
char *_flink;
//void(*pFunction)(void);
} MY_TAB;
char ffname[];
char flink[];
MY_TAB listing[2]={ffname,flink};
CodeVision AVR в вопросах и ответах
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
битва с дураками проиграна, победители торжествуют. слава победителям!
- demonchik
- Встал на лапы
- Сообщения: 94
- Зарегистрирован: Вт апр 07, 2009 13:39:13
- Откуда: одесса
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Мастер Ломастер писал(а):так будет не верно, даже если вы добавите размерность в массивы! массив listing у вас состоит из двух структур типа MY_TAB, вы же инициализируете только первую.demonchik писал(а):то есть так будет верно:Код: Выделить всё
typedef struct _mytab {
char *_ffname;
char *_flink;
//void(*pFunction)(void);
} MY_TAB;
char ffname[];
char flink[];
MY_TAB listing[2]={ffname,flink};
да. я в коде после первой компиляции заметил. спасибо)))
радиоэлектроника - жизнь моя...
Re: CodeVision AVR в вопросах и ответах
ChipKiller писал(а):... а если используется динамическая индикация?rs39 писал(а):А запретить прерывания на момент измерения (обращения к датчику) нельзя разве?.. ну да и на 12-ти битном режиме измерения получим прерывание продолжительностью более 750msrs39 писал(а):Либо функцию измерения повесить на само прерывание.
Ну тогда остается наверное драйвер какойньть лепить на отдельной микре-регистре. Библиотека в таком случае врят-ли поможет..
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: CodeVision AVR в вопросах и ответах
... какой драйвер и зачем ?????? Что можно сделать и как, написал здесь http://radiokot.ru/forum/viewtopic.php?f=20&t=50271 недостающие пару функций пишутся за 10-20 минут (прерывания запрещаются на момент приема/передачи бита, а далее вновь разрешаются )rs39 писал(а):Ну тогда остается наверное драйвер какойньть лепить на отдельной микре-регистре. Библиотека в таком случае врят-ли поможет..
- demonchik
- Встал на лапы
- Сообщения: 94
- Зарегистрирован: Вт апр 07, 2009 13:39:13
- Откуда: одесса
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
всем котам МЯУ!!!! вот решил подключить дисплей к тому же порту SPI где у меня висит карта памяти. c карточкой и дисплеем получалось работать отдельно. но совместно - проблемы- CVAVR просто зависает. использовал дисплей 3310 нокии и стандартные библиотеки для работы с FAT, и контроллер ATmega32. в чем может быть мой затык?
но заметил что контроллер отпускает CS после окончания сеанса передачи с карточкой - то что мне надо...
но заметил что контроллер отпускает CS после окончания сеанса передачи с карточкой - то что мне надо...
радиоэлектроника - жизнь моя...
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: CodeVision AVR в вопросах и ответах
... возможно оба Ваших устройства пытаются "ответить" одновременно...demonchik писал(а):... c карточкой и дисплеем получалось работать отдельно. но совместно - проблемы- CVAVR просто зависает.
Re: CodeVision AVR в вопросах и ответах
Может кто нибудь поделится таблеткой для CVAvr 2.04.09a, в гугле меня не забанили, но инет сильно ограничен провайдером организации, поэтому , если не трудно,скинте на мыло е_с_с{@}mail.ru
p/s спасибо ,решено.
p/s спасибо ,решено.
- demonchik
- Встал на лапы
- Сообщения: 94
- Зарегистрирован: Вт апр 07, 2009 13:39:13
- Откуда: одесса
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
всем МЯУ!!!
Хлопцы, подскажите, правильно ли обьявлять функцию так
? требуется чтоб функция вернула строковую величину типа char
Код: Выделить всё
char *link_down(unsigned char *path,unsigned short int pfile)
{
i=strlen(path);
// append the subdirectory name to the path
if (path[i-1]!='/') strcatf(path,"/");
strcat(path,listing[pfile].ffname);
return path;
}? требуется чтоб функция вернула строковую величину типа char
радиоэлектроника - жизнь моя...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
ну, во-первых, это у вас не объявление, а реализация функции. это просто замечание по терминологии, не критично. объявление - это когда в хидере написано char *link_down(unsigned char *,unsigned short int );
а во-вторых, вы должны понимать, что "вернуть строку" - это на самом деле означает "вернуть указатель на область памяти, где размещены символы строки". в вашем случае вы возвратите ровно то, что получите в качестве параметра, т.е. указатель path - по логике вещей, он вам и так известен, функция его не меняет, возвращать его - это не имеет смысла. но вот вопрос: достаточно ли места в той области, куда этот указатель указывает, чтобы добавлять туда какие-то символы?
а во-вторых, вы должны понимать, что "вернуть строку" - это на самом деле означает "вернуть указатель на область памяти, где размещены символы строки". в вашем случае вы возвратите ровно то, что получите в качестве параметра, т.е. указатель path - по логике вещей, он вам и так известен, функция его не меняет, возвращать его - это не имеет смысла. но вот вопрос: достаточно ли места в той области, куда этот указатель указывает, чтобы добавлять туда какие-то символы?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- demonchik
- Встал на лапы
- Сообщения: 94
- Зарегистрирован: Вт апр 07, 2009 13:39:13
- Откуда: одесса
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
ARV, места достаточно - побольше выделю байт. пока не критично. в функции есть смысл - она обьединяет строки и возвращает полученный путь. а лучше присвоить локальной строке и её возвращать?
радиоэлектроника - жизнь моя...
- demonchik
- Встал на лапы
- Сообщения: 94
- Зарегистрирован: Вт апр 07, 2009 13:39:13
- Откуда: одесса
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
вот если вызываю функцию без присваивания ldwn(path); - нет ошибок. делаю так text=ldwn(path); - получаю:
Error: sd_lcd.c(251): the expression must be a modifiable lvalue
Error: sd_lcd.c(251): the expression must be a modifiable lvalue
радиоэлектроника - жизнь моя...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
ваша функция НЕ ОБЪЕДИНЯЕТ и ВОЗВРАЩАЕТ РЕЗУЛЬТАТ, а ДОПИСЫВАЕТ К ПЕРВОЙ СТРОКЕ ВТОРУЮ и возвращает адрес ПЕРВОЙ.demonchik писал(а):ARV, места достаточно - побольше выделю байт. пока не критично. в функции есть смысл - она обьединяет строки и возвращает полученный путь. а лучше присвоить локальной строке и её возвращать?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- demonchik
- Встал на лапы
- Сообщения: 94
- Зарегистрирован: Вт апр 07, 2009 13:39:13
- Откуда: одесса
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
ну это я по своему обьяснил (мож по тупому)... но что я делаю неверно? помогите пожалуйста 
радиоэлектроника - жизнь моя...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
чтобы ответить, что неправильно, надо видеть чуть поболее, чем тот кусочек кода. что вы показали... что такое text и как вы его потом используете - не ясно. повторяю, ваша функция ВСЕГДА ВОЗВРАТИТ то же самое, что получит в параметре path - нет никакого смысла писать text=ldwn(path); потому что text всегда будет равен path. то есть можно сделать так:
и это будет то же самое абсолютно.
потенциально опасное место я вам показал - в функции нет контроля размеров строки-приемника результата...
Код: Выделить всё
ldwn(path);
text = path;и это будет то же самое абсолютно.
потенциально опасное место я вам показал - в функции нет контроля размеров строки-приемника результата...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- demonchik
- Встал на лапы
- Сообщения: 94
- Зарегистрирован: Вт апр 07, 2009 13:39:13
- Откуда: одесса
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
спасибо, ARV. то есть могу и не писать return path и не объявлять функцию как возвращающую строку? она будет менять глобально объявленную переменную. вроде так?
радиоэлектроника - жизнь моя...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
глобальную или нет - это я не знаю, но менять она будет ТУ, что получает в параметре.demonchik писал(а):спасибо, ARV. то есть могу и не писать return path и не объявлять функцию как возвращающую строку? она будет менять глобально объявленную переменную. вроде так?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Повторяющаяся ошибка в CV AVR
Вообщем нужна помощь.
При компиляции возникает ошибка: Linker error: the program has no 'main' function.
При этом в ранее рабочих программах эта ошибка тоже возникает.
После переустановки CV AVR ошибка исчезает. Версия 2.05.2
Помогите советом, недоело переустанавливать.
При компиляции возникает ошибка: Linker error: the program has no 'main' function.
При этом в ранее рабочих программах эта ошибка тоже возникает.
После переустановки CV AVR ошибка исчезает. Версия 2.05.2
Помогите советом, недоело переустанавливать.
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Повторяющаяся ошибка в CV AVR
пользуйтесь легальными компиляторами
битва с дураками проиграна, победители торжествуют. слава победителям!
Re: Повторяющаяся ошибка в CV AVR
Тоесть демо версия это не легально? Или я ошибаюсь и у меня не демо версия. Когда скачивал, было сказано что демо, или что-то в этом роде. Извините за. стиль, пишу с телефона.
Re: CodeVision AVR в вопросах и ответах
Народ, вопрос по работе с типом float, звиняйте, если было. Поиском искал - похожего не нашел((
Суть в том, что не хочет уменьшаться значение одной переменной типа float на значение другой:
Каждый раз при условии от таймера надо уменьшать значение flZar на расчитанное d. Дык вот, не хочет уменьшаться и всё тут! Само по себе d расчитывается нормально. Как я только не пытался. Строчка sprintf(str,"%03d:%02d %f",min,sec,flZar-d); отображается корректно, значит дело в приравнивании?
CodeVision 2.05.0 (пробовал на 1.25.9), симулирую в шПротеусе 7.8 (пробовал разные). На LCD вместо моего числа получается "-INF".
Люди добрые, дапамажыте советом, а то совсем замучался, да и работа стоит...
проект и схему прилагаю, ногами прошу сильно не бить, т.к. только учусь
Суть в том, что не хочет уменьшаться значение одной переменной типа float на значение другой:
Код: Выделить всё
void main(void)
{
float flZar,d,em;
...
flZar=(float)(1);
while(1)
if (nNewSec==1) //условие от таймера
{
d=(float)1/(3600*em);
nNewSec=0;
flZar=(float)(flZar-d); //каждый раз нужно заново вычислить d и уменьшить на него flZar
};
sprintf(str,"%03d:%02d %f",min,sec,flZar);
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts(str); //выводим на LCD
};
Каждый раз при условии от таймера надо уменьшать значение flZar на расчитанное d. Дык вот, не хочет уменьшаться и всё тут! Само по себе d расчитывается нормально. Как я только не пытался. Строчка sprintf(str,"%03d:%02d %f",min,sec,flZar-d); отображается корректно, значит дело в приравнивании?
CodeVision 2.05.0 (пробовал на 1.25.9), симулирую в шПротеусе 7.8 (пробовал разные). На LCD вместо моего числа получается "-INF".
Люди добрые, дапамажыте советом, а то совсем замучался, да и работа стоит...
проект и схему прилагаю, ногами прошу сильно не бить, т.к. только учусь
- Вложения
-
- Desktop.rar
- (125.48 КБ) 164 скачивания