b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

freertos操作系统_仓储系统_学ucos还是free rtos(5)

电脑杂谈  发布时间:2017-02-05 14:18:38  来源:网络整理

portSTACK_TYPE *pxEndOfStack; /* Used for stack overflow

checking on architectures

where the stack grows up

from low memory. */

#endif

#if ( configUSE_MUTEXES == 1 )

unsigned portBASE_TYPE uxBasePriority; /* The priority last

assigned to the task -

used by the priority

inheritance mechanism. */

#endif

} tskTCB;

TCB在pxStack里存储堆栈的起始地址,以及在pxTopOfStack里存储当前堆栈的顶部。如果堆栈“向上”增长到更高的地址,它还在pxEndOfStack存储堆栈的结束的指针来检查堆栈溢出。如果堆栈“向下”增长到更低的地址,那么通过比较当前堆栈的顶部与pxStack中的堆内存起始位置来检查溢出。

TCB在uxPriority和uxBasePriority中存储任务的初始优先级。一个任务在它创建的时候被赋予优先级,同时任务的优先级是可以被改变的。如果FreeRTOS实现了优先级继承,那么当任务临时提升到“继承的”优先级时,它使用uxBasePriority去记住原来的优先级。(优先级继承,请参见下面关于互斥的讨论。)

每个任务有两个清单项目给FreeRTOS操作系统的各种调度列表使用。当一个任务入到FreeRTOS的一个列表中,不会直接向TCB插入一个指针。取而代之的是,它向TCB的xGenericListItem或xEventListItem插入一个指针。这些xListItem变量,比起若是仅仅获得一个指向TCB的指针来说,让FreeRTOS的列表变得更加灵活。

任务可以在以下四种状态之一:运行,准备运行,挂起或阻塞。你可能希望每个任务都有一个变量来告诉FreeRTOS它正处于什么状态,但事实上并非如此。相反,FreeRTOS通过把任务放入相应的列表:就绪列表,挂起列表等,隐式地跟踪任务状态。随着任务的变化,从一个状态到另一个,FreeRTOS的只是简单的将它从一个列表移动到另一个。

任务设置

我们已经触及如何利用pxReadyTasksLists数组来选择和调度一个任务的;现在让我们来看一看一个任务最初是如何被创建的。当xTaskCreate()函数被调用的时候,一个任务被创建。FreeRTOS为一个任务新分配一个TCB对象,来记录它的名称,优先级,和其他细节,接着分配用户请求的总的堆栈(假设有足够使用的内存)和在TCB的pxStack成员中记录堆内存的开始。

堆栈被初始化看起来就像一个已经在运行的新任务被上下文切换所中断。这就是任务调度处理最新创建的任务的方法,同样也是处理运行了一段时间的任务的方法;任务调度在不需要任何特殊(case)代码的情况下去处理新的任务。

任务的堆栈建立看起来像是它通过上下文切换来被中断,这个方法是取决于FreeRTOS正在运行的架构,但这个ARM Cortex-M3处理器的实现是一个很好的例子:

unsigned int *pxPortInitialiseStack( unsigned int *pxTopOfStack,

pdTASK_CODE pxCode,

void *pvParameters )

{

/* Simulate the stack frame as it would be created by a context switch interrupt. */


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-30698-5.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 王子玮
      王子玮

      没有申请就闯进中国被侵略者侵犯国土

    • 曹襄公
      曹襄公

      有实力很重要

    • 彭德平
      彭德平

      都适合和你白头到老有的人

    每日福利
    热点图片
    拼命载入中...