【问题现象】
修改后
容器类的定义:
初始化BOOT任务过程中发生FAULT故障。
【问题原因】
对象容器的长度与容器中POOL的数量有关,但在初始化对象容器时,使用默认的容器长度进行初始化导致对象容器长度计算错误覆盖对象链表,当对象链表上检查重名对象时,链表首指针为NULL导致MemFault故障。
修改前:
EXPORT E_STATUS CORE_CreatePoolContainer(LPCORE_CONTAINER lpManager, LPCSTR lpName,
BYTE_PTR lpTable, BYTE Pools, BYTE BlockPrePool,
SIZE_T BytePreBlock, BOOL AllocForInit)
{
KPOOL_ID_T Pid = 0;
memset(lpManager, 0, sizeof(CORE_CONTAINER));
SetContainerName(lpManager, lpName);
修改后
EXPORT E_STATUS CORE_CreatePoolContainer(LPCORE_CONTAINER lpManager, LPCSTR lpName,
BYTE_PTR lpTable, BYTE Pools, BYTE BlockPrePool,
SIZE_T BytePreBlock, BOOL AllocForInit)
{
KPOOL_ID_T Pid = 0;
memset(lpManager, 0, sizeof(CONTAINER_ATTRIBUTE) + sizeof(CORE_POOL) * Pools);
SetContainerName(lpManager, lpName);
容器类的定义:
struct tagCORE_CONTAINER{
CONTAINER_ATTRIBUTE Attribute;
CORE_POOL Pool[CONFIG_CORE_POOL_MAX]; /**< Pools */
};
CONFIG_CORE_POOL_MAX = 8
容器实例定义:
struct tagOBJECT3_CONTAINER{
CONTAINER_ATTRIBUTE Attribute;
CORE_POOL Pool[CONFIG_OBJECT3_POOL_MAX + !CONFIG_OBJECT3_POOL_MAX];
/**< Pools */
};
CONFIG_OBJECT3_POOL_MAX = 1