一体化模块程序设计样例V

上传人:新** 文档编号:569729119 上传时间:2024-07-30 格式:PPT 页数:32 大小:655KB
返回 下载 相关 举报
一体化模块程序设计样例V_第1页
第1页 / 共32页
一体化模块程序设计样例V_第2页
第2页 / 共32页
一体化模块程序设计样例V_第3页
第3页 / 共32页
一体化模块程序设计样例V_第4页
第4页 / 共32页
一体化模块程序设计样例V_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《一体化模块程序设计样例V》由会员分享,可在线阅读,更多相关《一体化模块程序设计样例V(32页珍藏版)》请在金锄头文库上搜索。

1、06.April 2006HUAWEI TECHNOLOGIES Co., LHUAWEI Confidential Security Level: 貌拘钓纷肉交欧擒厕衔渤肄戳琴克侨凡瞅理狗奢夹蔬子拿藤蛛辜尖侩阶腐一体化模块程序设计样例V一体化模块程序设计样例V一体化模块程序设计样例(V1.00)丰惜正鲤靡蒜瞧失扦磨毒娇剧膏诫哎毡耗俊迈席温碧夏叼保讣象剿滩捂冕一体化模块程序设计样例V一体化模块程序设计样例VHUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 工程创建工程创建 一体化程序代码主要包括两个部分,一个是用户程序代码,这部分代码一体化程序代

2、码主要包括两个部分,一个是用户程序代码,这部分代码在完成后可编译成在完成后可编译成m0烧入模块程序中,并且状态机的应用主要在这里;烧入模块程序中,并且状态机的应用主要在这里;另一部分是模拟器代码,这部分代码作用是可以在另一部分是模拟器代码,这部分代码作用是可以在windows平台下对用平台下对用户程序代码进行调试并且提供一个简单友好的人机界面。户程序代码进行调试并且提供一个简单友好的人机界面。 以下是工程的创建步骤:以下是工程的创建步骤: 1、运行、运行VC6.0 2、新建工程,在、新建工程,在Workspaces中选择中选择Blank Workspace项,输入工程项,输入工程名称后,点击确

3、定名称后,点击确定 橱戳跺垢涝仪用咨劲场威履蛛其朗豫涟梨欺离低非疹历所辆贸联洛柯堆腰一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 3、新建工程,在、新建工程,在Project中选择中选择MFC AppWizard(dll),并且选择,并且选择Add to current workspace,点击确定。此后可一直选择默认选项,直至工程,点击确定。此后可一直选择默认选项,直至工程建立完毕。以后用户程序的所有代码都会放在这个工程里进行调试,当建立完毕。以后用户程序的所有代码都会放在这个工程里

4、进行调试,当然为了配合模拟器的使用,工程里还带有部分模拟器的代码段。然为了配合模拟器的使用,工程里还带有部分模拟器的代码段。深帚止渔羌腋啸连抠巴柏鸥徒活功溶纱汐忆浊贬坛奖磺缓子昧证讳洲拽挠一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 4、新建工程,在、新建工程,在Project中选择中选择MFC AppWizard(exe),并且选择,并且选择Add to current workspace,点击确定。该工程将来会作为模拟器来使用,我,点击确定。该工程将来会作为模拟器来使用,我们这里选

5、择比较简单的对话框工程,如果对们这里选择比较简单的对话框工程,如果对VC比较熟悉的,可以选择其比较熟悉的,可以选择其他的工程类型来作为模拟器的平台他的工程类型来作为模拟器的平台 朔融豪哼茸晾伊灾膀批偿导烘旬瘟聋凡末七碟熬嘱咱而吓涩耪萝淳疽毛怨一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 模拟器和用户代码之间的通信模拟器和用户代码之间的通信 用户代码是运行在嵌入式系统下的,为了让这些代码可以在用户代码是运行在嵌入式系统下的,为了让这些代码可以在windows下下进行调试,我们可以把代码封

6、装在动态链接库中,并在模拟器中进行加进行调试,我们可以把代码封装在动态链接库中,并在模拟器中进行加载。同时创建一个线程,在线程开启后可通过载。同时创建一个线程,在线程开启后可通过statewizard提供的一些提供的一些API函数完成模拟器和用户代码之间的通信。基本流程如图所示:函数完成模拟器和用户代码之间的通信。基本流程如图所示:堤夺蓄奥妥臻车寇泅久炭鳞汪追稼迈楞纤峦贷炕窥肉朋斟肇卧彭庇著宴鲍一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 样例样例该样例的功能是实现模块开机后自动搜网的

7、功能该样例的功能是实现模块开机后自动搜网的功能1、状态分析、状态分析 下面我们先对模块的各个状态进行一个简要分析。下面我们先对模块的各个状态进行一个简要分析。 开发板在按下复位键后,模块开始上电运行。模块此时的状态从下电状开发板在按下复位键后,模块开始上电运行。模块此时的状态从下电状态切换到上电状态,同样的道理,关机的过程的状态切换则为上电状态态切换到上电状态,同样的道理,关机的过程的状态切换则为上电状态到下电状态。除此之外,模块不会再有第三种状态存在。也许有人会说到下电状态。除此之外,模块不会再有第三种状态存在。也许有人会说模块也有可能上电失败阿,没错,上电失败确实是第三种状态,不过,模块也

8、有可能上电失败阿,没错,上电失败确实是第三种状态,不过,我们做的是用户程序,对于用户程序来说开始只有我们做的是用户程序,对于用户程序来说开始只有STOP和和START,上,上电失败后用户程序仍然是处于电失败后用户程序仍然是处于STOP。因此,我们可以设定,模块的初始。因此,我们可以设定,模块的初始状态由两种,这两种状态可互相进行切换。状态由两种,这两种状态可互相进行切换。 单灸柳东信浊胀挨将贾黍雕尔厉谋弟够颜奖窿骑夏偏诱砒清镣鹿匝肝母溶一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 根据

9、我们的最初目的,在模块开始后,需要其执行一段搜网的操作,也根据我们的最初目的,在模块开始后,需要其执行一段搜网的操作,也就是说模块不会立即进入就是说模块不会立即进入IDLE状态。我们可定义搜网过程的状态为状态。我们可定义搜网过程的状态为REGISTER。此时的模块状态关系可如图所示:。此时的模块状态关系可如图所示: 进入进入IDLE状态后,模块的搜网算是结束,这个程序中我们只实现开机搜状态后,模块的搜网算是结束,这个程序中我们只实现开机搜网的这一功能,至于后续由于键盘操作或是其他操作造成的一些状态。网的这一功能,至于后续由于键盘操作或是其他操作造成的一些状态。我们统统把其划分为我们统统把其划分

10、为IDLE范围内。在范围内。在REGISTER中,我们需要执行多个中,我们需要执行多个AT命令已达到搜网的目的,也就是说我们可以根据这些命令已达到搜网的目的,也就是说我们可以根据这些AT命令来对命令来对REGISTER进行细分。以下是我们设定的搜网步骤:进行细分。以下是我们设定的搜网步骤: 毫篙仕贪士邦宠护绸孔瞧歌阎身助镁汞吹苑渊谷勃萝动共窟眩彬邓楔恤镐一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 把上面几幅图整合起来,就是模块搜网时的所有状态把上面几幅图整合起来,就是模块搜网时的所有

11、状态砚区搔叼湛警僵怀课情旗碌锤蔡李豪噶洪狈陌舱桃属纽钝丝凰钉该信总垃一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 2、事件分析、事件分析 从从STOP状态切换到状态切换到START状态,是由于收到了一个状态,是由于收到了一个POWER_UP的事的事件;同样从件;同样从START切换到切换到STOP是由事件是由事件POWER_DOWN导致。在导致。在REGISTER中,我们一般是通过中,我们一般是通过AT命令来进行判断下一步该做什么操作命令来进行判断下一步该做什么操作的,因此对外来说,状

12、态间的切换是受到事件的,因此对外来说,状态间的切换是受到事件AT_CNF引起,至于切换引起,至于切换到哪一个状态则要根据到哪一个状态则要根据AT命令的回应内容进行判断,我们这里简单定义命令的回应内容进行判断,我们这里简单定义AT命令回应正常时为命令回应正常时为AT_CNF_OK,不正常时为,不正常时为AT_CNF_ERROR。 列举的事件列表如下:列举的事件列表如下:EVENT_POWER_UPEVENT_POWER_DOWNEVENT_AT_CNFEVENT_AT_CNF_OKEVENT_AT_CNF_ERROR并筑岩蛋秩烃躇诺挞茧爹辫返裴拉纺蒂罗沼杠靡倔桶只掩庶聚转撞雄资皖一体化模块程序设

13、计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 3、编码、编码刚才我们已经把模块开机搜网的状态分析完毕,接下来我们所要做的就刚才我们已经把模块开机搜网的状态分析完毕,接下来我们所要做的就是在代码中实现这些状态切换。在是在代码中实现这些状态切换。在statewizard开发包开发包(以下简称以下简称state)中,中,我们可以通过简单的一些菜单操作,即可方便的实现这些代码。我们可以通过简单的一些菜单操作,即可方便的实现这些代码。State的的安装步骤可参考安装步骤可参考UML StateWizard,这里

14、不做详述。,这里不做详述。另外,在两个工程中都需要加入另外,在两个工程中都需要加入state提供的一个链接库,可以在提供的一个链接库,可以在vc中进中进行加载,链接库文件可在行加载,链接库文件可在state的样例中找到。的样例中找到。估椅麦徊相稼前雹汗异麓把让绥藤盛嫌膳继轩酵夺济彭峨句腮兢剂营芬鲁一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 3.1 文件类型设计文件类型设计首先,需要更改首先,需要更改state设定的插入的文件类型设定的插入的文件类型 (默认是默认是.cpp文件,我们用

15、文件,我们用的是的是.c文件文件)。在。在state工具栏中点击工具栏中点击settings图标,弹出对话框,如下图图标,弹出对话框,如下图进行设置。进行设置。敖靴跑天瘤漫笨阜羊区郭里敦产卿挽包省盼灰舱衡旅褒弟豪找吱誉银畦告一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 3.2 应用添加应用添加安装好安装好state后,在后,在workspace边框中会有边框中会有statetree的页面选项,选择它。的页面选项,选择它。在页面框中我们可以看到之前我们创建的两个子项目的状态树,目前里在页

16、面框中我们可以看到之前我们创建的两个子项目的状态树,目前里面只有项目名称及挂在其下的几个初时文件名。面只有项目名称及挂在其下的几个初时文件名。多抓蚀塘痞裔抒宽签喧燎椅白匆嚷纸接烹窥进憎误屎啦圈就展荤形报床偷一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 选择选择app application(s),右键菜单中选择,右键菜单中选择New Application。弹出如下。弹出如下对话框,对话框, 在在Application Name中输入名称后点击确定。中输入名称后点击确定。Entry F

17、unction是指程序是指程序进入这个状态的入口函数,即进入该状态后第一个执行的函数就是它;进入这个状态的入口函数,即进入该状态后第一个执行的函数就是它;同样道理,同样道理,Exit Function是程序退出该状态时执行的最后一个函数。我是程序退出该状态时执行的最后一个函数。我们可以利用这两个函数作一些变量初始化和内存释放的操作。在有些情们可以利用这两个函数作一些变量初始化和内存释放的操作。在有些情况下我们可以不需要这些入口和出口函数,可以把前面的勾选去掉即可。况下我们可以不需要这些入口和出口函数,可以把前面的勾选去掉即可。吃疆纷累昔币数戌恩栽拔鲸龟遵愿焰酚犀院挨慑苔硅搭驶圆怀岗饭悠茄萄一体

18、化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 应用创建后,可以看到应用创建后,可以看到APP工程里已经添加了两个名为工程里已经添加了两个名为POWERUPDOWN.c和和POWERUPDOWN.h的文件。这里对里面的代码的文件。这里对里面的代码做一个简要解释,详细说明可在做一个简要解释,详细说明可在UML StateWizard中找到。中找到。布将糕氧则院谓盐睡馆捷慢及辙口镰贝佐例牲痢呵基阳狼淌沪度衙悉伪募一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNO

19、LOGIES Co., Ltd.HUAWEI Confidential FILE: POWERUPDOWN.c灵拐荐测殴防茎四激果轧尹弊触肛负谬紫袒切舰寓绎标是体照可院匿息鸣一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential l列举了在列举了在POWERUPDOWN状态中的事件函数列表状态中的事件函数列表SME_BEGIN_STATE_DEF(POWERUPDOWN,POWERUPDOWN)/*SME_STATE_DEF(POWERUPDOWN,POWERUPDOWN)*/SME_STATE

20、_ENTRY_FUNC(POWERUPDOWNEntry)SME_STATE_EXIT_FUNC(POWERUPDOWNExit)/*SME_STATE_DEF*/SME_END_STATE_DEFl列举该应用下的状态之间的关系列举该应用下的状态之间的关系SME_BEGIN_STATE_TREE_DEF(POWERUPDOWN)/*SME_STATE_TREE_DEF(POWERUPDOWN)*/SME_STATE(POWERUPDOWN,POWERUPDOWN,SME_INVALID_STATE,-1)/*SME_STATE_TREE_DEF*/SME_END_STATE_TREE_DEF缠

21、遗脖摔骆润筹创爬侩油进钦壬悟炭劈著综滔瓦徊招建犊匪赦沧趋闲聘蛔一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential l对该应用的一个宏定义,其定义了一个对该应用的一个宏定义,其定义了一个SME_APP_T的结构。这个应用的状态树的结构。这个应用的状态树的名称即为的名称即为POWERUPDOWN_STATE_TREE。 SME_APPLICATION_DEF(POWERUPDOWN, POWERUPDOWN)l函数实体函数实体int POWERUPDOWNEntry(struct SME_APP

22、_T *pApp, struct SME_EVENT_T *pEvent)return 0;int POWERUPDOWNExit(struct SME_APP_T *pApp, struct SME_EVENT_T *pEvent)return 0;FILE: POWERUPDOWN.h里面是对一些状态的声明及函数声明,这里略过。里面是对一些状态的声明及函数声明,这里略过。苯精硬阁润驳矾专敢皇斯孙阅溅业瘴库盾抖耕唇谚娠咳浙护逐蚤纫废询逼一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 3

23、.3 状态添加状态添加状态树的添加和应用添加类似,选中状态树的添加和应用添加类似,选中POWERUPDOWN应用,右键选择应用,右键选择NEW state。在对话框中写入各个状态的名称。在对话框中写入各个状态的名称。兆研奥政娇侥厉法昨诞挣挠吓败便殆皇啸绑雷霞梯挠解极螟斌楼布腾浇舟一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 下图为所有状态添加完毕后的状态树下图为所有状态添加完毕后的状态树概除串超谜拒夫案笨槛覆云珠走俄雇僵连撩潜泵镣娘掖和啤驻溃骡袄睹纵一体化模块程序设计样例V一体化模块程

24、序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 3.4 事件添加事件添加和状态添加一样,通过右键菜单,我们可以在各个状态中添加其需要处和状态添加一样,通过右键菜单,我们可以在各个状态中添加其需要处理的事件。第一次添加事件时,理的事件。第一次添加事件时,state会提示你需要创建一个事件列表,会提示你需要创建一个事件列表,还记得之前的事件分析吗?根据对话框的提示,我们创建好的文件中把还记得之前的事件分析吗?根据对话框的提示,我们创建好的文件中把所有事件进行枚举。所有事件进行枚举。减华刘朽铜语退蝇蚤玲狗录饲社焦斑跨囤盆厦术候蹲

25、唬萧琅占哩痢愧骇酵一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential FILE: eventid.henum/*SME_EVENT_ID_LIST_DECLARE*/EVENT_POWER_UP = 0,EVENT_POWER_DOWN,EVENT_AT_CNF,EVENT_AT_CNF_OK,EVENT_AT_CNF_ERROR/*SME_EVENT_ID_LIST_DECLARE*/;事件列表创建完毕后,我们就可以正常进行事件添加了。选中一个状态事件列表创建完毕后,我们就可以正常进行事件

26、添加了。选中一个状态项,右键菜单选择项,右键菜单选择Add Event Handle弹出对话框。弹出对话框。创窿换钳爪绷仲氮帝炙掩酮绩酚借簇旗嘻祷脱脊矿邯搭泳榆大刃吕舜触蟹一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential Event ID:事件:事件ID值值Transit to选项:指在发生该事件后需要切换到哪个一个状态。选项:指在发生该事件后需要切换到哪个一个状态。Internal Transition选项:指事件为内部事件,事件发生后状态不进行改变。选项:指事件为内部事件,事件发生后状

27、态不进行改变。Action:事件发生后执行的函数,可省去。:事件发生后执行的函数,可省去。按照之前的事件分析,我们把所有事件添加入程序中,由于事件按照之前的事件分析,我们把所有事件添加入程序中,由于事件EVENT_AT_CNF_OK和和EVENT_AT_CNF_ERROR需要现解析需要现解析EVENT_AT_CNF所传过来的参数进行解析,因此这两个事件处理需要在所传过来的参数进行解析,因此这两个事件处理需要在后续的代码添加中进行实现,在此先不进行描述。后续的代码添加中进行实现,在此先不进行描述。帐席寻逐邮地格汛致剩椅冕犯渺且栏怜灶见奏兢梧亭悔梦圭侩客蜘字税郝一体化模块程序设计样例V一体化模块程

28、序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 模拟器的实现模拟器的实现模拟器部分的代码是纯模拟器部分的代码是纯windows的代码,其主要的内容是向用户程序发的代码,其主要的内容是向用户程序发送一些模拟事件及处理用户程序发过来的一些事件处理。送一些模拟事件及处理用户程序发过来的一些事件处理。1、创建一个线程类、创建一个线程类一个线程对应一个用户程序中的应用,这里我们的用户程序只有一个应一个线程对应一个用户程序中的应用,这里我们的用户程序只有一个应用,因此只需要创建一个工作线程即可。用,因此只需要创建一个工作线程即可。 l

29、包含头文件包含头文件 #include “srvAgent.h”l定义一个线程上下文定义一个线程上下文 SME_THREAD_CONTEXT_T g_PowerUpDownThreadContext滨掸闸印菌暑挽之煮华晦肄嗡叶茁辈掀深哟宋榷渴丛桶碉伸爷才毕晃缔炳一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential l在虚函数中加入如下代码在虚函数中加入如下代码HWND hWnd = AfxGetMainWnd()-m_hWnd; /*设置上下文设置上下文id,可和当前的线程,可和当前的线程id

30、进行匹配,也可以自己设定任意值进行匹配,也可以自己设定任意值*/g_PowerUpDownThreadContext.nAppThreadID = GetCurrentThreadId();/*根据不同的宏定义,加载不同的用户程序做成的链接库根据不同的宏定义,加载不同的用户程序做成的链接库*/#ifdef _DEBUG#ifdef _UNICODEAgtStartAppThread(hWnd, _T(App_UD.dll), AppMain, &g_PowerUpDownThreadContext);#elseAgtStartAppThread(hWnd, _T(App_D.dll), App

31、Main, &g_PowerUpDownThreadContext);#endif#else AgtStartAppThread(hWnd, _T(App.dll), AppMain, &g_PowerUpDownThreadContext);#endif晕笨董归讽摩呵诺蹄串蔚价焦锨猿靳概跑娜剥邱圈省篡吱问企光度尊斤隐一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 2、增加初始化时打开线程的代码、增加初始化时打开线程的代码l定义全局变量定义全局变量 HANDLE g_hPowerUpDo

32、wnThread=NULL; /*保存线程句柄保存线程句柄*/l在在OnInitDialog()中打开线程中打开线程CWinThread* pAppThreadObj = AfxBeginThread(RUNTIME_CLASS(PowerUpDown);g_hAppThread = (HANDLE)pAppThreadObj;3、增加一些事件触发按键、增加一些事件触发按键这里为了简单起见,只通过一些这里为了简单起见,只通过一些button控件来实现事件触发控件来实现事件触发抡音郁碳双契裙掷蛋令栗靠殿漏莲社摆仟抖艇疚褪搅出罗筒浚侵兑挺累邑一体化模块程序设计样例V一体化模块程序设计样例VPage

33、 HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 用户程序中完成一些state的api调用通过调用通过调用state的的API函数,以及注册函数,以及注册state的相关回调函数,可以最终实的相关回调函数,可以最终实现和模拟器的数据交互。由于这部分代码是用于模拟器调试部分,为了现和模拟器的数据交互。由于这部分代码是用于模拟器调试部分,为了方便后续的编译问题,我们让其单独生成一组文件方便后续的编译问题,我们让其单独生成一组文件(main.c/main.h)。主。主要函数有:要函数有:AppMain()。此为链接库的入口函数,主要进行一些状态机。此

34、为链接库的入口函数,主要进行一些状态机的初始化操作以及回调函数设置。如果需要定义一些回调函数的话,也的初始化操作以及回调函数设置。如果需要定义一些回调函数的话,也可以在把回调函数写在这个文件中。设置回调的可以在把回调函数写在这个文件中。设置回调的API函数可以参考文档函数可以参考文档State Machine Engine API。蚂誉黍拂聊蛮儿阻驼砷咎军雹折绵社券紫俩棺蔑微栖赖霹简砖哈柳诌赵羚一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 事件处理先前有些状态中的事件需要先进行分析后才

35、能决定下一步的走向,因此我们在先前有些状态中的事件需要先进行分析后才能决定下一步的走向,因此我们在这些事件处理函数中要加入一些分析代码。下面以状态这些事件处理函数中要加入一些分析代码。下面以状态qTSIM中的中的EVENT_AT_CNF为例:为例:在我们向模块发送在我们向模块发送AT%TSIM查询命令后,会得到当前查询命令后,会得到当前sim卡的状态,如果返回卡的状态,如果返回的值为的值为1则表示则表示sim已激活,我们可以进行下一步已激活,我们可以进行下一步AT命令执行;如果返回的值为命令执行;如果返回的值为0,则表示当前,则表示当前sim未激活,此时状态直接跳转至未激活,此时状态直接跳转至

36、IDLE状态。我们在事件函数中状态。我们在事件函数中加入如下代码:加入如下代码:SME_EVENT_ID_T nEventId;SME_EVENT_T *pInteralEvent;if(*(char*)pEvent-Data.Ptr.pData+6) = 1)/*%TSIM 1*/nEventId = EVENT_AT_CNF_OK;豌浸滞捷鸡灰塘壳卿吃娟涎正骋抵束傀或忌害青坯锈华旁驳卖窥侦颤款溺一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential else /*%TSIM 0*/nEven

37、tId = EVENT_AT_CNF_ERROR;/*发送事件进行不同的状态触发发送事件进行不同的状态触发*/pInteralEvent=SmeCreateIntEvent(nEventId,0,0,NULL,pApp);SmePostEvent(pInteralEvent);同样我们在其他的一些事件函数中也可加入类似代码。同样我们在其他的一些事件函数中也可加入类似代码。缆典灿嘲拢轴柜潭听字氖醚攘招净髓峨奶浦炳刘紊珍台愁浩仰裹于淬荣斜一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 调试代

38、码到目前为止,一个简单的模拟器到目前为止,一个简单的模拟器+用户程序代码已经初具雏形了,可以用用户程序代码已经初具雏形了,可以用VC的的debug模式进行简单的模拟调试了,为了能够进一步获得程序的调模式进行简单的模拟调试了,为了能够进一步获得程序的调试信息,我们可以在代码中加入一些调试函数,这样在模拟器这边可以试信息,我们可以在代码中加入一些调试函数,这样在模拟器这边可以获得更多程序运行信息了。具体的调试信息添加可以参考样例程序,本获得更多程序运行信息了。具体的调试信息添加可以参考样例程序,本文就不进行详细描述了。文就不进行详细描述了。静纳礁虱铡顿衰囚神烙昂蘸圃曲铝筐匙虫富宛董嘛屋活倍虫泛定悍

39、屿抒素一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 模块一体化接口函数嵌入程序写到这,我想大家应该已经清楚了整个状态机的运行机制,即只要程序写到这,我想大家应该已经清楚了整个状态机的运行机制,即只要向状态机发送相应的事件就行。根据模块提供的一些接口函数,我们可向状态机发送相应的事件就行。根据模块提供的一些接口函数,我们可以定义不同的事件,以此达到状态切换的目的。函数文件为以定义不同的事件,以此达到状态切换的目的。函数文件为user.c/user.h冉末诛肆嫡倔歇啮鸿远恨曙馈名盔匪麦杆党

40、页棋容踊函忘碰纤禁舌庶句殖一体化模块程序设计样例V一体化模块程序设计样例VPage HUAWEI TECHNOLOGIES Co., Ltd.HUAWEI Confidential 编译编译用户程序用到了一些用户程序用到了一些state提供的链接库,而我们编译的时候需要这些库提供的链接库,而我们编译的时候需要这些库的源文件,因此别忘了把这些文件也复制到相关目录下。主要文件有的源文件,因此别忘了把这些文件也复制到相关目录下。主要文件有sme.c、sme.h、sme_debug.h 诀柳应夕藻擞雹窄屠股炕漱殴刑聂扬仙狐依哼肺唉想折陀耿靡楔荷扣壕泞一体化模块程序设计样例V一体化模块程序设计样例VPage 06.April 2006HUAWEI TECHNOLOGIES Co., LHUAWEI Confidential Security Level: 貌拘钓纷肉交欧擒厕衔渤肄戳琴克侨凡瞅理狗奢夹蔬子拿藤蛛辜尖侩阶腐一体化模块程序设计样例V一体化模块程序设计样例V谢谢!妮吻痘俗欺埂讫货诛判威演烂谤换郸师遗棠桂短仑查济俄锅服招蝎瓣烘换一体化模块程序设计样例V一体化模块程序设计样例V

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号