借贴问个问题,因为我希望在 threadx 内核开启并正常运行后才进行大部分系统外设的初始化,有这样的内容。这样是不是会存在隐藏的 bug ?
创建初始化任务的内容
[C] 纯文本查看 复制代码 /* 内存池创建 */
if(tx_byte_pool_create(&TxBytePool, "Tx App memory pool", TxBytePoolBuffer, TX_APP_MEM_POOL_SIZE) != TX_SUCCESS)
HardErrorHandler(__FILE__, __LINE__);
/* 尝试从内存池获得足够的内存区域 */
if(tx_byte_allocate(&TxBytePool, (VOID **)&pointer, 1024, TX_NO_WAIT) != TX_SUCCESS)
HardErrorHandler(__FILE__, __LINE__); // 初始化线程非常重要,未获得足够内存进入硬件错误
if(tx_thread_create(&ThreadInit, /*任务控制块地址*/
"Thread Init", /*任务名*/
ThreadInitSys, /*启动任务函数地址*/
0, /*传递给任务的参数*/
pointer, /*堆栈基地址*/
1024, /*堆栈空间大小*/
0, /*任务优先级*/
0, /*任务抢占阈值*/
TX_NO_TIME_SLICE, /*不开启时间片*/
TX_AUTO_START) /*创建后立即启动*/
!= TX_SUCCESS)
HardErrorHandler(__FILE__, __LINE__);
然后初始化外设的任务是这样
[C] 纯文本查看 复制代码 static void ThreadInitSys(unsigned long thread_input)
{
/* 一些外设和驱动初始化 */
// ...... 比如串口初始化
/* 释放内存区域 */
if(tx_byte_release((VOID *)pointer) != TX_SUCCESS)
HardErrorHandler(__FILE__, __LINE__);
}
我的释放内存是在任务还没有完成的时候进行的,一直是这么干,但是似乎没有问题。
|