一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于微处理器时间片切换编程方法与流程

2023-01-15 05:33:31 来源:中国专利 TAG:


1.本发明涉及mcu微处理器软件编程技术领域,具体为一种基于微处理器时间片切换编程方法。


背景技术:

2.在mcu中,集成了ram和flash,ram和flash容量大小一般偏小,因此这种mcu很少带操作系统。都是按照结构化的编程思想自顶而下,逐步细化的原则。各个模块通过“顺序、选择、循环”的控制结构进行连接,并且只有一个入口、一个出口,一条主线,如果有分支,采用中断的方式。
3.这种结构化的编程方法在mcu中被广泛实用,一般各个模块通过“顺序、选择、循环”的控制结构进行执行。如果要执行的模块或服务过多,某个模块或服务就会产生响应不及时,不能公平的分到mcu的资源。如:在其他模块或服务进行执行时,如果按键被按下,不能及时响应、且被mcu正确的识别按键事件。
4.一般的编程方式是主程序执行,中断方式执行突发事件。如果有多个中断事件发生,mcu系统开销时间多,且中断会有套嵌,这样就需要对中断事件的优先级必须事先定义好,因此迫切的需要一种基于微处理器时间片切换编程方法来解决上述不足之处。


技术实现要素:

5.针对现有技术的不足,本发明提供了一种基于微处理器时间片切换编程方法,该基于微处理器时间片切换编程方法包括以下步骤:
6.步骤一、首先定义一个时间片间隔,可以定义成10ms或1ms;
7.步骤二、根据事件的规律,定义为2ms,10ms对于mcu,响应时间偏慢;1ms切换间隔,对mcu的切换花销太大;
8.步骤三、按照定义好的2ms时间间隔,在mcu中断中实现,在中断中判断每个服务或模块服务时间是否到达,如没到达,将此服务时间减少2ms;
9.步骤四、按照时间片切换原理,判断定义好的时间间隔是否到达,如到达,则执行,定义模块或服务,设置服务时间间隔,编写具体的模块或服务代码。
10.优选的,该编程函数定义了四个事件:本地gpio的轮询控制、按键扫描、lcd刷新以及系统定时复位。
11.优选的,按键按照50ms扫描一次,lcd按照80ms刷新一次,本地gpio按照100ms扫描,系统定时复位检测按照20s检测一次,对响应要求及时的按键,定义的时间间隔最短。
12.优选的,时间片中断处理函数,2ms一个中断,可推广到其他mcu中。
13.优选的,该编程方法适用于stm32f103c8t6微处理器。
14.与现有技术对比,本发明具备以下有益效果:在小型mcu单片机中,提出一种时间片切换的编程方法,公平地、轮流地为每个应用或模块服务,让每个模块或服务在一定时间间隔内都可以得到及时响应,而不用中断嵌套的方法。
具体实施方式
15.下面将结合本发明实施例,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。仅用于示例性说明,不能理解为对本专利的限制,为了更好地说明本发明的具体实施方式,某些部件会有省略、放大或缩小,并不代表实际产品的尺寸,对本领域技术人员来说,中某些公知结构、部件及其说明可能省略是可以理解的,基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
16.在本发明的描述中,还需要说明的是,除非另有明确的规定和限定,术语“设置”、“连接”应做广义理解,例如可以是固定连接,可以是活动连接,也可以是可拆卸连接,或一体地连接,可以是机械连接,也可以是电连接,可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。下面将参考并结合实施例来详细说明本技术。
17.一种基于微处理器时间片切换编程方法,该编程方法通过将串口中断作为一个分支,独立接收数据,每个字节数据中断一次,且主程序作为一个分支,将接收的完整数据包进行判断,对数据包进行解析。
18.该编程方法包括以下步骤:
19.步骤一、对于接收数据方,利用数据包之间的时间间隔,且两个数据包的最短时间间隔为10ms;
20.步骤二、在串口接收到一个字节数据时,启动一个10ms超时定时器,每收到一个串口字节数据时,就启动这个超时定时器,直到没有下一个字节数据,超时生效,这样可以立即告诉主程序,一个完整的数据包接收完毕;
21.步骤三、主程序立即对此数据包进行解析,判断是否是规定的协议包,并进行处理,如果是非法数据,则丢弃。
22.优选的,在mcu串口异步通信方法中,串口进行中断接收数据时,每接收到一字节数据时,启动超时定时器,直到定时器超时,数据包被完整接收,并告知主程序,从而快速对数据包进行响应。
23.在mcu串口通信中,接收数据时,将数据包底层驱动和应用层分开。
24.该编程方法适用于stm32f103c8t6微处理器。
25.需要说明的是,以stm32f103c8t6微处理器为例,软件示意代码如下,可推广到其他mcu中。
26.时间片中断处理函数,2ms一个中断。相当于系统“嘀嗒”,心跳间隔时间。
27./**
28.*@briefthisfunctionhandlessystickhandler,2ms.
29.*@paramnone
30.*@retvalnone
31.*/
32.voidsystick_handler(void)
33.{
34.inti;
35.intvalue;
36.for(i=0;i《event_timer_max;i )
37.{
38.if(timer_is_run(i))
39.{
40.value=get_event_timer_value(i);
41.if(value》0)
42.{
43.set_event_timer_value(i,(value-1));
44.}
45.}
46.}
47.if(g_cur_time_2ms!=0)
48.{
49.g_cur_time_2ms
‑‑

50.}
51.for(i=0;i《delay_timer_max;i )
52.{
53.if(delay_timer_is_run(i))
54.{
55.value=get_delay_timer_value(i);
56.if(value》0)
57.{
58.set_delay_timer_value(i,(value-1));
59.}
60.else
61.{
62.stop_delay_timer(i);
63.set_delay_timer_flag(i,1);
64.}
65.}
66.}
67.}
68.主框架函数方法:
69.voidtimer_handle(void)
70.{
71.inti;
72.pf_timer_eventpfun;
73.for(i=0;i《event_timer_max;i )
74.{
75.if(t_event_timer[i].run==0x00)
[0076]
{
[0077]
continue;
[0078]
}
[0079]
if(t_event_timer[i].timeout==0)
[0080]
{
[0081]
if(t_event_timer[i].count《0)//无限次数的
[0082]
{
[0083]
pfun=t_event_timer[i].event;
[0084]
pfun();
[0085]
t_event_timer[i].timeout=t_event_timer[i].timeout_backup;
[0086]
}
[0087]
else//有限次数的情况
[0088]
{
[0089]
if(t_event_timer[i].count》0)
[0090]
{
[0091]
t_event_timer[i].count
‑‑

[0092]
pfun=t_event_timer[i].event;
[0093]
pfun();
[0094]
if(t_event_timer[i].count==0)
[0095]
{
[0096]
stop_timer(i);
[0097]
}
[0098]
}
[0099]
}
[0100]
}
[0101]
}
[0102]
}
[0103]
通过对每个事件进行扫描,判断时间间隔是否到达,如果到达,则执行相应的事件。
[0104]
通过以下函数方式进行设置:
[0105]
voidset_timer(unsignedcharindex,pf_timer_eventevent,intinterva l,intcallback_timers)
[0106]
{
[0107]
t_event_timer[index].timeout=interval;
[0108]
t_event_timer[index].timeout_backup=interval;
[0109]
t_event_timer[index].count=callback_timers;
[0110]
t_event_timer[index].event=event;
[0111]
t_event_timer[index].run=1;
[0112]
}
[0113]
具体事件举例如下,常见的有:按键,lcd显示,输入输出gpio控制和检测
[0114][0115][0116]
上述函数定义了四个事件:1.本地gpio的轮询控制,2.按键扫描,3.lcd刷新,4.系统定时复位功能。
[0117]
按键按照50ms扫描一次,lcd按照80ms刷新一次,本地gpio按照100ms扫描,系统定时复位检测按照20s检测一次。对响应要求及时的按键,我们定义的时间间隔最短。
[0118]
如下是举例具体事件函数:
[0119]
按键扫描
[0120]
[0121]
[0122]
[0123][0124]
系统定时复位事件
[0125]
[0126]
[0127]
[0128][0129]
本说明中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
[0130]
所需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
[0131]
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献