|
发表于 2018-10-24 15:07:35
|
显示全部楼层
我试着在MDK的STM32一个项目里加入一个.h和一个.c文件编译:
.H:
#ifndef __MENU__
#define __MENU__
#include "stm32f1xx_hal.h"
#ifndef __FSM_RT_TYPE__
#define __FSM_RT_TYPE__
//! \name finit state machine state
//! @{
typedef enum {
fsm_rt_err = -1, //!< fsm error, error code can be get from other interface
fsm_rt_cpl = 0, //!< fsm complete
fsm_rt_on_going = 1, //!< fsm on-going
fsm_rt_wait_for_obj = 2, //!< fsm wait for object
fsm_rt_asyn = 3, //!< fsm asynchronose complete, you can check it later.
} fsm_rt_t;
//! @}
#endif
typedef struct __menu_item menu_item_t;
typedef struct __menu menu_t;
typedef fsm_rt_t menu_item_handler_t(menu_item_t *);
struct __menu_item {
menu_item_handler_t *fnHandle; //!< handler
menu_t *ptChild; //!< Child Menu
};
typedef struct __menu_engine_cb menu_engine_cb_t;
typedef fsm_rt_t menu_engine_t(menu_engine_cb_t *);
struct __menu {
menu_item_t *ptItems; //!< menu item list
uint8_t chCount; //!< menu item count
menu_t *ptParent; //!< parent menu;
menu_engine_t *fnEngine; //!< engine for process current menu
};
typedef struct __default_menu_item_t default_menu_item_t;
struct __default_menu_item_t {
//! inherit from base class menu_item_t
menu_item_t;
//..\User\0aa_menu\MENU.h(48): error: #3093: anonymous structs are only supported in --gnu mode, or when enabled with #pragma anon_unions
//! depends on your application, you can add/remove/change following members
char *pchTitle; //!< Menu Title
char *pchDescription; //!< Description for this menu item
char chShortCutKey; //!< Shortcut Key value in current menu
};
#endif
/////////////////////////////////
.C:
#include "MENU.h"
extern fsm_rt_t top_menu_engine(menu_engine_cb_t *ptThis);
extern fsm_rt_t top_menu_item_a_handler(menu_item_t *ptItem);
extern fsm_rt_t top_menu_item_b_handler(menu_item_t *ptItem);
extern fsm_rt_t top_menu_item_c_handler(menu_item_t *ptItem);
extern const menu_t c_tTopMenu;
default_menu_item_t c_tTopMenuItems[] = {
{
top_menu_item_a_handler,
NULL, //!< child menu
"Top Menu A",
"This is Top Menu A",
},
{
top_menu_item_b_handler,
NULL, //!< child menu
"Top Menu B",
"This is Top Menu B"
},
{
top_menu_item_c_handler,
NULL, //!< child menu
"Top Menu C",
"This is Top Menu C"
}
};
const menu_t c_tTopMenu = {
(menu_item_t *)c_tTopMenuItems, //!< menu item list
UBOUND(c_tTopMenuItems), //!< menu item count UBOUND未定义
..\User\0aa_menu\menu.c(34): error: #59: function call is not allowed in a constant expression
NULL, //!< top menu has no parent
top_menu_engine,
};
fsm_rt_t top_menu_item_a_handler(menu_item_t *ptItem)
{
return fsm_rt_cpl;
}
fsm_rt_t top_menu_item_b_handler(menu_item_t *ptItem)
{
return fsm_rt_cpl;
}
fsm_rt_t top_menu_item_c_handler(menu_item_t *ptItem)
{
return fsm_rt_cpl;
}
fsm_rt_t top_menu_engine(menu_engine_cb_t*ptThis)
{
return fsm_rt_cpl;
}
编译后,出现3个错误,上面红色部分。 |
|