uCOSII 编译warning: cast from pointer to integer of different size!!!!
各位大虾们,麻烦帮我看看这个警告是怎样产生的?找了很久找不到解决方法。警告出现在OSMemCreate函数中。
具体点在(INT32U)addr这个指针上面,出现警告信息“c:79: warning: cast from pointer to integer of different size”
麻烦各位大虾指导指导!
uC版本为V2.85 。 麻烦各位路过的师傅指导一下。 没看过ucos-ii代码,下面仅供参考:
warning: cast from pointer to integer of different size
--- 这是指针和整型类型转换,长度不一致的warning,跟你的实际平台有关,一般32位系统中,指针是32bit,整型也是32bit,所以用(INT32U)addr是可以的,但其他情况,就会有warning吧 谢谢,security指教。 我把(INT32U)addr改成(INT16U)addr就不报错了。
但函数OSMemCreate的参数都要改,这好像不正常了吧。 这个应该是它把一个地址直接转换为32位的整数造成的:
在uCOS III上它就没有转化直接对地址加,就避开了这个问题。
voidOSMemCreate (OS_MEM *p_mem,
CPU_CHAR *p_name,
void *p_addr,
OS_MEM_QTY n_blks,
OS_MEM_SIZEblk_size,
OS_ERR *p_err)
{
#if OS_CFG_ARG_CHK_EN > 0u
CPU_DATA align_msk;
#endif
OS_MEM_QTY i;
OS_MEM_QTY loops;
CPU_INT08U *p_blk;
void **p_link;
CPU_SR_ALLOC();
#ifdef OS_SAFETY_CRITICAL
if (p_err == (OS_ERR *)0) {
OS_SAFETY_CRITICAL_EXCEPTION();
return;
}
#endif
#ifdef OS_SAFETY_CRITICAL_IEC61508
if (OSSafetyCriticalStartFlag == DEF_TRUE) {
*p_err = OS_ERR_ILLEGAL_CREATE_RUN_TIME;
return;
}
#endif
#if OS_CFG_CALLED_FROM_ISR_CHK_EN > 0u
if (OSIntNestingCtr > (OS_NESTING_CTR)0) { /* Not allowed to call from an ISR */
*p_err = OS_ERR_MEM_CREATE_ISR;
return;
}
#endif
#if OS_CFG_ARG_CHK_EN > 0u
if (p_addr == (void *)0) { /* Must pass a valid address for the memory part. */
*p_err = OS_ERR_MEM_INVALID_P_ADDR;
return;
}
if (((CPU_ADDR)p_addr & (sizeof(void *) - 1u)) != 0u){/* Must be pointer size aligned */
*p_err = OS_ERR_MEM_INVALID_P_ADDR;
return;
}
if (n_blks < (OS_MEM_QTY)2) { /* Must have at least 2 blocks per partition */
*p_err = OS_ERR_MEM_INVALID_BLKS;
return;
}
if (blk_size < sizeof(void *)) { /* Must contain space for at least a pointer */
*p_err = OS_ERR_MEM_INVALID_SIZE;
return;
}
align_msk = sizeof(void *) - 1u; /* Block size must be a multiple address size */
if ((blk_size & align_msk) != 0u) {
*p_err = OS_ERR_MEM_INVALID_SIZE;
}
#endif
p_link = (void **)p_addr; /* Create linked list of free memory blocks */
p_blk= p_addr;
loops= n_blks - 1u;
for (i = 0u; i < loops; i++) {
p_blk +=blk_size;
*p_link = (void*)p_blk; /* Save pointer to NEXT block in CURRENT block */
p_link = (void **)(void *)p_blk; /* Position to NEXT block */
}
*p_link = (void *)0; /* Last memory block points to NULL */
OS_CRITICAL_ENTER();
p_mem->Type = OS_OBJ_TYPE_MEM; /* Set the type of object */
p_mem->NamePtr = p_name; /* Save name of memory partition */
p_mem->AddrPtr = p_addr; /* Store start address of memory partition */
p_mem->FreeListPtr = p_addr; /* Initialize pointer to pool of free blocks */
p_mem->NbrFree = n_blks; /* Store number of free blocks in MCB */
p_mem->NbrMax = n_blks;
p_mem->BlkSize = blk_size; /* Store block size of each memory blocks */
#if OS_CFG_DBG_EN > 0u
OS_MemDbgListAdd(p_mem);
#endif
OSMemQty++;
OS_CRITICAL_EXIT();
*p_err = OS_ERR_NONE;
}
这是uCOS III中的这段代码
页:
[1]