最近看TI BLE原代码时,有如下的人段代码(经整理):
#define OSAL_MSG_NEXT(msg_ptr) ((osal_msg_hdr_t *) (msg_ptr) -1)->len
typedef struct
{ uint16 len; uint8 dest_id; } osal_msg_hdr_t; typedef struct { uint8 state; // shift uint8 keys; //keys } keyChange_t; keyChange_t * msgPtr; msgPtr =(keyChange_t *)osal_msg_allocate( sizeof(keyChange_t) ); //此处在内存中分配了一段空间并赋给msgPtr
OSAL_MSG_NEXT( msg_ptr ) = *q_ptr; //此处把msg_ptr强制转换成osal_msg_hdr_t类型的指针后减1并给其赋值,如果减1后的地址空间原来有数据的话,哪不是要被破坏了么? 这样写代码会不会带来问题? |