Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

AVR GCC помогнете за един указател :)
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=8696
Страница 1 от 1

Автор:  NikB [ Съб Мар 12, 2011 8:03 pm ]
Заглавие:  AVR GCC помогнете за един указател :)

Има следните дефиниции (първата е в fat.h, втората - в fat.c:
Код:
struct fat_dir_entry_struct{
    char long_name[32];
//   ...  разни други работи :)
    uint32_t file_size;
};
struct fat_file_struct{
    struct fat_fs_struct* fs;
    struct fat_dir_entry_struct dir_entry;
    offset_t pos;
    cluster_t pos_cluster;
};

има и една функция, която си работи ОК:
Код:
struct fat_file_struct * xFileInDir = open_file_in_dir(xFAT, xDir, command);
т.е. връща валиден използваем xFileInDir

Обаче аз не знам как да стигна до
xFileInDir -> dir_entry -> file_size
на върнатия резултат.

Изчетох де що намерих :) - не мога да свикна с това C, май :), и много се надявам на помощта ви :)

ПП
Както и да напиша синтаксиса - при компилиране все се оплаква:
request for member 'dir_entry' in something not a structure or union ....

Автор:  Nikola Kirov [ Съб Мар 12, 2011 9:26 pm ]
Заглавие: 

xFileInDir->dir_entry.file_size

Автор:  NikB [ Нед Мар 13, 2011 11:56 am ]
Заглавие: 

Nikola Kirov написа:
xFileInDir->dir_entry.file_size

Преди да постна пробвах формално всички комбинации с разделителите "->" и "." :)
Тук
if (xFileInDir | ->dir_entry.file_size>0){
дава грешка
dereferencing pointer to incomplete type

ПП
и да допълня целия фрагмент:
Код:
                struct fat_file_struct * xFileInDir = open_file_in_dir(xFAT, xDir, command);
                if(!xFileInDir) {
                    uart_puts_p(PSTR("error opening "));
                    uart_puts(command);
                    uart_putc('\n');
                    continue;
                }

            if (xFileInDir->dir_entry.file_size>0){
            }            

Автор:  Nikola Kirov [ Нед Мар 13, 2011 12:14 pm ]
Заглавие: 

би трябвало да работи и така както са декларирани нещата. Нещо пак е омазано при теб вероятно.

Може просто правилно да си декларираш структурите като типове. Когато използваш някаква структура или union за тип винаги си я дефинираш с typedef.

Код:
typedef struct {
    char long_name[32];
//   ...  разни други работи :)
    uint32_t file_size;
}fat_dir_entry_struct;

typedef  struct {
    struct fat_fs_struct* fs;
    struct fat_dir_entry_struct dir_entry;
    offset_t pos;
    cluster_t pos_cluster;
}fat_file_struct;

Автор:  NikB [ Нед Мар 13, 2011 12:20 pm ]
Заглавие: 

Благодаря!

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/