|
|
  |
WinAVR (sd+atmega16), вопрос по компиляции |
|
|
|
Feb 21 2009, 20:05
|
Группа: Новичок
Сообщений: 13
Регистрация: 21-02-09
Из: Москва
Пользователь №: 45 189

|
Всем Доброго Времени суток!!! Пытаюсь подключить SD карту canon 32мб к ATmega16 ЦЕЛЬ: Инициализация SD, запись, чтение на МК Решил рациональнее действовать и использовать "проверенные" источники В коде используется библиотека EFSLАлгоритм запуска тест-программы: (библиотеку я скомпилировал!!!) 1. Make sure that your directory contains both the example from above called avrtest.c and the library libefsl.a . 2. Compile the program: • On Linux (with avr-gcc): avr-gcc -I/home/user/efsl/inc/ -I/home/user/efsl/conf -ffreestanding -mmcu=atmega128 -Os -o avrtest.o avrtest.c -L./ -lefsl • On Windows (with WinAVR): avr-gcc -Ic:\efsl\inc -Ic:\efsl\conf - ffreestanding -mmcu=atmega128 -Os -o avrtest.o avrtest.c -L.\ -lefsl 3. Generate a hexfile (avr-objcopy -j .text -j .data -O ihex avrtest.o avrtest.hex)(Проблема всплыла здесь...не могу понять что делать с подчёркнутой директивой) Далее всё просто и понятно! 4. Connect an SD-card to your Atmega128 with a file called orig.txt on it. 5. Flash the hex file into your μC. • On Linux: avrdude -P /dev/ttyUSB0 -c stk500 -p m128 -Uflash:w:avrtest.hex • On Windows: use Atmel AVR-Studio 6. Reset your μC and wait some time (depending on how big the file orig.txt is). 7. Disconnect the SD-card, so you can put it in your card reader and find out if the file orig.txt is copied to copy.txt . Помогите разобраться с созданием (hex) по этой директиве (выше)... Если эта тест-программа заработает, то дальше точно сам разберусь!!!! С Уважением
|
|
|
|
|
Feb 22 2009, 08:57
|
Группа: Новичок
Сообщений: 13
Регистрация: 21-02-09
Из: Москва
Пользователь №: 45 189

|
Цитата(Petka @ Feb 22 2009, 00:24)  ...копируете в командную строку и запускаете. Создал, директорию, поместил туда libefsl.a и avrtest.c (сама программа) Через командную стороку зашёл в эту директорию и запустил команду компиляции avr-gcc -Ic:\efsl\inc -Ic:\efsl\conf -ffreestanding -mmcu=atmega128 -Os -o avrtest.o avrtest.c -L.\ -lefslВ итоге ошибка...
Вот содержимое avrtest.c \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ #include <efs.h> void hang(void); void main(void) { EmbeddedFileSystem efs; EmbeddedFile file_r, file_w; unsigned short i,e; char buf[512]; debug_init(); DBG((TXT("Hello :-)"))); if(efs_init(&efs,0)!=0){ hang(); } if(file_fopen(&file_r,&efs.myFs,"orig.txt",'r')!=0){ hang(); } if(file_fopen(&file_w,&efs.myFs,"copy.txt",'w')!=0){ hang(); } while(e=file_read(&file_r,512,buf)){ file_write(&file_w,e,buf); } file_fclose(&file_r); file_fclose(&file_w); fs_umount(&efs.myFs); hang(); } void hang(void) { while((1)) _NOP(); } \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ Как я понял, компилятор не видит какие-то дополнительные библиотеки, ресурсы... efs.h ??? В чем я ошибся?
|
|
|
|
|
Feb 22 2009, 09:54
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(VaaG @ Feb 22 2009, 10:57)  Как я понял, компилятор не видит какие-то дополнительные библиотеки, ресурсы... efs.h ??? Да, он не нашел заголовочный файл efsl.h. Судя по тому, что его имя указано в угловых скобках, этот файл должен находиться в директории c:\efsl\inc. Поскольку вы распаковали архив в другую папку, вам надо указать правильные пути в опциях -I. Вот интересно, вы набирая эту команду осознавали, что -Ic:\efsl\inc означает какой-то путь и что, наверное, этот путь указан неспроста?
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 22 2009, 11:05
|
Группа: Новичок
Сообщений: 13
Регистрация: 21-02-09
Из: Москва
Пользователь №: 45 189

|
Цитата(Сергей Борщ @ Feb 22 2009, 12:54)  Вот интересно, вы набирая эту команду осознавали, что -Ic:\efsl\inc означает какой-то путь и что, наверное, этот путь указан неспроста? Конечно осознавал! Я нашёл все ошибки и генерировал hex!!!! Спасибо большое Petka и Вам Сергей! Но тут оказалось, что размер hex-68кб!!!! именно для 128 меги Народ, подскажите, а можно как-либо преобразовать для Atmega16 ??? Просто 128-ая у меня для других более сложных схем, она там больше нужна... Эта библиотека просто напросто огромная... Есть вообще проверенный спрособ записи и чтения SD для atmega16 ??? Пробовал сайт капитана Не инициализирует SD...
|
|
|
|
|
Feb 22 2009, 11:29
|
Местный
  
Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205

|
В строке avr-gcc -Ic:\efsl\inc -Ic:\efsl\conf -ffreestanding -mmcu= atmega128 -Os -o avrtest.o avrtest.c -L.\ -lefsl ключ -mmcu заменить на то что вам больше нравиться. Только я не знаю как вы 25 килабайт кода хотите засунуть в 16-ю мегу.  Возьмите хотя бы 32-ю Код mike@KurtisMachine:~/AVR/efsl-0.2.8/examples/avr$ avr-size avrtest.hex text data bss dec hex filename 0 24526 0 24526 5fce avrtest.hex
|
|
|
|
|
Feb 22 2009, 13:20
|
Группа: Новичок
Сообщений: 13
Регистрация: 21-02-09
Из: Москва
Пользователь №: 45 189

|
Цитата(kurtis @ Feb 22 2009, 14:29)  Только я не знаю как вы 25 килабайт кода хотите засунуть в 16-ю мегу.  Возьмите хотя бы 32-ю Вот я тоже не знаю как... Неужели нет версий Efsl другой? Или другую файловую систему использовать? поиск особо чего не дал...
|
|
|
|
|
Feb 22 2009, 14:32
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(VaaG @ Feb 22 2009, 15:20)  Или другую файловую систему использовать? поиск особо чего не дал... Посмотрите FatFs. И ее обрезанный вариант TinyFatFs Цитата(VaaG @ Feb 22 2009, 13:05)  Но тут оказалось, что размер hex-68кб!!!! именно для 128 меги HEX кроме собственно данных содержит и дополнительную информацию. Реальный размер прошивки вы можете узнать командой avr-size -C --mcu=atmega128 avrtest.o
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 22 2009, 15:36
|
Группа: Новичок
Сообщений: 13
Регистрация: 21-02-09
Из: Москва
Пользователь №: 45 189

|
Цитата(Сергей Борщ @ Feb 22 2009, 17:32)  Я посмотрел...в этой библиотеке много лишнего и не нужного мне... В efsl чётко описывалось как действует, и для чего рассчитана библиотека. Цитата(Сергей Борщ @ Feb 22 2009, 17:32)  Реальный размер прошивки... Да как сказал kurtis реальный размер около 25кб. Влезет на 32 мегу. Хорошо, вариант А: ---купить 32-ую и работать с ней. Только хотелось бы быть 100% уверенным в этом варианте!! вариант В: по FatFS я не уверен, чёткого описания не вижу => вопросов будет много...
|
|
|
|
|
Feb 22 2009, 16:10
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(VaaG @ Feb 22 2009, 17:36)  по FatFS я не уверен, чёткого описания не вижу => вопросов будет много... Смею утверждать, что вопросы возникают не от отсутствия документации (на FatFS она есть, и на сайте и в комплекте) а от игнорирования ее. Я прочел всю документацию, которая выложена на сайте FatFS. Поверьте, в процессе ее встраивания в проект у меня не возникло ни одного вопроса, на который не было бы ответа в документации. Не понадобилось даже смотреть примеры, которых достаточно на том же сайте. Если вы прочитаете документацию, вы увидите, что большинство ненужных вам функций можно отключить соответствующими параметрами в одном из файлов. А вообще - современные компиляторы не включают в выходной код функции, которые не используются (dead code elimination). P.S. если бы вы просмотрели FatFs module application note, то увидели бы, что в самом полном варианте она занимает в AVR около 9К кода. Дальше делайте выводы сами. Цитата(VaaG @ Feb 22 2009, 17:36)  ---купить 32-ую и работать с ней. Только хотелось бы быть 100% уверенным в этом варианте!! Цитата -- Полное спокойствие может дать человеку только страховой полис, -- ответил Остап, не замедляя хода. - Так вам скажет любой агент по страхованию жизни.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 22 2009, 17:21
|
Группа: Новичок
Сообщений: 13
Регистрация: 21-02-09
Из: Москва
Пользователь №: 45 189

|
Цитата(Сергей Борщ @ Feb 22 2009, 19:10)  Смею утверждать, что вопросы возникают не от отсутствия документации (на FatFS она есть, и на сайте и в комплекте) а от игнорирования ее. ... P.S. Дальше делайте выводы сами. Я поборол лень и прочитал полностью. В принципе я согласен с Вами... Что понял я: 1) файлы tff.h и ff.h отвечают за настройки компилятора (его вида #define_MCU_ENDIAN 1)winAVR туда же входят настройки для включения некоторых функций, там же выбирается режим tinyFatfs и Fatfs 2)diskio.c - основной файл, в нем описаны функции инициализации, статуса диска, чтения сектора, запись сектора, и Miscellaneous Functions (что это я не понял) в diskio.c Код case ATA : result = ATA_disk_write(buff, sector, count); // translate the reslut code here
return res;
case MMC : result = MMC_disk_write(buff, sector, count); // translate the reslut code here
return res;
case USB : result = USB_disk_write(buff, sector, count); // translate the reslut code here
return res; ---тут как я понял для каждого своё...в моём случае использую MMC, только вот интересно, а с SD проблем не будет ??? ---и соответственно я удаляю лишнее (USB и ATA) Тут всё ясно! Теперь главные два вопроса: 1) Я создаю файл проекта и включаю в него все библиотеки? или только diskio.c ??? 2)Как тогда подключать SD карту к микроконтроллеру???
так?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|