Can't get this to work

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

Can't get this to work

792 次查看
neilporven
Senior Contributor I


The following is an example from the FatFs website:

FRESULT set_timestamp (

  char *obj,  /* Pointer to the file name */

  int year,

  int month,

  int mday,

  int hour,

  int min,

  int sec

)

{

  FILINFO fno;

  fno.fdate = (WORD)(((year - 1980) * 512U) | month * 32U | mday);

  fno.ftime = (WORD)(hour * 2048U | min * 32U | sec / 2U);

  return f_utime(obj, &fno);

If I try to use WORD, the compiler throws the following error:

called object 'WORD' is not a function or function pointer

How can I do the typecast WORD?

Thanks you,

Neil

0 项奖励
回复
3 回复数

593 次查看
kerryzhou
NXP TechSupport
NXP TechSupport

Hi Neil Porven,

    If you download the Fatfs source code from its official website:

FatFs - Generic FAT File System Module

  You will find a header file named as: integer.h

The content in the integer.h is:

#ifndef _FF_INTEGER

#define _FF_INTEGER

#ifdef _WIN32    /* FatFs development platform */

#include <windows.h>

#include <tchar.h>

typedef unsigned __int64 QWORD;

#else            /* Embedded platform */

/* These types MUST be 16-bit or 32-bit */

typedef int                INT;

typedef unsigned int    UINT;

/* This type MUST be 8-bit */

typedef unsigned char    BYTE;

/* These types MUST be 16-bit */

typedef short            SHORT;

typedef unsigned short    WORD;

typedef unsigned short    WCHAR;

/* These types MUST be 32-bit */

typedef long            LONG;

typedef unsigned long    DWORD;

/* This type MUST be 64-bit (Remove this for C89 compatibility) */

typedef unsigned long long QWORD;

#endif

#endif

So, you can include the integer.h in your set_timestamp function file.

Wish it helps you!

If you still have question, please contact me!


Have a great day,
Jingjing

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 项奖励
回复

593 次查看
JHinkle
Senior Contributor I

WORD in the code above ..

#define WORD  unsigned long

Hope that helps.

Joe

0 项奖励
回复

593 次查看
JHinkle
Senior Contributor I

I noticed in FatFS that WORD is some places was actually referring to the WORD size of the micro -- Thats why I gave you a 32 bit value.

Looking at the maximum values for date and time from the equations you could also place the values into unsigned short int (16 bit).

I don't use a realtime clock -- so I fake a date/time based on the number of time tics since the micro started.

Here's my code.

   

dword xTaskGetTickCount(void);   

DWORD get_fattime (void)

{

    dword TM = xTaskGetTickCount(); // this is tics

    word days, hours, min, sec;

   

    TM *= portTICK_PERIOD_MS;   // now have msec

    TM /= 1000;                 // now seconds

   

    days = TM / (60 *60 *24);

    TM -= days * (60 * 60 * 24);

   

    hours = TM / (60 * 60);

    TM -= hours * (60 * 60);

   

    min = TM / 60;

    TM -= min * 60;

   

    sec = TM;

    if(sec > 60)

        sec = 0;

   

    return      ((DWORD)(2016 - 1980) << 25)    // Year 2014

            | ((DWORD)7 << 21)                // Month 7

            | ((DWORD)(10+days) << 16)                // Mday 10

            | ((DWORD)hours << 11)                // Hour 16

            | ((DWORD)min << 5)                // Min 0

            | ((DWORD)sec >> 1);                // Sec 0

}

      

The DWORD is from FatFS and is defined as

#define DWORD unsigned long.

Joe

0 项奖励
回复