os_cpu_c.c文件中的钩子函数是μC/OS-III为了扩展用户功能而定义的。进行μC/OS-II电感器厂家I移植时至少需要定义OSTaskSwHook()、OSIn itHook()、OSTimeTickHook()、OSIdleTaskHook()、OSStatTaskHook()、OSTaskCreateHook()、OSTaskD塑封电感器elHook()、OSTaskReturnHook()
八个钩子函数。为了简单起见,本次移植不埘钩子函数作功能扩展。
2.3 CPU相关
2.3.1 编写cpu. h
cpu.h头文件主要包括对标准数据类型、字长、栈、临界区的相关定义。标准数据类型与具体的编译器相关,需要查阅相应的编译器手册。Cortex-M3字长是32位,则CPU_DATA和CPU_ADDR皆定塑封电感义为CPU_INT32U类型。Cortex-M3使用满降序栈,栈增长方向应为从高地址到低地址。临界区方法选用CPU_CRI插件电感器TICAL_METHOD_STATUS_LOCAL。
2.3.2 编写cpu_a.asm
cpu_a.asm文件的最主要部分是临界区函数的实现。根据所选用的临界区方法,中断使能函数CPU_SR_Save()和中断禁用函数CPU_SR_Res tore()代码实现如下:
Cortex_M3的指令集提供了CLZ指令,则可选地使用汇编指令实现CPU_CntLeadZeros()函数,以加快μC/OS-III调度器查找最高优先级的就绪任务的速度,CPU_CntLeadZeros()函数汇编代码实现如下:
CPU_CntLeadZeros
CLZ R0,R0
BX LR
2.4 BSP
Cortex-M3内核包含了一个SysTick定时器,可以用来给μC/OS-III提供系统时钟节拍。SysTick初始化和ISR的源代码实现分别如下:
μC/OS-III新增了时间戳功能,用于测量中断禁塑封电感用时长、代码执行时长和确定事件发生时间等。时间戳定时器可以由DWT(Data Watchpo int and Tracc)的时钟周期计数器CYCCNT充当,该计数器是一个自由运行的32位递增计数器,溢出时自动重载为0,周而复始。时间戳定时器初始化和读取函数源代码实现分别如下:
此外,本移植过程的BSP还涉及RCC、GPIO、NVIC和LED/LCD等硬件的初始化函数和驱动程序。
3 测试
首先不加任何用户任务来测试移植好的μC/OS-III内核自身运行情况,待验证内核正常运行之后,编写TaskLed1、TaskLed2、TaskLe d3、TaskProfile四个任务,其中前3个任务被赋予相同的优先级(本移植是假设使能了μC/OS-III的轮转调度smd功率电感器功能),实现对3盏LED灯不停地
闪烁;而TaskProfile的功能是在液晶屏上显示上下文切换次数。
运行结果如图2所示。图中3盏LED灯不停地闪烁,验证了μC/OS-III的相同优先级任务轮转调度的特征;LCD上显示CtxSwCtr的值一直在增加,指示不断发生上下文切换。系统连续稳定运行5个小时以上没出现任何问题,可见本移植是成功的。
结语
本文主要论述了基于Cortex-M3内核处理器上μC/OS-III的移植过程并给出关键代码,移植后的μC/OS-III能够稳定运行于STM32F103RB T6处理器上。本移植能通用于大部分Cortex-M3内核的处理器,并对于将μC/OS-III移植到其他体系结构的处理器上具有参考价值。大电流电感
[变压器]场效应管驱动变压器各位大神帮忙看下这个电路,纠结了一段时间了。
图中是左侧是单片机发的3.3v的21khz的方波,经过TLP521隔离到5v。
然后经过IRF630场效应管(这个是场效应管!),然后经过变压器出去。
怎样为自动化测试系统选择合适的直流电源 用于测试电路板、模块或设备的每个自动化测试系统都需要一个或多个直流电源,用于给待测设备提供电源并提供测试激励。在有些情况下,电源不仅要向待测设备提供电源,而且要通过模拟工作环境提供测试激励源。举例来
基于DSP+LabVIEW的特高压验电器设计方案 随着电力工业的发展和电网负荷需求的提高,我国正在大力发展特高压、长距离输电技术。高电压导致强电场、电气设备绝缘中的某些薄弱部分在强电场的作用下发生局部放电,同时当架空输电线路表面的电场强度超过空气分
2/2 首页 上一页 1 2