嵌入式WinCE多线程编程研究与实现|Delphi实现多线程编程

人气:303 ℃/2022-04-25 23:46:08
【导读】 嵌入式WinCE多线程编程研究与实现|Delphi实现多线程编程,下面是小编为你收集整理的,希望对你有帮助!摘要:Windows ce 5.0 作为一个多任务操作系统,采用了一种新的任务调度机制。原理上它将一个进程划分为多个线程,每个线程按照一定的调度策略占用CPU的运行时间及其资源,这样使得CPU的调度单...

摘要:Windows ce 5.0 作为一个多任务操作系统,采用了一种新的任务调度机制。原理上它将一个进程划分为多个线程,每个线程按照一定的调度策略占用CPU的运行时间及其资源,这样使得CPU的调度单元很小,从而提高了CPU并发处理能力。本文以线程的创建,线程功能的实现,最后将2个线程在wince 5.0上并发运行,达到了理论和实践的结合,更进一步了解了线程在嵌入式Windowsce中的调度机理

关键词:嵌入式 windows ce 5.0 多线程 Activesync 调度

中图分类号:TP316.7文献标识码:A文章编号:1007-9416201001-0000-00

Embedded WinCE Research and Implementation of multi-threaded programming

Ye zixu jia-chang

1 China University of Mining Electrical and Information Engineering, Beijing 100003; 2 Anhui University of Technology Institute of Computer Science and Technology, Huainan, Anhui232001

Abstract: Windows ce 5.0 as a multi-tasking operating system, using a new task scheduling mechanism. In principle it a process is divided into multiple threads, each thread according tocertain scheduling policy, CPU running time and its resources, which makes CPU scheduling unit is very small, thereby increasing CPU concurrent processing capabilities. In this paper, threadcreation, thread function implementation, and finally two threads run concurrently on wince 5.0, reaching a combination of theory and practice, to further understand the threading in theembedded Windows ce in the scheduling mechanism

Keywords: Embedded; windows ce 5.0; multi-threading; Activesync; scheduling

1 引言

传统而言,并发多任务的实现采用的是在操作系统级运行多个进程,由操作系统按照一定的策略优先级、循环等,调度各个进程的执行,以最大限度的利用计算机的各种资源。在这种实现方法中最基本的调度单位是操作系统级上的进程。由于各个进程拥有自己独立的运行环境寄存器和地址空间等。多线程程序设计,就是使单个程序中包含并发执行的多个线程。当多线程程序执行时,在该程序对应的进程中就有多个控制流在同时运行,即具有并发执行的多个线程。在一个进程中包含并发执行的多个控制流,而不是把多个控制流一一分散在多个进程中,这是多线程程序设计与并发多进程程序设计截然不同之处。本文在采纳后者思想的基础上实现了嵌入式系统的多线程编程

2 硬件环境

配置相对高端的PC一台,结合本文试验用的MagicARM2410实验开发平台一套

3 软件环境

3.1Windows ce 5.0

Windows CE5.0为微软针对个人电脑以外的电脑产品所研发的嵌入式操作系统,是微软于2004年7月推出的Windows CE的最新版本。操作系统功能进一步增强。把使用Platform Builder构建操作系统与使用命令行构建操作系统进行了统一。在Windows CE 5.0中,Platform Builder5.0集成开发环境只是命令行界面的简单封装,使用PlatformBuilder与使用命令行构建操作系统没有任何功能上的区别。BSP的质量得到了提高,更加模块化,结构更加清晰。Platform Builde是用于定制基于Windows CE OS为内核的嵌入式操作系统的集成开发环境。PB提供了所有基于Windows CE内核的design, create, build, test and debug的工具。安装Windows ce5.0之前必须安装Framework 1.1.

3.2 eMbedded Visual c++ 4.0 必须包含sp4

eMbedded Visual C++ 4.0,这一编译器主要是面象于Windows CE.NET操作系统的开发,是嵌入式系统Windows CE5.0应用程序的集成开发环境,具有编译应用程序、远程调试等功能

3.3Microsoft AcitveSync 4.1

Microsoft ActiveSync 是Microsoft Windows CE系统设备的电脑同步软件,可以在Win 98/Win ME/Win NT/Win 2000/Win XP系统上运行;实现设备端与电脑的连接与通讯。

3.4 ZY2410 SDK

ZY2410是用Platform Builde5.0定制的一个基于MagicARM2410运行的Windows ce 5.0,工程名为ZY2410,SDK是基于ZY2410平台开发应用程序必须的一个安装包。

4 多线程编程

Windows CE多线程编程包括线程的启动、线程的运行状态控制、线程同步及数据通信和线程的正常/非正常退出。本项目的软件及架构在多线程设计上,要求通过多线程实现异步的数据采集及绘制,以提高系统运行效率。

4.1 线程的启动

Win32API提供支持多线程的启动,调用API函数CreateThread分配资源启动线程,并返回线程句柄Handle,以控制线程状态。

4.2线程的状态

一般有就绪态、运行台、阻塞态、终止态等。为了实现各线程的功能同步,有必要合理的是各个线程进行状态的切换。在MFC的线程框架下,通过::AfxCreateThread启动线程、自身CWinTherad::Suspend阻塞线程、其他线程调用CWinThread::Resume重新就绪线程、线程return正常退出。考虑到本嵌入式系统对稳定性、效率的高要求,去掉不安全的调用,如CWinThread::Terminate外部调用终止线程等方法。

4.3线程的同步

WindowsCE提供若干线程通信机制,本系统选用Event事件进行线程间的同步。通过CreateEvent申请Event资源,返回HANFLE实例,以进行行为控制。在申请时即可指定生成时Event状态以及复位机制。本系统中信号生成时为复位状态,有且仅有手动调用ResetEvent才能复位――即手动方式,则在生成时参数为:CreateEventNULL,TRUE,FALSE,NULL。

本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文 4.4线程的优先级

本系统为及时响应驱动的数据传递信号,将与之相关的线程SubThread提高优先级,通过CWindThread:: SetThreadPriorityTHREAD_PRIORITY_ABOVE_NORMAL实现。但Windows CE严格按优先级进行调度,因此SubThread一般在WaitForMultipleObjects阻塞状态,才能使其他线程得以运行

5多线程编程实现过程

5.1主要控件属性

控件属性设置如表5.1所示

表5.1控件属性

ID 解释

IDC_LISTONE 显示线程1的记数值

IDC_LISTTOW 显示线程2记数值

IDC_BTNWXEC 创建线程

5.2定义线程函数及消息处理代码

在类CThteadDlg中声明线程函数,访问权限私有且为静态。Function Type为DWORD,Function Decleration为ThreadProcPVOID pArg.其代码如下:

DWORD CThreadDlg::ThreadProcPVOID pArg

运行按钮中所添加的消息处理程序代码如下

Void CThreadDlg::onBrnexec

{

DWORD dwThreadId1, dwThreadId2;

HANDLE handle1,handle2;

CListBox*pListOne;

CListBox*pListTwo;

pListOne=CListBox*GetDlgItemIDC_LISTONE;

pListTwo=CListBox*GetDlgItemIDC_LISTTWO;

handle1=CreatThreadNULL,0,ThreadProc,PListOne,0,&dwThreadId1;

hande2= CreatThreadNULL,0,ThreadProc,PListOne,0,&dwThreadId2;

if! Handle

{

AfxMessageBox_T“Thread 1 creat failed”;

}

If! Handle

{

AfxMessageBox_T“Thread 2 creat failed”;

}

CloseHandlehandle1;

CloseHandlehandle2l

}

6 结语

通过以上内容的完成,进一步的熟悉了eMbedded Visual C++ 4.0开发环境,并在此基础上实现了以线程为示例的PC与实验箱的通信,为更深层次的研究基于WINCE 5.0应用程序开发奠定良好的基础。

参考文献

[1] 周立功等.ARM&Win CE 实验与实践[M].北京:北京航空航天大学出版社,2007.7.

[2] Samsung 公司.S3C2410A User’s Manual Rebision 1.0.2004.

[3] 张冬泉等.Windows CE 实用开发技术[M].北京:电子工业出版社,2006.

[4] 汪兵等.EVC高级编程及用应开发[M].北京:中国水利水电出版社,2005.

[5] 何宗键等.Windows CE 嵌入式系统[M].北京:北京航空航天大学出版社,2006.

作者简介:

叶子1986-,女 ,安徽淮南人,硕士研究生,研究方向:电力电子与电力传动

许家昌1980-,男,山东安丘人,中共党员,硕士研究生,讲师,安徽理工大学计算机科学与工程学院,研究方向:嵌入式系统研究与应用,计算机监控等。

本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文

Copyright © 2008-2024 蜗牛素材网 All Rights Reserved
一个致力于分享各种行业知识与经验、学习资源交流平台,知识让你的眼界更宽广!