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

 
 
> Ищу функции работы с SD картой, написанные для KEIL и SAM7
zheka
сообщение May 21 2010, 08:50
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Собираюсь использовать FatFS от Chan.
Как известно эта библиотека представляет собой функции FAT, а низкоуровневые операции с картой предлагает написать самим.
Все что я видел в интернете и на форуме - либо для IAR, либо для WinARM. Попытки подключить их в KEIL и адаптировать ни к чему не привели. Ошибки, которые возникают при компиляции никто внятно прокомментировать не смог.
Может быть кто делал проект на FatFS для KEIL ? Буду признателен.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
aaarrr
сообщение May 21 2010, 09:03
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zheka @ May 21 2010, 12:50) *
Ошибки, которые возникают при компиляции никто внятно прокомментировать не смог.

Нет, это вы не дали себе труда хоть немного разобраться. Боюсь, что даже с готовым решением будет то же самое.
Go to the top of the page
 
+Quote Post
zheka
сообщение May 21 2010, 09:17
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



в проекте есть строка __ramfunc void timer0_c_irq_handler(void); ругается на __ramfunc. Что это я знаю, чем заменить это в KEIL - нигде информации не нашел.
Можете подсказать?
Go to the top of the page
 
+Quote Post
igorenja
сообщение May 21 2010, 09:24
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 8-08-08
Из: Новосибирск
Пользователь №: 39 488



Цитата(zheka @ May 21 2010, 16:17) *
в проекте есть строка __ramfunc void timer0_c_irq_handler(void); ругается на __ramfunc. Что это я знаю, чем заменить это в KEIL - нигде информации не нашел.
Можете подсказать?

вы свою ветку давно смотрели?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 21 2010, 09:40
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zheka @ May 21 2010, 13:17) *
в проекте есть строка __ramfunc void timer0_c_irq_handler(void); ругается на __ramfunc. Что это я знаю, чем заменить это в KEIL - нигде информации не нашел.
Можете подсказать?

Если знаете что это, то могу предложить два варианта замены:
1. #define __ramfunc /* Ничего, поживет и во флеши, нам проект пока собрать надо */
2. Перед timer0_c_irq_handler написать: #pragma arm section code = "ramfunc", после - #pragma arm section code
В области RAM scatter-файла добавить запись * (ramfunc)

Ну, минут 20 надо на чтение документации, не больше.

Цитата(igorenja @ May 21 2010, 13:24) *
вы свою ветку давно смотрели?

CARM давно упразднили.
Go to the top of the page
 
+Quote Post
igorenja
сообщение May 21 2010, 09:57
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 8-08-08
Из: Новосибирск
Пользователь №: 39 488



Цитата(aaarrr @ May 21 2010, 16:40) *
CARM давно упразднили.


Да... Я просто не читал что там biggrin.gif

Вот ещё:
Цитата
Take a look to the on-line file

C:\Keil\ARM\Hlp\RVI.CHM - Embedded Programs - Specific Memory Areas.

Example in:
C:\Keil\ARM\Examples\RAM_Function


взято отсюда
Go to the top of the page
 
+Quote Post
zheka
сообщение May 21 2010, 10:21
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Лады, сделал.
Ругается на __inline void AT91F_SSC_SetBaudrate (
Ругается так: "lib_AT91SAM7S64.h(52): error: #77-D: this declaration has no storage class or type specifier"

кто-то мне наоборот советовал inline заменить на __inline
Я сделал так же как с ramfunc. Компилируется. Но чем чревато отключение inline?

Вот только думаю, будет ли работать, когда доберусь до отладочной платы. Биботека MMC.c:
Код
static
void power_on (void)
{
    
//    PORTE &= ~0x80;                /* Socket power ON */
//    for (Timer1 = 3; Timer1; );    /* Wait for 30ms */
//    PORTB = 0b10110101;            /* Enable drivers */
//    DDRB  = 0b11000111;
//    SPCR = 0b01010000;            /* Initialize SPI port (Mode 0) */
//    SPSR = 0b00000001;
}


Скачал с этого форума. Автор утверждает, что код "на ходу".
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 21 2010, 10:42
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zheka @ May 21 2010, 14:21) *
Ругается на __inline void AT91F_SSC_SetBaudrate (

Сдается мне, что с дефайнами в вашем проекте капитальный бардак.

P.S. Я бы советовал вообще выбросить всю lib_BLA-BLA-BLA вместе с ее безмозглым содержимым, но это на будущее.

Цитата(zheka @ May 21 2010, 14:21) *
Вот только думаю, будет ли работать, когда доберусь до отладочной платы.

На то он и код "с интернета", чтобы терзаться подобными сомнениями.
Go to the top of the page
 
+Quote Post
zheka
сообщение May 21 2010, 13:58
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



а куда же без lib_bla-bla-bla? Без нее ругается.

в общем код - каша!
принес домой, все компилируется, подключаю библиотеку работы с LCD. Компилятор ругается на святая святых - stdio.h.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 21 2010, 14:11
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zheka @ May 21 2010, 17:58) *
а куда же без lib_bla-bla-bla? Без нее ругается.

Ее нехитрое содержимое лучше заменить на написанное руками и головой.

Цитата(zheka @ May 21 2010, 17:58) *
в общем код - каша!

Вот именно. И тут уже никто не поможет.
Go to the top of the page
 
+Quote Post
zheka
сообщение May 21 2010, 14:41
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Головой... это если с нуля самому.
А что делать если в отладочной плате olimex входы card_presence и card_write_protect это 15 и 25 пины, а в поставляемой производителем же библиотеке:
Код
  while(((m_pPio->PIO_PDSR) & BIT15)) { /*put your card present event here*/  }
  //WP - write protect
  while(((m_pPio->PIO_PDSR) & BIT16)) { /*put your write protect event here*/ }

имея исходные данные, в правильности которых уверен, было бы намного проще работать руками и думать головой.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 21 2010, 15:34
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(zheka @ May 21 2010, 18:41) *
А что делать если в отладочной плате olimex...

Ответ очевиден: не брать исходные данные, в правильности которых не уверены. К неблагонадежному можно отнести 90+% кода, доступного бесплатно.
Go to the top of the page
 
+Quote Post
zheka
сообщение May 21 2010, 16:42
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Ошибку в olimex'совском примере исправил, предлагаемые функции запичи и чтения блоков работают. Но это не подходит для FatFS... Ковыряюсь дальше...

Так, решил еще раз штурмом взять пример c сайта elm.
Дошел вот до каких ошибок:
Код
#ifndef RTC_H_

#include <stdint.h>
#include <stdbool.h>

typedef struct {
    uint16_t year;    /* 1..4095 */
    uint8_t  month;    /* 1..12 */
    uint8_t  mday;    /* 1.. 31 */
    uint8_t  wday;    /* 0..6, Sunday = 0*/
    uint8_t  hour;    /* 0..23 */
    uint8_t  min;    /* 0..59 */
    uint8_t  sec;    /* 0..59 */
    uint8_t  dst;    /* 0 Winter, !=0 Summer */
} RTC_t;  //* ОШИБКА rtc.h(15): error:  #256: invalid redeclaration of type name "RTC_t" (declared at line 15)

int rtc_init(void);
bool rtc_gettime (RTC_t*);  // ОШИБКА rtc.h(18): error:  #147-D: declaration is incompatible with "bool rtc_gettime(RTC_t *)" (declared at line 18)
bool rtc_settime (const RTC_t*);     // ОШИБКА rtc.h(19): error:  #147-D: declaration is incompatible with "bool rtc_settime(const RTC_t *)" (declared at line 19)

#endif


Ну помогите же мне, я почти у цели!!

Сообщение отредактировал zheka - May 21 2010, 17:40
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 21 2010, 18:51
Сообщение #14


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(zheka @ May 21 2010, 22:42) *
Дошел вот до каких ошибок:

"... Саня Дрозд дошел до буквы «И» в слове «передовую»." © Стругацкие, «Понедельник начинается в субботу».
Цитата
Ну помогите же мне, я почти у цели!!

Мне почему-то кажется, что если бы вы не тратили столько времени на написание вопрошающих постов, а просто сели и спокойно подумали, то уже давно бы во всём разобрались.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 21 2010, 18:52
Сообщение #15


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Когда Вы пишете
Код
#ifndef RTC_H_

следующей строкой должно быть
Код
#define RTC_H_

чтобы содержимое данного файла не подключалось к проекту дважды
Go to the top of the page
 
+Quote Post

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

 


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


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