这个要结合函数在哪里调用的来理解!
我们输入的只是函数名没错,但是函数的第一个参数u8 usmart_get_fname(u8*str,u8*fname,u8 *pnum,u8 *rval)使用的是结构体第二个元素
[mw_shl_code=c,true]struct _m_usmart_nametab usmart_nametab[]=
{
#if USMART_USE_WRFUNS==1 //如果使能了读写操作
(void*)read_addr,"u32 read_addr(u32 addr)",
(void*)write_addr,"void write_addr(u32 addr,u32 val)",
#endif
(void*)delay_ms,"void delay_ms(u16 nms)",
(void*)delay_us,"void delay_us(u32 nus)",
(void*)LCD_Clear,"void LCD_Clear(u16 Color)",
(void*)LCD_Fill,"void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color)",
(void*)LCD_DrawLine,"void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2)",
(void*)LCD_DrawRectangle,"void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2)",
(void*)LCD_Draw_Circle,"void LCD_Draw_Circle(u16 x0,u16 y0,u8 r)",
(void*)LCD_ShowNum,"void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size)",
(void*)LCD_ShowString,"void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p)",
(void*)led_set,"void led_set(u8 sta)",
(void*)test_fun,"void test_fun(void(*ledset)(u8),u8 sta)",
(void*)LCD_Fast_DrawPoint,"void LCD_Fast_DrawPoint(u16 x,u16 y,u16 color)",
(void*)LCD_ReadPoint,"u16 LCD_ReadPoint(u16 x,u16 y)",
(void*)LCD_Display_Dir,"void LCD_Display_Dir(u8 dir)",
(void*)LCD_ShowxNum,"void LCD_ShowxNum(u16 x,u16 y,u32 num,u8 len,u8 size,u8 mode)",
}; [/mw_shl_code]
而“最后一个字符必须是'*'”这句,直接看也不好理解,(pcnt&0x7f)==4)满足后,看参数列表知道,只能是void,而接下来的字符既不是‘\0’也不是‘ ’,那么只能是‘*’,即返回参数是void*类型的,才是合理的返回参数,不过参数列表里面没有void*,让人看着莫名其妙,所以这句永远不会执行,只是可以作为以后的扩展添加返回类型为void*的函数列表。
|