реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> WinAVR (sd+atmega16), вопрос по компиляции
VaaG
сообщение Feb 21 2009, 20:05
Сообщение #1





Группа: Новичок
Сообщений: 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) по этой директиве (выше)...
Если эта тест-программа заработает, то дальше точно сам разберусь!!!!

С Уважением
Go to the top of the page
 
+Quote Post
Petka
сообщение Feb 21 2009, 21:24
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(VaaG @ Feb 21 2009, 23:05) *
Всем Доброго Времени суток!!!
...
3. Generate a hexfile (avr-objcopy -j .text -j .data -O ihex avrtest.o avrtest.hex)

(Проблема всплыла здесь...не могу понять что делать с подчёркнутой директивой)
....

А чего тут непонятного ? подчёркнутую строку (без скобок, само-собой) копируете в командную строку и запускаете.
Go to the top of the page
 
+Quote Post
VaaG
сообщение Feb 22 2009, 08:57
Сообщение #3





Группа: Новичок
Сообщений: 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 ???

В чем я ошибся?
Go to the top of the page
 
+Quote Post
Petka
сообщение Feb 22 2009, 09:40
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(VaaG @ Feb 22 2009, 11:57) *
Создал, директорию, поместил туда libefsl.a и avrtest.c (сама программа)
......
Как я понял, компилятор не видит какие-то дополнительные библиотеки, ресурсы...
efs.h ???

В чем я ошибся?

1) Вы поместили файл в каталог путь к которому сожержит пробелы. например "Рабочий стол"! работайте в другой папке, например "c:\efsl".
2) В папку, в которой компилируете скиньте для начала ещё файл efs.h.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 22 2009, 09:54
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
VaaG
сообщение Feb 22 2009, 11:05
Сообщение #6





Группа: Новичок
Сообщений: 13
Регистрация: 21-02-09
Из: Москва
Пользователь №: 45 189



Цитата(Сергей Борщ @ Feb 22 2009, 12:54) *
Вот интересно, вы набирая эту команду осознавали, что -Ic:\efsl\inc означает какой-то путь и что, наверное, этот путь указан неспроста? 


Конечно осознавал! Я нашёл все ошибки и генерировал hex!!!!
Спасибо большое Petka и Вам Сергей!

Но тут оказалось, что размер hex-68кб!!!! именно для 128 меги


Народ, подскажите, а можно как-либо преобразовать для Atmega16 ??? Просто 128-ая у меня для других более сложных схем, она там больше нужна...
Эта библиотека просто напросто огромная...

Есть вообще проверенный спрособ записи и чтения SD для atmega16 ???

Пробовал сайт капитана Не инициализирует SD...
Go to the top of the page
 
+Quote Post
kurtis
сообщение Feb 22 2009, 11:29
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 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-ю мегу. smile.gif
Возьмите хотя бы 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
Go to the top of the page
 
+Quote Post
VaaG
сообщение Feb 22 2009, 13:20
Сообщение #8





Группа: Новичок
Сообщений: 13
Регистрация: 21-02-09
Из: Москва
Пользователь №: 45 189



Цитата(kurtis @ Feb 22 2009, 14:29) *
Только я не знаю как вы 25 килабайт кода хотите засунуть в 16-ю мегу. smile.gif
Возьмите хотя бы 32-ю


Вот я тоже не знаю как...

Неужели нет версий Efsl другой?

Или другую файловую систему использовать? поиск особо чего не дал...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 22 2009, 14:32
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
VaaG
сообщение Feb 22 2009, 15:36
Сообщение #10





Группа: Новичок
Сообщений: 13
Регистрация: 21-02-09
Из: Москва
Пользователь №: 45 189



Цитата(Сергей Борщ @ Feb 22 2009, 17:32) *
Посмотрите FatFs...

Я посмотрел...в этой библиотеке много лишнего и не нужного мне...
В efsl чётко описывалось как действует, и для чего рассчитана библиотека.

Цитата(Сергей Борщ @ Feb 22 2009, 17:32) *
Реальный размер прошивки...

Да как сказал kurtis реальный размер около 25кб. Влезет на 32 мегу.

Хорошо, вариант А:
---купить 32-ую и работать с ней. Только хотелось бы быть 100% уверенным в этом варианте!!

вариант В:
по FatFS я не уверен, чёткого описания не вижу => вопросов будет много...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 22 2009, 16:10
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post
VaaG
сообщение Feb 22 2009, 17:21
Сообщение #12





Группа: Новичок
Сообщений: 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 карту к микроконтроллеру???
Прикрепленное изображение

так?
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 19:22
Рейтинг@Mail.ru


Страница сгенерированна за 0.01462 секунд с 7
ELECTRONIX ©2004-2016