技术支持
  您当前的位置:首页  »  技术支持

成品鞋弯曲试验机动态加载控制系统的软件设计

发布时间:2019-5-8 11:6:29  浏览:

前面我们提出过弯曲疲劳试验机动态加载控制系统的硬件设计方案,在这基础上,这里的重点是系统的软件设计,包括介绍了μC/OS -II实时操作系统特点及功能,以及实时操作系统 μC/OS -II在本机上的移植及启动代码的编写等。

恒宇仪器的成品鞋弯曲试验机专用测试运动鞋,休闲鞋,工作鞋等成品鞋,经长时间,定频率,定角度之连续往弯折后,评估其耐折性能或检视其龟裂程度。成品鞋弯曲试验机有多方面的特色,可谓面面俱到,除了设计合理,机型美观,试件夹持,取出容易外,转轴特别采用碳钢制成,坚固耐用,皮带轮以无间隙方式与转轴紧密结合,将磨损和噪音降至最低,配合齿形皮带使得转速愈加准确与稳定;夹伤抵消震动设计和采用防震脚架,成就了本机美观,坚固,稳定,耐用,低磨损,低噪音,操作简单,保养容易等诸多特点。亚克力防护罩则保障了运转中操作者之安全,具有断电记忆功能。

成品鞋弯曲试验机

下面为大家介绍一下成品鞋弯曲试验机的动态加载控制系统:

1、  嵌入式操作系统简介

嵌入式操作系统是嵌入式应用软件的基础和开发平台,它是一段嵌入在目标代码中的软件,用户的其它应用程序都是建立在操作系统之上。嵌入式操作系统大部分是实时操作系统(RealTime Operating System,RTOS)。所谓实时系统,是指一个优先级高的任务能够获得立即的、没有延时的服务,它不需要等任何其它任务,而且在得到CPU的使用权后,可一直执行到工作结束或者有更高级的进程出现为止。嵌入式操作系统是嵌入式系统的灵魂,它的出现大大提高了嵌入式系统开发的效率,减少了系统开发的总工作量,而且提高了嵌入式应用软件的可移植性。为了满足嵌入式系统的需要,嵌入式操作系统必须包括操作系统的一些最基本的功能,如中断处理与进程调度,用户可通过API来使用操作系统。

     在当前的嵌入式开发领域也有很多流行的操作系统,其中具有代表性的主要有嵌入Linux、VxWorks、Windows CE、OSE、Nucleus和 μC/OS -II。

 

2、  使用实时操作系统的必要性

 

嵌入式实时操作系统在目前的嵌入式应用中用得越来越广泛,尤其在功能复杂、系统庞大的应用中显得越来越重要。首先,嵌入式实时操作系统提高了系统的可靠性。在控制系统中,出于安全方面的考虑,起码要求系统不能崩溃,而且还要有自愈能力。这不仅要求在硬件设计方面提高系统的可靠性和抗干扰性,而且也应在软件设计方面提高系统的抗干扰性,尽可能地减少安全漏洞。长期以来,前后台系统软件设计在遇到强干扰时,使运行的程序产生异常、出错、跑飞甚至死循环,造成了系统的崩溃。而实时操作系统管理的程序,这种干扰可能只是引起若干进程中的一个被破坏,可以通过系统运行的系统监控进程对其进行修复。通常情况下,这个系统监视进程用来监视各进程运行状况,遇到异常情况时采用一些利于系统稳定可靠的措施。

其次,提高了开发效率,缩短了开发周期。在嵌入式实时操作系统环境下,开发一个复杂的应用程序,通常可以按照软件工程中的解耦原则将整个程序分解为多个任务模块。每个任务模块的调试、修改几乎不影响其它模块。商业软件一般都提供了良好的多任务调试环境。

再次,嵌入式实时操作系统充分发挥了32位CPU的多任务潜力。32位CPU比8、16位CPU快,另外它本来是为运行多用户、多任务操作系统而设计的,特别适于运行多任务实时操作系统。32位CPU采用利于提高系统可靠性和稳定性的设计,使其更容易做到不崩溃。例如,CPU运行状态分为系统态和用户态。将系统堆栈和用户堆栈分开,以及实时地给出CPU的运行状态等,允许用户在系统设计中从硬件和软件两方面对实时内核的运行实施保护。

 

3、编译器的选择

目前国内最流行的 ARM 处理器的 C 语言编译器有许多种,其中使用最多的是 SDT、ADS 和 GCC。SDT 和 ADS 均为 ARM 公司自己开发,ADS 为 SDT 的升级版,以后 ARM公司不再支持 SDT,所以这里不选择 SDT。GCC 虽然支持广泛,很多开发套件使用它作为编译器,但与 ADS 相比其编译效率较低,这对充分发挥芯片性能很不利,所以这里选用 ADS 编译程序和调试。

ADS(ARM  Developer  Suite),是在 1993 年由 Metrowerks 公司开发是 ARM 处理器下最主要的开发工具。ADS  是全套的实时开发软件工具,包编译器生成的代码密度和执行速度优异。可快速低价地创建 ARM  结构应用。

ADS 对汇编、C/C++、java 支持的均很好,是目前最成熟的 ARM 开发工具。很多 ARM 开发软件(例如 Keil)也是借用的 ADS 的编译器。ADS 在 2006 年版本已经发布到 2.2。但国内大部分开发者使用的均是 1.2 版本。

 

4、   μC/OS -II简介

嵌入式实时操作系统 μC/OS -II是由美国人Jean J.Labrosse编写的,是一个完全免费的公开源代码的实时操作系统。

在嵌入式系统的前期设计过程中,必须决定所采用的嵌入式操作系统的类型。这是一个很重要的决定,因为这会影响到工程后期的发布以及软件的维护。μC/OS -II功能强大,支持56个用户任务,其内核为占先式,支持信号量、邮箱、消息队列等多种常用的进程间通信机制,现已成功应用到众多商业嵌入式系统中,是一个成熟稳定的实时内核。与大多商用RTOS不同的是, μC/OS -II公开所有的源代码,90%的代码使用标准的ANSIC语言书写,程序可读性强、移植性好;同时它可免费获得,即使商业应用也只收取少量的许可费用。

μC/OS -II的主要特点如下:

(1)提供源代码

源代码全部公开,并且可以从有关出版物上找到详尽的源代码讲解和注释。这样使系统变得透明,很容易就能把操作系统移植到各个不同的硬件平台上。

(2)可移植性

μC/OS -II绝大部分源码是用ANSIC写的,可移植性较强。而与微处理器硬件相关的那部分时用汇编语言写的,已经压到最低限度,使得 μC/OS -II便于移植到其他微处理器上。

(3)可固化

μC/OS -II是为嵌入式应用而设计的,这就意味着只要有合适的软硬件工具,就可以将μC/OS-II嵌入到开发者的产品中成为产品的一部分。

(4)可裁剪性

μC/OS -II使用条件编译实现可裁减,用户程序可以只编译自己需要的 μC/OS -II功能,而不编译不需要的功能,从而减少μC/OS -II对代码空间的占用。

(5)可剥夺性

μC/OS -II是完全是占先式的实时内核; μC/OS -II总是运行就绪条件下优先级最高的任务。

(6)多任务性

μC/OS -II可以管理64个任务,然而,目前的版本保留8个给系统,应用程序最多可以有56个任务。

(7)可确定性

绝大多数 μC/OS -II的函数调用与服务的执行时问具有确定性,也就是说,用户总是能知道μC/OS -II的函数调用与服务的执行时间。

(8)任务栈

每个任务有自己单独的栈。使用 μC/OS -II的栈空间校验函数,可以确定每个任务到底需要多少栈空间。

(9)系统服务

μC/OS -II提供很多系统服务,例如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。

(10)中断管理

中断可以使正在执行的任务暂时挂起,如果优先级更高的任务被中断唤醒,则高优先级的任务在中断嵌套全部退出后立即执行,中断嵌套层数可达255层。

(11)稳定性与可靠性

μC/OS -II自1992年以来已经有很多成功的商业应用,许多行业上都有成功应用该实时内核的实例,这些应用的实践是该内核实用性、可靠性的最好证据。

 

5、   μC/OS -II在LPC2292上的移植

5.1  μC/OS -II的体系结构

μC / OS−II的体系结构分为三层,其结构如图 6-1 所示: 

如图 6-1 所示, μC / OS−II体系由 OS_CPU.H、OS_CPU_A.ASM 和 OS_CPU_C.C 三个文件组成,底层是与处理器相关的代码,该层主要完成系统时钟的设置、出入中断的管理和任务切换功能。中层包括时间管理、任务调度管理、任务间的通信和内存管理四部分,是 OS 的主体,全部有ANSI  C 代码完成,与处理器无关,它为用户应用程序提供接口。高层是用户程序部分,μ C / OS−II有中断和任务两个处理级别,用户可以建立自己的任务,编写必要的中断子程序,在任务之间或任务与中断子程序之间建立信号量、邮箱或消息队列进行通信,完成控制器软件的编写。在移植过程中,只需要将底层针对 LPC2292 的编程结构做相应改动,使其完成系统时钟、中断管理和任务切换功能。

用 户应 用 程 序

μ C/OS_Ⅱ

与 处理 器 无 关 的 代 码

O S _ C O R E .C

O S _ F L A G .C

O S .M B O X .C

O S _ M E M .C

O S _ M U T E X .C

O S _ Q .C

O S _ S E M .C

O S _ T A S K .C

O S _ T IM E .C

μ COS_Ⅱ .C

μ COS_Ⅱ .H

μ C/OS_Ⅱ 与 应 用 程

序 相 关 的 代 码

                 

O S _ C F G .H

IN C L U D E S .H

移 植 μ C/OS_Ⅱ

与 处 理 器 相 关 代 码

O S _ C P U .H

O S _ C P U _ A.A S M

O S _ C P U _ C .C

C P U 定时 器

 

 

在 μC / OS−II中,OS 在创建时为每个任务建立并初始化一个堆栈。当发生中断和任务切换时,把当前任务运行现场保护起来,即将所有寄存器保存到该“旧”任务的堆栈中。

当每个任务需要从就绪状态激活到运行状态时,OS 又需要将所有寄存器从该“新”任务的堆栈中弹出。这样,每个任务分时占用 CPU。而对各任务来说,每次进入运行态时,CPU状态都与上次从运行退出时完全一样。因此,在 μC / OS−II的移植过程中,能够正确创建、初始化、保存并恢复各个任务的堆栈,是确保 μC / OS−II任务切换和中断管理顺利完成的关键。

 

5.2  μC/OS -II的移植条件

 

要使 μC/OS -II正常运行,处理器必须满足以下一些要求:

(1)处理器的C编译器能够产生可重入代码,并支持可扩展和可链接汇编语言模块。

可重入代码是指一段代码(如一个函数)可以被多个任务同时调用,而不必担心会破坏

数据。也就是说,可重入型函数在任何时候都可以被中断执行,过一段时间后又可以继续运行,不会因为在函数中断是被其他的任务重新调用而影响函数中的数据。

(2)处理器支持中断,并能够产生定时中断(通常为10-100HZ),同时处理器支持的汇编指令中有CPU内部寄存器入栈、出找指令。

在 μC/OS -II进行任务调度时,会把当前任务的CPU寄存器存放到此任务的堆栈中,然后从另一个任务的堆栈中恢复原来的工作寄存器,继续运行另一个任务。因此,寄存器的入栈和出栈是μC/OS -II多任务调度的基础。

(3)处理器能支持一定数量的数据存储硬件堆栈(可能是几千字节).

(4)用C语言可以开中断和关中断。

在 μC/OS -II中,可以通过宏OS_ENTER_CRITCAL ( )或OS_EXIT_CRITCAL( )控制系统关闭或者打开中断,该操作需要处理器的支持。

 

5.3  μC/OS -II的移植

将 μC / OS−II移植到 LPC2292 需要修改的文件很少,主要集中在 INCLUDES.H、OS_CPU.H、OS_CPU_C.C、OS_CPU_A.S 四个文件中。

(1) INCLUDES.H

μC / OS−II要求所有的.C 文件的第一行都要包含头文件 INCLUDES.H。

#include "includes.h"

这样使得用户项目中的每个.C文件不用分别去考虑它实际上需要哪些头文件。使用INCLUDES.H 的缺点是它可能会包含一些实际不相关的头文件,这意味着每个文件的编译时间可能会增加,但却增强了代码的可移植性。

(2)OS_CPU.H

a.不依赖于编译的数据类型

μC / OS−II不使用 C 语言中的 short、int、long 等与处理器类型有关数据的类型,而代之以移植性强的整数数据类型,这样既直观又便于移植,在文件 OS_CPU.H 中这些数据类型的定义如下:

typedef  unsigned char   BOLLEAN;

typedef  unsigned char   INT8U;

typedef  signed char     INT8S;

typedef  unsigned int    INT16U;

typedef  signed int      INT16S;

typedef  unsigned long   INT32U;

typedef  signed long    INT32S;

typedef  float          FP32;

typedef  double        P64;

typedef  INT32U      OS_STK;  

b.利用软中断 SWI 作底层接口

带 T 变量的 ARM7 处理器具有两个指令集,用户任务还可以使用两种处理器模式:用户模式和系统模式,组合起来具有 4 种方式,各种方式对系统资源有不同的访问控制权限。为了使底层接口函数与处理器无关,同时在任务调用响应的函数不需要知道函数位置,移植使用软中断指令 SWI 作为底层接口,使用不同的功能号区别不同的函数。在文件OS_CPU.H 中,函数的声明代码如下:

_swi(0x00) void OS_TASK_SW(void)           //任务级任务切换函数

_swi(0x01) _OSStartHighRdy(void)             //运行优先级最高的任务

_swi(0x02) voidOS_ENTER_CRITICAL(void)   //关中断

_swi(0x03) void OS_EXIT_CRITICAL(void)     //开中断

_swi(0x80) void ChangeToSYSMode(void)       //任务切换到系统模式 

_swi(0x81) void ChangeToUSRMode(void)       //任务切换到用户模式

_swi(0x82) void TaskIsARM(INT8U prio)        //任务代码是 ARM 代码

_swi(0x83) void TaskIsTHUMB(INT8U prio)     //任务代码是 THUMB 代码

c.OS_STK_GROWTH

虽然 ARM 处理器对堆栈向上及向下的两种增长方式都给予支持,但由于编译器 ADS仅支持堆栈从上往下,并且必须是满递减堆栈,在文件中用来定义堆栈增长方式的常量OS_STK_GROWTH 的值应该为 1,即

#define  OS_STK_GROWTH   1

(3)编写 OS_CPU_C.C

该文件包含 10 个 C 函数:

OSTaskStkInit()                      //初始化任务堆栈

OSTaskCreateHook()                 //建立任务时调用

OSTaskDelHook()                    //删除任务时调用

OSTaskSwHook()                   //切换任务时调用

OSTaskStatHook()                  //每秒钟调用作任务统计

OSTimeTickHook()                 //时钟节拍函数

OSInitHookbegin()                  //进入 OSInit 后调用

OSInitHookend()                   //OSInit 返回前调用

OSTCBInitHook()                  //调用 OSTaskCreateHook()之前调用

在这 10 个函数里,最重要且唯一必须的是函数 OSTaskStkInit(),OSTaskCreate()和OSTaskCreateExt()通过调用该函数来初始化任务堆栈。除 OSTaskStkInit()外其他 9 个函数属于钩子类(Hook),必须声明但可以不包含代码。编写 OSTaskStkInit()前,必须先确定任务的堆栈结构。本移植的堆栈结构如图 6-2 所示:

 

 

 

PC 中存放任务执行的第一条指令;LR 中存放的是任务的返回地址,它可存放任务结束函数的地址,也可存放零地址(复位地址)等,这取决于具体的应用环境;R0 寄存器存放的是传递给任务的参数;CPSR 存放的是任务运行时处理器的初始状态。设置全局变量任务入栈的

其他数据

PC

LR

R12

R11

R10

R1

R0

CPSR

OsEnterSum

空闲空间

栈底

任务环境开始

 

OsEnterSum,用来保存关中断的次数。在调用 OS_ENTER_CRITICAL()时,它的值增加,同时关中断;在调用 OS_EXIT_CRITICAL()时,它的值减少,并且仅在其值为 0 时开中断。每个任务有独立的OsEnterSum,在任务切换时保存和恢复各自的 OsEnterSum。这样就可以实现关中断和开中断的嵌套。

根据图 6-2,很容易写出函数 OS_STK OSTaskStkInit()的代码如下:

OS_STK OSTaskStkInit( void(*task)(void*pd), void *pdata, OS_STK *ptos, INT16U opt)

{   OS_STK *stk;

          stk=ptos;                            //获取堆栈指针

          *stk=(OS_STK)task;                   //PC

          *--stk=(OS_STK)task;                  //LR

          *--stk==0;                            //R12

          ……

          *--stk=0;                             //R1

          *--stk==(unsigned int)pdata;             //R0 

          *--stk==(USR_USING_MODE|0x00);     //SPSR

          *--stk=0;                             //osEnterSum

          return(stk);}

(4)编写 OS_CPU_A.S

OS_CPU_A.S 是 μC / OS−II惟一的汇编代码,也与处理器类型密切相关。该文件包含

四个简单汇编函数:

OSStartHighRdy()                    //运行优先级最高的就绪任务

OS_TASK_SW()                      //任务级切换调用   

OSIntCtxSw()                       //中断级切换调用

OSTickISR()                        //时钟节拍中断

使就绪状态的任务开始运行的函数为 OSStart()。在调用该函数之前,必须已经建立了一个或多个任务。OSStart()最终调用函数 OSStartHighRdy()运行多任务启动前优先级最高的任务。OS_TASK_SW()在 μC / OS−II从低优先级任务切换到最高优先级任务时被调用,该函数在任务级代码中总是被调用的。OSIntCtxSw()是在 ISR 执行任务切换功能时,使得更高优先级任务处于就绪状态时被执行,最终由函数 OSIntExit()调用的。OSTickISR()是时钟节拍的中断服务函数,由硬件定时器产生的。该中断可看作系统心脏的脉动。时钟的节拍式中断使得内核可将任务延时若干个整数时钟节拍,以及当任务等待事件发生时,提供超时的依据。

完成以上全部工作后, μC/ OS−II实时操作系统内核就可以在LPC2292 上正常运行了。

 

 更多关于成品鞋弯曲试验机动态加载控制系统的软件设计 ,请下载附件成品鞋弯曲试验机动态加载控制系统的软件设计

 

返回首页  |  关于我们  |  产品中心  |  技术支持  |  产品视频  |  联系我们  |  网站地图

版权所有:东莞市恒宇检测仪器有限公司   24小时免费服务热线:400-8300-665  E-mail:dg@hengyu-dg.com  粤ICP备09114076号-4
专业制造各类斯科特搓揉试验机,耐黄变试验机,耐水解吐霜试验机,成品鞋弯曲试验机等各行业品管精密检测仪器!