音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計 | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

如何在Keil C51使用函數(shù)FILE、fopen、fclose、exit、fscanf?

作者:inanswer 欄目:單片機(jī)
如何在Keil C51使用函數(shù)FILE、fopen、fclose、exit、fscanf?
小弟想在Keil C51使用以下函數(shù):FILE、fopen、fclose、exit、
fscanf、rewind。這些函數(shù)的預(yù)定義是包含在C語言的<stdio.h><stdlib.h>中,但Keil
C51中的<stdio.h><stdlib.h>只是C語言的<stdio.h><stdlib.h>的子集,無法通過編譯和
連接,所以小弟我將Keil C51中的<stdio.h><stdlib.h>文件進(jìn)行了修改,將他們的預(yù)定義
包含在頭文件中,結(jié)果通過了編譯。但在連接時出現(xiàn)了下面的warning:
warning:
*** WARNING L16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS
SEGMENT: ?PR ? _INIT_MEMPOOL?INIT_MEM
*** WARNING L16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS
SEGMENT: ?C _INITSEG
*** WARNING L1:UNRESOLVED EXTERNAL SYMBOL
SYMBOL: _EXIT
*** WARNING L1:UNRESOLVED EXTERNAL SYMBOL
SYMBOL: _FSCANF
*** WARNING L1:UNRESOLVED EXTERNAL SYMBOL
SYMBOL: _FCLOSE
*** WARNING L1:UNRESOLVED EXTERNAL SYMBOL
SYMBOL: _REWIND
*** WARNING L1:UNRESOLVED EXTERNAL SYMBOL
SYMBOL: _FOPEN
*** WARNING L1:UNRESOLVED EXTERNAL SYMBOL
SYMBOL: ?_FOPEN?BYTE
*** WARNING L2:REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: _EXIT
*** WARNING L2:REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: _FSCANF
*** WARNING L2:REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: _FCLOSE
*** WARNING L2:REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: _REWIND
*** WARNING L2:REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: _FOPEN
不知哪位大蝦能指點(diǎn)指點(diǎn)小弟?謝謝!


2樓: >>參與討論
inanswer
以下是我修改的<stdio.h>,請大蝦們幫忙看看
/*--------------------------------------------------------------------------
STDIO.H

Prototypes for STANDARD I/O functions.
COPYRIGHT (c) 1988-2001 Keil Elektronik GmbH and Keil SOFTWARE, Inc.
All rights reserved.
--------------------------------------------------------------------------*/

#ifndef EOF
#define EOF -1
#endif

#ifndef NULL
#define NULL ((void *) 0)
#endif

#ifndef _SIZE_T
#define _SIZE_T
typedef unsigned int size_t;
#endif

//---------------------------------------added code begin---------------------
----//
/* Define _CRTIMP */

#ifndef _CRTIMP
#ifdef  _DLL
#define _CRTIMP __declspec(dllimport)
#else   /* ndef _DLL */
#define _CRTIMP
#endif  /* _DLL */
#endif  /* _CRTIMP */

/* Define __cdecl for non-Microsoft compilers */

#if     ( !defined(_MSC_VER) && !defined(__cdecl) )
#define __cdecl
#endif
/*
typedef struct
{
    SHORT level;
    unsigned flags;
    CHAR fd;
    unsigned CHAR hold;
    SHORT bsize;
    unsigned CHAR *baffer;
    unsigned CHAR *curp;
    unsigned istemp;
    SHORT token;
}FILE;
*/

#ifndef _FILE_DEFINED
struct _iobuf {
        CHAR *_ptr;
        int   _cnt;
        CHAR *_base;
        int   _flag;
        int   _file;
        int   _CHARbuf;
        int   _bufsiz;
        CHAR *_tmpfname;
        };
typedef struct _iobuf FILE;
#define _FILE_DEFINED
#endif

#define FILENAME_MAX  260

_CRTIMP FILE * __cdecl fopen(const CHAR *, const CHAR *);
_CRTIMP int __cdecl fscanf(FILE *, const CHAR *, ...);
_CRTIMP void __cdecl rewind(FILE *);
_CRTIMP int __cdecl fclose(FILE *);

//----------------------------------added code end------------------//

#pragma SAVE
#pragma REGPARMS
extern CHAR _getkey (void);
extern CHAR getCHAR (void);
extern CHAR ungetCHAR (CHAR);
extern CHAR putCHAR (CHAR);
extern int printf   (const CHAR *, ...);
extern int sprintf  (CHAR *, const CHAR *, ...);
extern int vprintf  (const CHAR *, CHAR *);
extern int vsprintf (CHAR *, const CHAR *, CHAR *);
extern CHAR *gets (CHAR *, int n);
extern int scanf (const CHAR *, ...);
extern int sscanf (CHAR *, const CHAR *, ...);
extern int puts (const CHAR *);

#pragma RESTORE



3樓: >>參與討論
inanswer
以下是我修改后的<stdlib.h>,請大蝦們幫忙看看,謝謝!
/*--------------------------------------------------------------------------
STDLIB.H

STANDARD functions.
COPYRIGHT (c) 1988-2001 Keil Elektronik GmbH and Keil SOFTWARE, Inc.
All rights reserved.
--------------------------------------------------------------------------*/

#ifndef _SIZE_T
#define _SIZE_T
typedef unsigned int size_t;
#endif

#ifndef NULL
#define NULL ((void *) 0L)
#endif

#ifndef _WCHAR_T_DEFINED_
#define _WCHAR_T_DEFINED_
typedef CHAR wCHAR_t;
#endif

//-----------------------------------------added code begin--------------------
---//
/* Define _CRTIMP */

#ifndef _CRTIMP
#ifdef  _DLL
#define _CRTIMP __declspec(dllimport)
#else   /* ndef _DLL */
#define _CRTIMP
#endif  /* _DLL */
#endif  /* _CRTIMP */


/* Define __cdecl for non-Microsoft compilers */

#if     ( !defined(_MSC_VER) && !defined(__cdecl) )
#define __cdecl
#endif

/* Definition of the argument values for the exit() function */

#define EXIT_SUCCESS    0
#define EXIT_FAILURE    1


/* function prototypes */

_CRTIMP void   __cdecl abort(void);
_CRTIMP void   __cdecl exit(int);

//---------------------------------added code end------------------------------
-----//

#pragma SAVE
#pragma REGPARMS

extern int    abs  (int   val);
extern LONG  labs  (LONG  val);

extern float atof (CHAR *s1);
extern LONG  atol (CHAR *s1);
extern int   atoi (CHAR *s1);
extern int   rand ();
extern void  srand (int);

extern float         strtod  (CHAR *, CHAR **);
extern LONG          strtol  (CHAR *, CHAR **, unsigned CHAR);
extern unsigned LONG strtoul (CHAR *, CHAR **, unsigned CHAR);

#define _MALLOC_MEM_    xdata

extern int  init_mempool          (void _MALLOC_MEM_ *p, unsigned int size);
extern void _MALLOC_MEM_ *malloc  (unsigned int size);
extern void free                  (void _MALLOC_MEM_ *p);
extern void _MALLOC_MEM_ *realloc (void _MALLOC_MEM_ *p, unsigned int size);
extern void _MALLOC_MEM_ *calloc  (unsigned int size, unsigned int len);

#pragma RESTORE



4樓: >>參與討論
hiberhe
必然出錯!
WARNING L16:UNCALLED SEGMENT,IGNORED FOR OVERLAY PROCESS
ENT: ?PR ? _INIT_MEMPOOL?INIT_MEM
這個可以不管,是指你有的函數(shù)沒有調(diào)用,相當(dāng)于"死"而無用的,當(dāng)然,有可能用函數(shù)指針調(diào)用了,或者有其它什么目的

*** WARNING L1:UNRESOLVED EXTERNAL SYMBOL
沒有實現(xiàn),已就是你調(diào)用的外部函數(shù),沒有這個函數(shù)的實現(xiàn)形式!
比如
SYMBOL: _EXIT,說明exit這個函數(shù)沒有實現(xiàn)形式

*** WARNING L2:REFERENCE MADE TO UNRESOLVED EXTERNAL
SYMBOL: _FOPEN
說明fopen沒有聲明,也就是說你調(diào)用的fopen,但你沒有用extern聲明這個函數(shù),如果你聲明了,但這個函數(shù)實現(xiàn)不存在,那么就會出現(xiàn)第二個錯誤

不明白你為什么要去用fopen之類的,你怎么去open???當(dāng)然,你可以改寫你以你的形式的fopen,比如從串口讀一個文件,可是你必須自己寫呀.

c51和c還是有很多的不同的!


5樓: >>參與討論
exdata
假如
(假如)首先我無條件假設(shè)你是正確的,所以得到:

FILE *p = fopen(".\\test.txt","rw");執(zhí)行正確,但是我想問問你當(dāng)前路徑是在什么地方呢,你都無法解析當(dāng)前路徑信息何處得來跟更不用說是打開文件進(jìn)行操作了。

因此,不是簡單的把win32/dos平臺的使用的頭文件聲明CTRL+C and CTRL+V進(jìn)來單片機(jī)就給你干活的,這里涉及很多關(guān)于標(biāo)準(zhǔn)流的內(nèi)部函數(shù)keil都沒有實現(xiàn)。

6樓: >>參與討論
楊工
你對單片機(jī)的期望太高了
單片機(jī)不是PC機(jī),何來硬盤?何來操作系統(tǒng)? 何來文件系統(tǒng)?
怎么可能支持函數(shù)fopen(), fclose()等。
這些函數(shù)都必須有操作系統(tǒng)的支持。


參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
在51單片機(jī)的定時器,是否可以跳轉(zhuǎn)到任意的子程序?
keil uv3的一個問題
做232接口
請大俠介紹幾款雙串口單片機(jī)
用什么器件可以很好的對輸入信號進(jìn)行采集
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號