GIE_SAVE 和GIE_RESTORE的实现如下:
中断禁止时间是判断系统实时性的重要指标之一。中断禁止时间能否达到最短,不仅与操作系统的设计有关,还依赖于处理器结构和编译器产生的代码质量。从上面的实现代码看到,由于Andes处理器提供了setgie.d和setgie.e两条直接控制中断的开关的指令,整个禁止/允许中断的过程经过编译器产生的机器码只有3/2条,最大限度地减小了中断禁止时间。
3.1.3. 定义栈增长方向
μC/OS-II使用结构常量OS_STK_GROWTH来指定堆栈的增长方式,设置为0表示堆栈从下往上增长,设置为1表示从上往下增长。这里我们定义成后者,即堆栈的增长方向是从内存高地址向低地址方向递减并且堆栈指针总是指向栈顶数据:
3.1.4.定义OS_TASK_SW()宏
OS_TASK_SW()是一个宏,它在μC/OS-Ⅱ从低优先级任务切换到最高优先级任务时被调用的。任务切换只是简单的将处理器寄存器保存到将被挂起的任务的堆栈中,并且将更高优先级的任务从堆栈中恢复出来。可采用两种方式定义这个宏,使用软中断将中断向量指向OSCtxSW()函数;或者直接调用OSCtxSW()函数,这里我们采用后者(OSCtxSW()函数的实现将在后面介绍):
3.2处理器相关部分汇编实现
μC/OS-Ⅱ的移植需要用户编写三个最基本的汇编语言函数:OSStartHighRdy(),OSCtxSw(),OSIntCtxSw()。它们会共用一些代码,为了方便阅读将它们写在同一个汇编文件os_cpu_a.S中。
3.2.1 OSStartHighRdy():运行优先级最高的就绪任务。
OSStartHighRdy()函数是在OSStart()多任务启动之后,负责从最高优先级任务的TCB控制块中获得该任务的堆栈指针SP,并通过SP恢复CPU现场以启动最高优先级的任务执行。另外OSStartHighRdy()还必须在最高优先级任务恢复之前和调用OSTaskSwHook()之后设置OSRunning为TRUE.其实现代码如下:
3.2.2 OSCtxSw()和OSIntCtxSw()
OSCtxSw()是任务优先级切模压电感器换函数,它的作用是先将当前任务的CPU现场保存到该任务的堆栈中,然后获得最高优贴片电感器先级任务的堆栈指针,并从该堆栈中恢复此任务的CPU现场,使之继续执行,该函数就完成了一次任务切换。
OSIntCtxSw()是中断级的任务切换函数。由于中断可能会使更高优先级的任务进入就绪态,因此为了让大功率电感贴片电感器更高优先级的任务能立即运行,在中断服务子程序最后会调用OSIntCtxSw()做任务切换。这样做能够尽快的让高优先级的任务得到相应的处理,保证系统的实时性能。
OSCtxSw()和OSIntCtxSw()都是用于任务切换的函数,其区别在于,在OSIntCtxSw()中无需再保存处理器寄存器,因为在OSIntCtxSw()之前已发生中断,所以可以保证所有的处理器寄存器都被正确地保存到了被中断的任务的堆栈之中。OSCtxSw()和OSIntCtxSw()实现代码如下:
N1033A-S处理器定义了四级(0-3)中断,在各级中断的转换时需要保存当前中断层级的寄存器。调用OSCtxSw()时,中断将由0级(即没有中断)转到1级,所以需要将第0级的寄存器PSW和PC保存到第1级的寄存器IPSW和IPC中。CtxSave和CtxRestore两个宏用来保存和恢复任务上下文。需要保存或恢复的寄存器包括32个通用寄存器(R0扁平线圈电感制造厂
基于DeviceNet现场总线控制技术的无尘纸生产线无尘纸(又名膨化芯材)是一种高附加值的新型卫生用品。它具有卓越的高吸湿性、可靠锁水性、卫生安全性等优点,广泛应用于妇女卫生巾、成人尿失禁、婴儿纸尿裤等产品领域。由于DeviceNet设备网是基于生产者
16位高精度4-20mA输入隔离模拟前端(AFE) 4月08日 第三届·无线通信技术研讨会 立即报名 12月04日 2015•第二届中国IoT大会 精彩回顾 10月30日ETF•智能硬件开发技术培训会 精彩回顾 10月23日ETF•第三届 消费
温度报警系统完整软硬件设计
摘要
温度报警系统不需要复杂的信号调理电路和A / D转换电路可以直接与单片机完成数据采集和处理,方便,精度高,功耗低,小型化,抗干扰能力,可根据不同温度监测的需要和