一种基于μC/OS-Ⅱ的高速通信方法 【技术领域】
本发明涉及一种基于μC/OS-II的高速通信方法。
背景技术
在基于8051内核的嵌入式应用系统中,使用RTOS(Real Time OperationSystem,实时操作系统)的主要目的是为了提高系统的可靠性,其次是提高开发效率、缩短开发周期。μC/OS-II是一个占先式实时多任务内核,代码具有可移植、可固化、可裁剪等特点,对源代码适当裁减,很容易移植到8~32位不同框架的微处理器上。由于串口通信是嵌入式测控系统的重要组成部分,异步串行口是一个比较简单又很具代表性的中断驱动外设,因此在μC/OS-II上实现高速通信具有现实意义。
基于RTOS的高速通信编程实现,在高工作频率的系统中不存在问题,但由于8051内核指令执行周期比较长,系统要通过EMC测试问题,系统CPU时钟工作频率不能太高,因此用传统的编程方式在8051内核上实现基于μC/OS-II的高速通信有一定问题:主要由于μC/OS-II中内核多任务切换和临界段代码、数据保护时要开关中断使能(这是所有RTOS必须的),在系统高速通信时可能会丢失数据,导致通信中帧数据接收不完整,通信可靠性达不到要求。
【发明内容】
为了克服上述现有问题存在的不足,本发明旨在提供一种基于μC/OS-II的高速通信方法,以解决上述通信中帧数据接收不完整,通信可靠性达不到要求的问题,从而很容易地在8051内核上实现基于μC/OS-II的高速通信。
本发明所述的一种基于μC/OS-II的高速通信方法,包括下列步骤:一种基于μC/OS-II的高速通信方法,所述μC/OS-II内核管理二个任务,即通信任务和空闲任务,其特征在于,该方法包括通信任务执行步骤、通信中断服务步骤和外部0中断服务步骤,且所述的通信中断服务步骤由外部硬件触发,其中:
通信任务执行步骤包括等待步骤、发送允许标志判断步骤、通信完成信号量判断步骤和返回步骤,其中:
等待步骤,即接收缓冲区指针清零,置发送允许标志,等待应答帧数据,并设定超时时间,通信任务把CPU控制权交给操作系统,使自己挂起;
发送允许标志判断步骤,即μC/OS-II内核把任务切换到所述的空闲任务,在所述空闲任务中判断发送允许标志,若允许发送,则发送请求帧数据,清除所述的发送允许标志,并把CPU工作模式置为空闲模式,使CPU进入睡眠状态;若不允许发送,则直接把CPU工作模式置为空闲模式,使CPU进入睡眠状态;
通信完成信号量判断步骤,即通信任务重新获得CPU控制权后,判断是否收到通信完成信号量,若收到通信完成信号量,则进行数据校验,若数据校验正确,则进行通信数据处理;若数据校验不正确,则做错误处理;若没有收到通信完成信号量,即通信任务重新获得CPU控制权是由等待时间超过所设定的超时时间引起的,做超时处理;
返回步骤,即重新开始下一个通信任务,即返回到所述的等待步骤;
通信中断服务步骤包括接收缓冲区指针累加步骤和接收缓冲区数据长度判断步骤,其中:
接收缓冲区指针累加步骤,即将收到的应答帧数据放到所述的接收缓冲区,且所述接收缓冲区指针加一;
接收缓冲区数据长度判断步骤,即判断所述接收缓冲区数据长度是否达到预定值:若是,则触发外部0中断,即直接进入外部0中断服务步骤;若否,则μC/OS-II内核切换任务,即返回到所述通信任务执行步骤中的发送允许标志判断步骤;
外部0中断服务步骤,即通信完成信号量发送步骤,即发送通信完成信号量到所述μC/OS-II内核,中断返回,μC/OS-II内核把任务切换到所述的通信任务,即返回到所述通信任务执行步骤中的通信完成信号量判断步骤。
在上述的基于μC/OS-II的高速通信方法中,所述的通信中断服务步骤为非屏蔽中断步骤,即在进行通信中断服务步骤时,不受所述μC/OS-II内核管理。
由于采用了上述的技术解决方案,本发明中把发送请求帧数据的功能移到空闲任务,这样发送好请求帧数据后,通信接收中断服务子程序,即通信中断服务步骤,马上就能响应接收帧数据,不会造成数据丢失;(因为,如果由通信任务自己先发送请求帧数据,再等待通信完成信号量,那μC/OS-II内核进行等待通信完成信号量内核服务函数处理时,可能已经发生了数据通信,由于此时内核可能还未打开中断使能,将导致通信数据丢失);且通信中断服务步骤为非屏蔽中断,不受μC/OS-II内核管理,从而解决了每次进入通信中断服务子程序时,由于μC/OS-II内核判断是否需要进行任务切换而导致执行时间过长,丢失数据的问题。另外,通过增加外部0中断服务子程序,即外部0中断服务步骤,即在通信中断服务子程序中收到完整应答帧数据后,触发一次“模拟中断”——外部0中断(受μC/OS-II内核管理),在外部0中断服务子程序中发送通信完成信号量(即收到应答帧数据信号量),这样既解决了通信的响应速度,提高了通信的实时性、可靠性,又能得到μC/OS-II内核服务功能,提高了整个基于8051内核的嵌入式应用系统的可靠性。
【具体实施方式】
本发明,即一种基于μC/OS-II的高速通信方法,所述μC/OS-II内核管理二个任务,即通信任务和空闲任务,其特征在于,该方法包括通信任务执行步骤、通信中断服务步骤和外部0中断服务步骤,且所述的通信中断服务步骤为非屏蔽中断步骤,即在进行通信中断服务步骤时,不受所述μC/OS-II内核管理,而是由外部硬件触发,即当接收到由外部硬件发送的数据信号时触发,其中:
通信任务执行步骤包括等待步骤、发送允许标志判断步骤、通信完成信号量判断步骤和返回步骤,其中:
等待步骤,即接收缓冲区指针清零,置发送允许标志,等待应答帧数据,并设定超时时间,通信任务把CPU控制权交给操作系统,使自己挂起;
发送允许标志判断步骤,即μC/OS-II内核把任务切换到所述的空闲任务,在所述空闲任务中判断发送允许标志,若允许发送,则发送请求帧数据,清除所述的发送允许标志,并把CPU工作模式置为空闲模式,使CPU进入睡眠状态;若不允许发送,则直接把CPU工作模式置为空闲模式,使CPU进入睡眠状态;
通信完成信号量判断步骤,即通信任务重新获得CPU控制权后,判断是否收到通信完成信号量,若收到通信完成信号量,则进行数据校验,若数据校验正确,则进行通信数据处理;若数据校验不正确,则做错误处理;若没有收到通信完成信号量,即通信任务重新获得CPU控制权是由等待时间超过所设定的超时时间引起的,做超时处理;
返回步骤,即重新开始下一个通信任务,即返回到所述的等待步骤;
通信中断服务步骤包括接收缓冲区指针累加步骤和接收缓冲区数据长度判断步骤,其中:
接收缓冲区指针累加步骤,即将收到的应答帧数据放到所述的接收缓冲区,且所述接收缓冲区指针加一;
接收缓冲区数据长度判断步骤,即判断所述接收缓冲区数据长度是否达到预定值:若是,则触发外部0中断,即直接进入外部0中断服务步骤;若否,则μC/OS-II内核切换任务,即返回到所述通信任务执行步骤中的发送允许标志判断步骤;
外部0中断服务步骤,即通信完成信号量发送步骤,即发送通信完成信号量到所述μC/OS-II内核,中断返回,μC/OS-II内核把任务切换到所述的通信任务,即返回到所述通信任务执行步骤中的通信完成信号量判断步骤。
本发明所述的基于μC/OS-II的高速通信方法与传统的基于RTOS的高速通信方法的区别如下,在本发明中:
(1)把发送请求帧数据的功能移到空闲任务,先等待应答帧数据,并设置超时时间,等到μC/OS-II内核切换任务到空闲任务时再发送请求帧数据。这样发送好请求帧数据后,通信接收中断服务子程序,即通信中断服务步骤,马上就能响应接收帧数据,不会造成数据丢失;
(2)通信中断服务步骤为非屏蔽中断步骤,不受μC/OS-II内核管理,从而解决了每次进入通信中断服务步骤时,执行时间过长,丢失数据的问题。
(3)由于在通信中断服务步骤中不能使用μC/OS-II内核提供地服务,即不能调用μC/OS-II内核服务函数发送通信完成信号量。为了解决这个问题,本发明增加了外部0中断服务步骤(可以用系统任何未使用的中断),来“偷换”功能,即在通信中断服务步骤中收到完整应答帧数据后,触发一次“模拟中断”——即执行外部0中断服务步骤(该外部0中断服务步骤受μC/OS-II内核管理),在外部0中断服务步骤中发送通信完成信号量(即收到应答帧数据信号量),这样既解决了通信的响应速度,提高了通信的实时性、可靠性(在通讯波特率为9600到115200bps的范围内都可以实现高速通信),又能得到μC/OS-II内核服务功能,提高了整个基于8051内核的嵌入式应用系统的可靠性。
综上所述,通过本发明所述的方法,在基于8051内核的嵌入式应用系统中,在基于μC/OS-II的RTOS上实现高速通信变得和不基于RTOS的系统一样容易,但由于使用RTOS后使系统功能可扩展性和可维护性变得容易,系统可靠性得到提高,因此反过来也能验证系统的核心部件——微处理器内核的正确性与可靠性(因为多任务实时内核的调度算法、任务切换、时间管理、任务间通信与同步及存储空间的动态分配等功能实现一般已包含所有8051内核要测试的内容)。例如,本方法可以应用在电能计量SOC芯片设计和验证的过程中,该操作系统移植到SOC中的8051处理器中,进行软硬件交互验证,与外设实时的通讯,把运行的结果实时传输出来,增加了验证时的可视化,极大的提高了验证的效率。在该操作系统上开发电能计量的应用,既能方便软件开发,又能节省软件开发时间。
以上实施例对本发明进行了详细说明,本领域中普通技术人员可根据上述说明对本发明做出种种变化例。因而,实施例中的某些细节不应构成对本发明的限定,本发明将以所附权利要求书界定的范围作为本发明的保护范围。