我正在为 MSP430F5438A 编写一些固件。我希望这段代码主要是 MISRA04 投诉(我使用的是 C99,而不是 C90)。我正在使用可以检查 MISRA 合规性的 IAR 5.51。
我有以下数据结构:
typedef struct
{
struct
{
uint16_t baud_rate;
uint8_t data_bits;
uint8_t parity;
uint8_t stop_bits;
uint8_t b_flow_control;
} serial_settings;
...
} config_settings_t;
我想在闪存中创建一个可以全局读取的结构的实例。我已经有单独的方法用于写入闪存。
这是指向该结构的全局指针的定义:
volatile config_settings_t *gp_app_config = (uint8_t) 0x1800u;
这工作正常,似乎符合 MISRA。
现在,我已经在我的闪存驱动程序中实现了一组函数,这些函数可以写入和读取闪存中的任意段。它们都将 uint8_t 指针作为参数。
我怎样才能调用这样的函数?
flash_segment_erase(uint8_t * p_flash, uint16_t len);
这个:
flash_erase_check((uint8_t*)gp_app_config, sizeof(config_settings_t));
编译和工作正常,但根据 MISRA04 是禁忌......
Error[Pm141]: a cast should not be performed between a pointer to object type and a different pointer to object type, this casts from type "config_settings_t volatile *" to "uint8_t *" (MISRA C 2004 rule 11.4)
谢谢,尼克