网站首页
IC库存
IC展台
电子资讯
技术资料
PDF文档
我的博客
IC72论坛
ic72 logo
资料首页最新产品 技术参数 电路图 设计应用 解决方案 代理商查询 IC替换 IC厂商 电子辞典
关键字: 技术文章 PDF资料 IC价格 电路图 代理商查询 IC替换 IC厂商 电子辞典

占用式和非占用式程序结构分析

一、什么是占用式程序

一个进程在一个时刻只能处理一个任务。

每个任务是为了完成一个功能,如果这个功能的实现过程是一直占用进程处理资源的话,就称这个任务函数是占用式程序结构。

最常见的占用式程序结构就是延时函数了,比如我最常用的5ms延时函数

void delay5(unsigned char n)

{

unsigned int i;

for(;n>0;n--)

for(i=4700;i>0;i--); //12MHz,1T

}

在完成5ms功能过程中是一直占用调用它的进程处理资源的,在此期间不能进行其它任务。

还有一个很常见的占用式程序——数码管扫描,不过在这里我不举数码管扫描的例子,而举这次在DYS388中使用的8*8彩色点阵屏的扫描程序:

void refresh7()

{

unsigned char r;

for(r=0;r8;r++) p=>

{

//扫描红色

DPw = ~(0x01

DPr = ~vm7r[r];//送入R灯IO接口显示

DELAY7 (light7);//显示时间长度

DPw=0xff;

DPr=0xff;

DPg=0xff;

DPb=0xff;

DELAY7 (32-light7);//灭灯时间长度

//为了简洁,这里把绿色和蓝色的扫描程序省略,它们的结构和红色扫描是一样的

}

}

这个函数是7色模式下的屏幕扫描程序,调用一次此函数会把整个屏幕扫描一遍。

r代表行数,r循环8次代表屏幕的8个行;在每次循环里,先导通对应的行和需点亮的灯,然后延时light7个单位,再关闭所有显示,再延时32-light7个单位。

二、占用式程序的缺点

占用式程序最大的缺点就是执行时间太长,耽误对其它任务的响应。另外就是资源浪费,很多时间浪费在执行中的延时上。

当然,可以在这些占用式程序中嵌入其它代码以及时处理其它任务,但是这样会造成程序结构混乱,嵌入的其它代码还会影响本程序的执行。如果嵌入的代码功能简单还好,如果功能复杂,尤其是当嵌入的代码也是占用式的,就会严重影响程序执行速度。

三、对占用式程序的改造

在此以DYS388的扫描程序为例,对其进行改造。

首先,每次调用就扫描8行,耗时太长,现将其改成每次扫描一行:

void refresh7()

{

static unsigned char r=0;

//扫描红色

DPw = ~(0x01

DPr = ~vm7r[r];//送入R灯IO接口显示

DELAY7 (light7);//显示时间长度

DPw=0xff;

DPr=0xff;

DPg=0xff;

DPb=0xff;

DELAY7 (32-light7);//灭灯时间长度

//为了简洁,这里把绿色和蓝色的扫描程序省略,它们的结构和红色扫描是一样的

r++;

if(r==8)

r=0;

}

用一个静态变量r来记忆行数,这样每次调用此函数只需扫描一行,执行速度是原来的8倍,可以比较快地响应其它任务了。

但是这样还不够,每次扫描都会扫描三种颜色,时间还是有点长,下面再次改造,改为每次只扫描一种颜色:

void refresh7()

{

static unsigned char r=0;

static unsigned char flagrgb=0; //当前需要点亮的颜色,0-R,1-G,2-B

flagrgb++;

if(flagrgb==3) //说明三种颜色都扫描完了

{

flagrgb=0; //从红色开始扫描

r++; //开始扫描下一行

if(r==8) //如果发现行都扫描结束则从第行开始扫描

r=0;

}

switch(flagrgb)

{

case 0: //扫描红色

DPw = ~(0x01

DPr = ~vm7r[r];//送入R灯IO接口显示

DELAY7 (light7);//显示时间长度

DPw=0xff;

DPr=0xff;

DPg=0xff;

DPb=0xff;

DELAY7 (32-light7);//灭灯时间长度

break;

case 1: //扫描绿色

//省略代码

break;

case 2: //扫描蓝色

//省略代码

break;

}

}

改造完成之后,执行时间再次缩短,变成了刚才的1/3。

这下还没完,我们发现每次扫描中都有延时,延时过程中什么也不做,这是极大的浪费,我们需要再此改造,把延时去掉:

热门搜索:CC2544RHBR B30-8000-PCB N060-002 SBB2805-1 01M2251SFC3 TW-E41-T1 2866666 BSV52R 2839570 RBC11A CC2544RHBR TLP76MSG 2866572 BTA12-800TWRG 02T0500JF PS6020 2866349 02T5000JF 8300SB2-LF 01T5001JF PDU1215 BTS410F2E6327 BQ25895MRTWR 2838254 BQ25895MRTWR
COPYRIGHT:(1998-2010) IC72 达普IC芯片交易网
客户服务:service@IC72.com 库存上载:IC72@IC72.com
(北京)联系方式: 在线QQ咨询:点击这里给我发消息 联系电话:010-82614113 传真:010-82614123
京ICP备06008810号-21 京公网安备 11010802032910 号 企业资质