|
楼主 |
发表于 2012-4-27 13:38:12
|
显示全部楼层
wgyoume 发表于 2012-4-25 12:28
可以在网上下电子书的,不过就是不是太清晰,不过将就了。
我最近遇到一个问题,就是在对S3C2440A进行串口 ...
看了下国嵌的示例,它在发送字符串的时候,用的是:
void Uart_Printf(char *fmt,...)
{
va_list ap;
char string[256];
va_start(ap,fmt);
vsprintf(string,fmt,ap);
Uart_SendString(string);
va_end(ap);
}
其中几个调用的函数如下:
typedef int *va_list[1];
/*
* an array type suitable for holding information needed by the macro va_arg
* and the function va_end. The called function shall declare a variable
* (referred to as ap) having type va_list. The variable ap may be passed as
* an argument to another function.
* Note: va_list is an array type so that when an object of that type
* is passed as an argument it gets passed by reference.
*/
#define va_start(ap, parmN) (void)(*(ap) = __va_start(parmN))
/*
* The va_start macro shall be executed before any access to the unnamed
* arguments. The parameter ap points to an object that has type va_list.
* The va_start macro initialises ap for subsequent use by va_arg and
* va_end. The parameter parmN is the identifier of the rightmost parameter
* in the variable parameter list in the function definition (the one just
* before the '...'). If the parameter parmN is declared with the register
* storage class an error is given.
* If parmN is a narrow type (char, short, float) an error is given in
* strict ANSI mode, or a warning otherwise.
* Returns: no value.
*/
void Uart_SendString(char *pt)
{
while(*pt)
Uart_SendByte(*pt++);
}
#define va_end(ap) ((void)(*(ap) = 0))
/*
* The va_end macro facilitates a normal return from the function whose
* variable argument list was referenced by the expansion of va_start that
* initialised the va_list ap. If the va_end macro is not invoked before
* the return, the behaviour is undefined.
* Returns: no value.
*/
#ifdef __cplusplus
} /* extern "C" */
#endif
#ifdef __EDG_RUNTIME_USES_NAMESPACES
} /* namespace std */
#endif
#endif /* __STDARG_DECLS */
#ifdef __EDG_RUNTIME_USES_NAMESPACES
#ifndef __STDARG_NO_EXPORTS
using std::va_list;
#endif
#endif
#endif
就照视频试验过次,,对于这个的解释忘了,好像是va_end(ap);va_start(ap,fmt);很重要,,,我在看看视频,再理解下再和你讨论下咯。。。 |
|