CodeVisionAVR и Petit FatFs в Atmega8
-
Вова_Синяк
- Первый раз сказал Мяу!
- Сообщения: 30
- Зарегистрирован: Чт мар 20, 2014 20:07:25
CodeVisionAVR и Petit FatFs в Atmega8
помогите найти в чем проблема
хочу прочитать данные из файла на флэшке код такой
#include "pff.h"
#include "diskio.h"
FATFS fs;; //FATFS объявление объекта FATFS
BYTE buff[5]; //FATFS буфер для чтения файла
void main(void)
{
FRESULT res; //FATFS переменная для возвращаемых значений
WORD br; //FATFS счетчик прочитанных байт
//монтируем диск и открываем файл
res = pf_mount(&fs);
if (res==0x00) {led (5); delay_ms(1000);};
res = pf_open("000.txt");
if (res==0x00) {led (4); delay_ms(1000);};
res = pf_lseek(0); //Установим курсор чтения на 0 в файле
if (res==0x00) {led (3); delay_ms(1000);};
//читаем 5 байт из файла
res = pf_read(buff, 5, &br);
if(res == FR_OK){
//если прочитали меньше 5, значит достигли конца файла
if (br != 5){
led (2); delay_ms(500);
}
}
res = pf_mount(0x00); //Демонтируем FAT
if (res==0x00) {led (1); delay_ms(1000);};
//=====
при попытке скомпилировать получаю
Linker error: S:\_ЭЛЕКТРОПРОЭКТ_\pff.h(137): function 'pf_mount' declared, but never defined
Linker error: S:\_ЭЛЕКТРОПРОЭКТ_\pff.h(138): function 'pf_open' declared, but never defined
Linker error: S:\_ЭЛЕКТРОПРОЭКТ_\pff.h(139): function 'pf_read' declared, but never defined
Linker error: S:\_ЭЛЕКТРОПРОЭКТ_\pff.h(141): function 'pf_lseek' declared, but never defined
в pff.h есть строки
/* Petit FatFs module application interface */
FRESULT pf_mount (FATFS*); /* Mount/Unmount a logical drive */
FRESULT pf_open (const char*); /* Open a file */
FRESULT pf_read (void*, WORD, WORD*); /* Read data from the open file */
FRESULT pf_lseek (DWORD); /* Move file pointer of the open file */
может в pff.h что настроить прописать нужно (пишет же что функция обозвана а нету ее)??? четвертый день уже играюсь, в си программирую всего месяц заранее спасибо
хочу прочитать данные из файла на флэшке код такой
#include "pff.h"
#include "diskio.h"
FATFS fs;; //FATFS объявление объекта FATFS
BYTE buff[5]; //FATFS буфер для чтения файла
void main(void)
{
FRESULT res; //FATFS переменная для возвращаемых значений
WORD br; //FATFS счетчик прочитанных байт
//монтируем диск и открываем файл
res = pf_mount(&fs);
if (res==0x00) {led (5); delay_ms(1000);};
res = pf_open("000.txt");
if (res==0x00) {led (4); delay_ms(1000);};
res = pf_lseek(0); //Установим курсор чтения на 0 в файле
if (res==0x00) {led (3); delay_ms(1000);};
//читаем 5 байт из файла
res = pf_read(buff, 5, &br);
if(res == FR_OK){
//если прочитали меньше 5, значит достигли конца файла
if (br != 5){
led (2); delay_ms(500);
}
}
res = pf_mount(0x00); //Демонтируем FAT
if (res==0x00) {led (1); delay_ms(1000);};
//=====
при попытке скомпилировать получаю
Linker error: S:\_ЭЛЕКТРОПРОЭКТ_\pff.h(137): function 'pf_mount' declared, but never defined
Linker error: S:\_ЭЛЕКТРОПРОЭКТ_\pff.h(138): function 'pf_open' declared, but never defined
Linker error: S:\_ЭЛЕКТРОПРОЭКТ_\pff.h(139): function 'pf_read' declared, but never defined
Linker error: S:\_ЭЛЕКТРОПРОЭКТ_\pff.h(141): function 'pf_lseek' declared, but never defined
в pff.h есть строки
/* Petit FatFs module application interface */
FRESULT pf_mount (FATFS*); /* Mount/Unmount a logical drive */
FRESULT pf_open (const char*); /* Open a file */
FRESULT pf_read (void*, WORD, WORD*); /* Read data from the open file */
FRESULT pf_lseek (DWORD); /* Move file pointer of the open file */
может в pff.h что настроить прописать нужно (пишет же что функция обозвана а нету ее)??? четвертый день уже играюсь, в си программирую всего месяц заранее спасибо
- Реклама
- ИС-пытатель
- Вымогатель припоя
- Сообщения: 577
- Зарегистрирован: Ср июн 19, 2013 08:10:48
- Откуда: Москва, СПб, Липецк, Рязань
Re: CodeVisionAVR и Petit FatFs в Atmega8
А че тут не понятного? Вам компилятор все написал. Вбейте в переводчик, если с английским плохо. Вы подключили библиотеку. В ней объявлена данная функция (скорее всего прототип), но сама функция нигде в ней не расписана. Значит Вам надо либо еще какую-то библиотеку подключить, без которой не работает Ваша, либо найти в интернете рабочую библиотеку.
-
Вова_Синяк
- Первый раз сказал Мяу!
- Сообщения: 30
- Зарегистрирован: Чт мар 20, 2014 20:07:25
Re: CodeVisionAVR и Petit FatFs в Atmega8
так вроде и библиотеку у чена на оф сайте взял и там вроде нигде не написано что функции расписывать надо, тока используйте так и так, и у других исходники смотрю только то же что и у меня, вернее у меня все как там один в один,
в pff.h есть Petit FatFs Configuration Options там еденички протавил какие функции использовать буду не не компилируется проэкт
в pff.h есть Petit FatFs Configuration Options там еденички протавил какие функции использовать буду не не компилируется проэкт
Re: CodeVisionAVR и Petit FatFs в Atmega8
Файл pff.c к проекту не подключили.
-
Вова_Синяк
- Первый раз сказал Мяу!
- Сообщения: 30
- Зарегистрирован: Чт мар 20, 2014 20:07:25
Re: CodeVisionAVR и Petit FatFs в Atmega8
пробую
вставляю вместо #include "pff.h" код #include "pff.c" (хотя я и так и так пробовал просто в pff.c есть ссылка на pff.h)
получаю
Linker error: S:\_ЭЛЕКТРОПРОЭКТ_\diskio.h(26): function 'disk_initialize' declared, but never defined
Linker error: S:\_ЭЛЕКТРОПРОЭКТ_\diskio.h(27): function 'disk_readp' declared, but never defined
пишу у себя еще
res = disk_initialize ();
if (res==0x00) {led (6); delay_ms(1000);};
результат тот же
изучая чужие исходники краем глаза вижу в папке файл mmc.c а у меня его нету, может в нем все дело, смотрю другой проект там он тоже есть но он отличается, там пины можно выбрать
и вот тут я запутался как и где сделать этот файл есть какая нить инфа по этому поводу
цепляю и его из папки семплов от чана просто на шару а в нем есть
#include "suart.h"
который дает ошибку
Error: S:\_ЭЛЕКТРОПРОЭКТ_\suart.h(4), #included from: mmc.c: declaration syntax error
строка
void xmit(uint8_t);
помогите здесь я вообще потерялся
немогу у чена найти как сделать mmc.c под себя, подскажите куда рыть
вставляю вместо #include "pff.h" код #include "pff.c" (хотя я и так и так пробовал просто в pff.c есть ссылка на pff.h)
получаю
Linker error: S:\_ЭЛЕКТРОПРОЭКТ_\diskio.h(26): function 'disk_initialize' declared, but never defined
Linker error: S:\_ЭЛЕКТРОПРОЭКТ_\diskio.h(27): function 'disk_readp' declared, but never defined
пишу у себя еще
res = disk_initialize ();
if (res==0x00) {led (6); delay_ms(1000);};
результат тот же
изучая чужие исходники краем глаза вижу в папке файл mmc.c а у меня его нету, может в нем все дело, смотрю другой проект там он тоже есть но он отличается, там пины можно выбрать
и вот тут я запутался как и где сделать этот файл есть какая нить инфа по этому поводу
цепляю и его из папки семплов от чана просто на шару а в нем есть
#include "suart.h"
который дает ошибку
Error: S:\_ЭЛЕКТРОПРОЭКТ_\suart.h(4), #included from: mmc.c: declaration syntax error
строка
void xmit(uint8_t);
помогите здесь я вообще потерялся
немогу у чена найти как сделать mmc.c под себя, подскажите куда рыть
- Реклама
-
codenamehawk
- Вымогатель припоя
- Сообщения: 528
- Зарегистрирован: Вт фев 09, 2010 17:52:26
Re: CodeVisionAVR и Petit FatFs в Atmega8
Для начала скомпилируйте avr_foolproof
Чан пишет для аvr-gcc
У меня нормально собирается (WinAVR 20100110) аvr-gcc 4.3.3 для Атмега16
(минимальные требования для этого примера проц FLASH 16кб, 1кб RAM.)
В "макефиле" видно, что используются файлы ff.c sdmm.c
в "маин" include "ff.h"
Возможно и "кодевизон" сможет подключите еще sdmm.c
Чан пишет для аvr-gcc
У меня нормально собирается (WinAVR 20100110) аvr-gcc 4.3.3 для Атмега16
(минимальные требования для этого примера проц FLASH 16кб, 1кб RAM.)
В "макефиле" видно, что используются файлы ff.c sdmm.c
в "маин" include "ff.h"
Возможно и "кодевизон" сможет подключите еще sdmm.c
-
Вова_Синяк
- Первый раз сказал Мяу!
- Сообщения: 30
- Зарегистрирован: Чт мар 20, 2014 20:07:25
Re: CodeVisionAVR и Petit FatFs в Atmega8
что такое avr_foolproof???
у чена в семплах нет sdmm.c где можно взять???
нашол у когото в проэкте mmc.c внутри есть заголовок
PFF - Low level disk control module for ATmega32
пытаюсь его перекрутить под себя компилятор просит с меня перемееные
Error: S:\_ЭЛЕКТРОПРОЭКТ_\mmc.c(36), #included from: СТАНОК.c: undefined symbol '_BV'
Error: S:\_ЭЛЕКТРОПРОЭКТ_\mmc.c(198), #included from: СТАНОК.c: undefined symbol 'lba'
Error: S:\_ЭЛЕКТРОПРОЭКТ_\mmc.c(210), #included from: СТАНОК.c: undefined symbol 'ofs'
Error: S:\_ЭЛЕКТРОПРОЭКТ_\mmc.c(221), #included from: СТАНОК.c: undefined symbol 'cnt'
немогу найти где они назначаются
у чена в семплах нет sdmm.c где можно взять???
нашол у когото в проэкте mmc.c внутри есть заголовок
PFF - Low level disk control module for ATmega32
пытаюсь его перекрутить под себя компилятор просит с меня перемееные
Error: S:\_ЭЛЕКТРОПРОЭКТ_\mmc.c(36), #included from: СТАНОК.c: undefined symbol '_BV'
Error: S:\_ЭЛЕКТРОПРОЭКТ_\mmc.c(198), #included from: СТАНОК.c: undefined symbol 'lba'
Error: S:\_ЭЛЕКТРОПРОЭКТ_\mmc.c(210), #included from: СТАНОК.c: undefined symbol 'ofs'
Error: S:\_ЭЛЕКТРОПРОЭКТ_\mmc.c(221), #included from: СТАНОК.c: undefined symbol 'cnt'
немогу найти где они назначаются
-
codenamehawk
- Вымогатель припоя
- Сообщения: 528
- Зарегистрирован: Вт фев 09, 2010 17:52:26
Re: CodeVisionAVR и Petit FatFs в Atmega8
Я пример привел для FatFs пример из FatFs sample projects .
-
codenamehawk
- Вымогатель припоя
- Сообщения: 528
- Зарегистрирован: Вт фев 09, 2010 17:52:26
Re: CodeVisionAVR и Petit FatFs в Atmega8
Для Petit FAT
в макефиле pff.c mmc.c
в маин #include <string.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include "diskio.h"
#include "pff.h"
#include "xitoa.h"
#include "suart.h"
Пример Sample projects папка AVR
(Правда для атмега8 он не компилируется)
Ваш код ближе всего к примеру из папки avr_boot , но там проц должен быть 32КБ
посмотрите макефайл и инклюды в маин.
в макефиле pff.c mmc.c
в маин #include <string.h>
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <avr/interrupt.h>
#include "diskio.h"
#include "pff.h"
#include "xitoa.h"
#include "suart.h"
Пример Sample projects папка AVR
(Правда для атмега8 он не компилируется)
Ваш код ближе всего к примеру из папки avr_boot , но там проц должен быть 32КБ
посмотрите макефайл и инклюды в маин.
-
Вова_Синяк
- Первый раз сказал Мяу!
- Сообщения: 30
- Зарегистрирован: Чт мар 20, 2014 20:07:25
Re: CodeVisionAVR и Petit FatFs в Atmega8
люди как для CodeVision будет звучать фраза
asm("nop");
asm("nop");
-
codenamehawk
- Вымогатель припоя
- Сообщения: 528
- Зарегистрирован: Вт фев 09, 2010 17:52:26
Re: CodeVisionAVR и Petit FatFs в Atmega8
#asm("nop");
или если блок
#asm
nop
nop
#endasm
или если блок
#asm
nop
nop
#endasm
-
watchmaker
- Поставщик валерьянки для Кота
- Сообщения: 2183
- Зарегистрирован: Вс ноя 15, 2009 23:13:59
- Откуда: Харьков
- Контактная информация:
Re: CodeVisionAVR и Petit FatFs в Atmega8
Кириллицу из путей выкинь, не поддерживается.Error: S:\_ЭЛЕКТРОПРОЭКТ_\mmc.c(36), #included from: СТАНОК.c: undefined symbol '_BV'
Иногда мой питомец уходит в такую спячку, что разбудить его можно только щелчком по первой ноге...
-
codenamehawk
- Вымогатель припоя
- Сообщения: 528
- Зарегистрирован: Вт фев 09, 2010 17:52:26
Re: CodeVisionAVR и Petit FatFs в Atmega8
Гляньте, похожее кто то делал на FAT16 для CV
В протеусе работает, в железе не пробовал.
_BV поддерживает WinAVR, а CV его не знает.
В протеусе работает, в железе не пробовал.
_BV поддерживает WinAVR, а CV его не знает.
-
Вова_Синяк
- Первый раз сказал Мяу!
- Сообщения: 30
- Зарегистрирован: Чт мар 20, 2014 20:07:25
Re: CodeVisionAVR и Petit FatFs в Atmega8
насчет _BV там дальше макрос нашол
#define _BV(x) (1 << (x))
насчет кирилицы проблем вроде не замечал
за fat16.rar сейчас посмотрю
#define _BV(x) (1 << (x))
насчет кирилицы проблем вроде не замечал
за fat16.rar сейчас посмотрю
-
Вова_Синяк
- Первый раз сказал Мяу!
- Сообщения: 30
- Зарегистрирован: Чт мар 20, 2014 20:07:25
Re: CodeVisionAVR и Petit FatFs в Atmega8
посмотрел fat16.rar карточку инициализирует а фат нифига на четырех разных карточках пробовал (две по 16мб, одна 256 мб, одна 2гб)
может схема виновата? подключал както так, насколько номиналы резисторов критичны?
вот кусок кода
void io_init() {
byte ok;
led2(1);//первый этап моргаем первым светиком
led (0);
ok=sd_init(); //Инициализируем карточку
switch(ok) {
case SD_ERR_SUSSED: {errr();led (6);}; break;//"OK - SD INIT" //Нет ошибки
case SD_ERR_IDLE: {errr();led (1);}; break; //"ERROR - SD IDLE //Карточка не перешла в IDLE
case SD_ERR_INIT: {errr();led (2);}; break; //"ERROR - SD INIT" //Карточка не инициализировалась
}
while (ok!=0);
delay_ms(2000); //для индиации ошибки
led2(2);//первый этап моргаем вторым светиком
led (0);
ok=fat_init(); //Инициализируем FAT
switch(ok) {
case FAT_ERR_SUSSED: {errr();led (6);}; break; //"OK - FAT16 INIT" //Нет ошибки
case FAT_ERR_PART: {errr();led (3);}; break; //"ERROR - PARTITION" //Ошибка Partition
case FAT_ERR_ROOT: {errr();led (4);}; break; //"ERROR - ROOT ENTRY" //Ошибка Root Entry
case FAT_ERR_SIZE: {errr();led (5);}; break; //"ERROR - SIZE" //Ошибка в количестве кластеров
}
while (ok!=0);
delay_ms(2000); //для индиации ошибки
led2(3);//первый этап моргаем третим светиком
led (0);
}
на fat_init переходит а от туда уже не возвращается,
да кстате у меня кварц на 16мгц стоит может сдесь чего не так
может схема виновата? подключал както так, насколько номиналы резисторов критичны?
вот кусок кода
void io_init() {
byte ok;
led2(1);//первый этап моргаем первым светиком
led (0);
ok=sd_init(); //Инициализируем карточку
switch(ok) {
case SD_ERR_SUSSED: {errr();led (6);}; break;//"OK - SD INIT" //Нет ошибки
case SD_ERR_IDLE: {errr();led (1);}; break; //"ERROR - SD IDLE //Карточка не перешла в IDLE
case SD_ERR_INIT: {errr();led (2);}; break; //"ERROR - SD INIT" //Карточка не инициализировалась
}
while (ok!=0);
delay_ms(2000); //для индиации ошибки
led2(2);//первый этап моргаем вторым светиком
led (0);
ok=fat_init(); //Инициализируем FAT
switch(ok) {
case FAT_ERR_SUSSED: {errr();led (6);}; break; //"OK - FAT16 INIT" //Нет ошибки
case FAT_ERR_PART: {errr();led (3);}; break; //"ERROR - PARTITION" //Ошибка Partition
case FAT_ERR_ROOT: {errr();led (4);}; break; //"ERROR - ROOT ENTRY" //Ошибка Root Entry
case FAT_ERR_SIZE: {errr();led (5);}; break; //"ERROR - SIZE" //Ошибка в количестве кластеров
}
while (ok!=0);
delay_ms(2000); //для индиации ошибки
led2(3);//первый этап моргаем третим светиком
led (0);
}
на fat_init переходит а от туда уже не возвращается,
да кстате у меня кварц на 16мгц стоит может сдесь чего не так
-
codenamehawk
- Вымогатель припоя
- Сообщения: 528
- Зарегистрирован: Вт фев 09, 2010 17:52:26
Re: CodeVisionAVR и Petit FatFs в Atmega8
А как вы сами думаете, если проект рассчитан на 8 мгц,а вы запускаете на 16мгц, он должен работать?Вова_Синяк писал(а): да кстате у меня кварц на 16мгц стоит может сдесь чего не так
-
Вова_Синяк
- Первый раз сказал Мяу!
- Сообщения: 30
- Зарегистрирован: Чт мар 20, 2014 20:07:25
Re: CodeVisionAVR и Petit FatFs в Atmega8
я думал что если проект перекомпилировать и указать что у тебя 16 мгц а не заливать готовый кекс то все тайминги пересчитаются если они конечно жёстко не заданы циклами
-
codenamehawk
- Вымогатель припоя
- Сообщения: 528
- Зарегистрирован: Вт фев 09, 2010 17:52:26
Re: CodeVisionAVR и Petit FatFs в Atmega8
Переключите на 8 мгц, от внутреннего генератора.
Ваш проект в протеусе работает?
Их проект в вашем проце?
Ваш проект в протеусе работает?
Их проект в вашем проце?
-
Вова_Синяк
- Первый раз сказал Мяу!
- Сообщения: 30
- Зарегистрирован: Чт мар 20, 2014 20:07:25
Re: CodeVisionAVR и Petit FatFs в Atmega8
нет я свой проэкт в протеусе делал но забросил, то глючит то не считает, на железе както сподручнее и быстрее ИМХО
а fat16.rar полнотью не компилировал, к себе перетащил то что мне нужно, проэкт то точно рабочий, вот и возник вопрос может схема виновата номиналы резисторов взяты с потолка, в разных источниках разные указаны, вот взял что было и впаял, но ведь инициализацию карты проходит,
попробую под 8 мгц от внутреннего запитатся
а fat16.rar полнотью не компилировал, к себе перетащил то что мне нужно, проэкт то точно рабочий, вот и возник вопрос может схема виновата номиналы резисторов взяты с потолка, в разных источниках разные указаны, вот взял что было и впаял, но ведь инициализацию карты проходит,
попробую под 8 мгц от внутреннего запитатся
-
mrFox
- Нашел транзистор. Понюхал.
- Сообщения: 190
- Зарегистрирован: Пт сен 21, 2007 17:53:23
- Откуда: Зарайск
Re: CodeVisionAVR и Petit FatFs в Atmega8
на странице Чана есть и демка работы с SD со схемой и кодом, там собстно и номиналы; и отношение сопротивлений резисторов должно быть как у ЧанаВова_Синяк писал(а): ...насколько номиналы резисторов критичны?
...на fat_init переходит а от туда уже не возвращается,
да кстате у меня кварц на 16мгц стоит может сдесь чего не так
электрическая схема соединения MMC и SD разная - проверь тип карты
может банально не работать библиотека SD - карточек 4 типа или написанна под одну частоту
для начала стоит почитать регистры самой карточки (например размер)
библиотеку стоит брать с сайта самого Чана - брал с учебного сайта - не запустилась почему-то
PS чтоб переносить с GCC на CV надо знать особенности обоих
иначе стоит взять GCC и не мучится


