jira 如何创建子任务删除任务再进行创建过呢。

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
freertosfreertosxTicksToDelaytickdue timepxOverflowDelayedTaskListpxDelayedTaskList
xPendingReadyL这个链表用在调度器被lock(就是禁止调度了)的时期,如果一个任务从非就绪状态变为就绪状态,它不直接加到就绪链表中,而是加到这个pending链表中。等调度器重新启动(unlock)的时候再检查这个链表,把里面的任务加到就绪链表中。
任务管理:
freertosucosiifreertosucosiifreertosfreertos
freertos的任务删除分两步完成,第一步在vTaskDelete中完成,FreeRTOS先把要删除的任务从就绪任务链表和事件等待链表中删除,然后把此任务添加到任务删除链表(即那个xTasksWaitingTermination),若删除的任务是当前运行任务,系统就执行任务调度函数.第2步则是在idle任务中完成,idle任务运行时,检查xTasksWaitingTermination链表,如果有任务在这个表上,释放该任务占用的内存空间,并把该任务从任务删除链表中删除。
/****************************************************************
**参数:pxTaskToDelete是一个指向被删除任务的句柄,这里其实就是等价于任务控制块
**如果这个句柄==NULL,则表示要删除当前任务
*******************************************************************/
void vTaskDelete( xTaskHandle pxTaskToDelete )
tskTCB *pxTCB;
taskENTER_CRITICAL();
/* 如果删除的是当前任务,则删除完成后需要进行调度*/
if( pxTaskToDelete == pxCurrentTCB )
pxTaskToDelete = NULL;
/*通过传进来的任务句柄得到对应的tcb*/
pxTCB = prvGetTCBFromHandle( pxTaskToDelete );
traceTASK_DELETE( pxTCB );
/* 把任务从就绪链表或者延时链表或者挂起链表中删除*/
vListRemove( &( pxTCB-&xGenericListItem ) );
/* 判断任务是否在等待事件(semaphore消息队列等) */
if( pxTCB-&xEventListItem.pvContainer )
{//如果是,则把它从事件等待链表中删除
vListRemove( &( pxTCB-&xEventListItem ) );
//插入等待删除链表
vListInsertEnd( ( xList * ) &xTasksWaitingTermination, &( pxTCB-&xGenericListItem ) );
//增加uxTasksDeleted计数
++uxTasksD
taskEXIT_CRITICAL();
/*如果调度器已经运行,并且删除的是当前任务,则调度*/
if( xSchedulerRunning != pdFALSE )
if( ( void * ) pxTaskToDelete == NULL )
taskYIELD();
再看空闲任务做的第2步工作:
static portTASK_FUNCTION( prvIdleTask, pvParameters )
/* Stop warnings. */
( void ) pvP
/* See if any tasks have been deleted. */
prvCheckTasksWaitingTermination();
…………………………….÷
* The portTASK_FUNCTION() macro is used to allow port/compiler specific
* language extensions. The equivalent prototype for this function is:
* void prvIdleTask( void *pvParameters );
这里prvCheckTasksWaitingTermination()就是干这第2步的工作:每次调用它删除一个任务
static void prvCheckTasksWaitingTermination( void )
#if ( INCLUDE_vTaskDelete == 1 )
portBASE_TYPE xListIsE
/* ucTasksDeleted is used to prevent vTaskSuspendAll() being called
too often in the idle task. */
if( uxTasksDeleted & ( unsigned portBASE_TYPE ) 0 )
{//禁止调度
vTaskSuspendAll();
//打开调度
xListIsEmpty = listLIST_IS_EMPTY( &xTasksWaitingTermination );
xTaskResumeAll();
if( !xListIsEmpty )
tskTCB *pxTCB;
portENTER_CRITICAL();
pxTCB = ( tskTCB * ) listGET_OWNER_OF_HEAD_E***Y( ( ( xList * ) &xTasksWaitingTermination ) );
vListRemove( &( pxTCB-&xGenericListItem ) );
--uxCurrentNumberOfT
--uxTasksD
portEXIT_CRITICAL();
//释放内存,删除tcb
prvDeleteTCB( pxTCB );
本文出自 “” 博客,请务必保留此出处
阅读(1243)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'FREERTOS之任务创建删除(七)',
blogAbstract:'
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}

参考资料

 

随机推荐