我在给恩智浦控制器LPC11C24编程。在一个LPCOpen示例中,我找到了下面这行我想要理解的代码。
#define LPC_CCAN_API ((CCAN_API_T *) (LPC_ROM_API->candApiBase))其中CCAN_API_T是一个结构。
typedef struct CCAN_API {
void (*init_can)(uint32_t *can_cfg, uint8_t isr_ena);
void (*isr)(void);
void (*config_rxmsgobj)(CCAN_MSG_OBJ_T *msg_obj);
uint8_t (*can_receive)(CCAN_MSG_OBJ_T *msg_obj);
void (*can_transmit)(CCAN_MSG_OBJ_T *msg_obj);
void (*config_canopen)(CCAN_CANOPENCFG_T *canopen_cfg);
void (*canopen_handler)(void);
void (*config_calb)(CCAN_CALLBACKS_T *callback_cfg);
} CCAN_API_T;其中LPC_ROM_API和candApiBase被定义为
#define LPC_ROM_API (*((LPC_ROM_API_T * *) LPC_ROM_API_BASE_LOC))
#define LPC_ROM_API_BASE_LOC 0x1FFF1FF8
typedef struct {
const uint32_t usbdApiBase; /*!< USBD API function table base address */
const uint32_t reserved0; /*!< Reserved */
const uint32_t candApiBase; /*!< CAN API function table base address */
const uint32_t pwrApiBase; /*!< Power API function table base address */
const uint32_t reserved1; /*!< Reserved */
const uint32_t reserved2; /*!< Reserved */
const uint32_t reserved3; /*!< Reserved */
const uint32_t reserved4; /*!< Reserved */
} LPC_ROM_API_T;我知道LPC_ROM_API_BASE_LOC是只读存储器中的一个固定位置,它包含一个指向只读存储器驱动表的指针。这个只读存储器驱动器表是LPC_ROM_API_T。
那么,LPC_ROM_API是否是指向LPC_ROM_API_T类型指针的指针,该指针所指向的地址是LPC_ROM_API_BASE_LOC?
发布于 2020-05-18 21:12:10
要运行各种宏,请执行以下操作:
您可以直接在LPC_CCAN_API上调用方法:
uint32_t can_cfg = 456;
LPC_CCAN_API->init_can(&can_cfg, 123);(我不知道API,所以我不知道这些值应该是什么。)
https://stackoverflow.com/questions/61869733
复制相似问题