首页 > 解决方案 > 这段代码符合 MISRA C 标准吗?

问题描述

我必须在车辆的 LAN 中发送 UDP 数据包。UDP数据包由5个字段组成:

field_1: 4 bytes uint32_t
field_2: 1 byte  uint8_t
field_3: 1 byte  uint8_t
field_3: 2 bytes uint16_t
field_4: 20 bytes 5*float

我想知道在字符缓冲区中执行 memcpy 是否符合 MISRA C,代码在这里:

uint32_t field_1    = 25;
uint8_t  field_2    = 34;
uint8_t  field_3    = 1;
uint16_t field_4    = 234;
float   field_5[5]  = {1,2,3,4,5};


/* Allocate memory for the buffer*/
int l_buffLen = sizeof(uint32_t)
                + sizeof(uint8_t)
                + sizeof(uint8_t)
                + sizeof(uint16_t)
                + 5*sizeof(float);

char  buffer[l_buffLen];


/* Copy data to the buffer */
int idx = 0;
memcpy(&buffer[idx],&field_1,sizeof(uint32_t)); 

idx+=sizeof(uintt32_t);
memcpy(&buffer[idx],&field_2,sizeof(uint8_t));   

idx+=sizeof(uint8_t);
memcpy(&buffer[idx],&field_3,sizeof(uint8_t));   

idx+=sizeof(uint8_t);
memcpy(&buffer[idx],&field_4,sizeof(uint16_t));   

idx += sizeof(uint16_t);
memcpy(&buffer[idx],field_5,sizeof(float)*5);          

标签: cstandards-compliancemisra

解决方案


MISRA C 不禁止使用 memcpy()

MISRA C:2012 Amendment 1(可免费下载)提供了一些关于使用 memcpy() 帮助避免 C 标准中普遍存在的未定义/未指定行为的一些指导 - 有很多工具可以帮助您分析代码

注意:请参阅免责声明简介


推荐阅读