大坡3D软件开发

关注3D软件技术

用户操作
[即时聊天] [发私信] [加为好友]
蔡军生ID:caimouse
1223196次访问,排名18好友263人,关注者393
C++,3D,VC++软件开发,写技术文章,操作系统开发
caimouse的文章
原创 601 篇
翻译 0 篇
转载 41 篇
评论 931 篇
蔡军生的公告

点击这里给我发消息

MSN: caimouse1976 at sina.com

最近评论
sybilwh:mark
lck_1:记得1年前,学习D3D,有很多资料都是在“大坡”上找到的,呵呵,忠心的谢谢博主...
srbfly:IE出错了,抱歉重复
srbfly:WebView -> WebFrame -> FrameView -> RenderRoot

大家挖掘起始方向不同,也许诸路同归。
楼主请继续。
tunnel115:继续,加油!
文章分类
收藏
相册
3D引擎
第二人生
谷歌浏览器
开发板
历史回忆
常用连接
人生历程
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky

原创 学习ARM开发(22) 收藏

新一篇: 学习ARM开发(23)  | 旧一篇:  学习ARM开发(21)

关闭中断与打开中断

中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西

,但程序突然中断了,又让另外一个程序输出打印内容,这样在打印机上就会乱得不得了,

同时有两份以上的文件交错地打印在一张纸上。像不可剥夺的资源,就一定要关闭中断,让

它占有这个资源。在ARM里,没有像x86那样有清除中断指令CLI。那么在ARM里是怎么样实现

关中断和开中断的呢?下面就来看看ARM的关中断和开中断实现。
///////////////////////////////////////////////////////////////////////////////
//函数名称:   Lock
//函数功能:   关中断函数。
//输入参数:
//输出参数:
//返 回 值:   
//开发人员:   蔡军生
//时    间:   2006/02/13
//修改说明:  
//
///////////////////////////////////////////////////////////////////////////////
void Lock(void)
{
 //
 asm volatile ( "stmdb sp!, {r0}" );
 asm volatile ( "mrs r0, cpsr" );
 asm volatile ( "orr r0,r0,#0xC0" );
 asm volatile ( "msr cpsr_cxsf,r0" );
 asm volatile ( "ldmia sp!,{r0}" );

}
上面这段程序是通过设置CPSR的第6,7位来实现的,因为第6,7位是设置为1时,就不再响应

中断。

///////////////////////////////////////////////////////////////////////////////
//函数名称:   UnLock
//函数功能:   开中断函数。
//输入参数:
//输出参数:
//返 回 值:   
//开发人员:   蔡军生
//时    间:   2006/02/13
//修改说明:  
//
///////////////////////////////////////////////////////////////////////////////
void UnLock(void)
{
 //
 asm volatile ( "stmdb sp!, {r0}" );
 asm volatile ( "mrs r0, cpsr" );
 asm volatile ( "bic r0,r0,#0xC0" );
 asm volatile ( "msr cpsr_cxsf,r0" );
 asm volatile ( "ldmia sp!,{r0}" );
}
上面是重新开中断的命令,同样是设置CPSR的第6,7位,但它的值是0,就可接收中断了。

如果在多个任务之间进行共享数据,一般是需要使用关中断和开中断实现数据同步的,其实

中这种关中断和开中断,就是进入临界区和退出临界区。
如果是像PC机那样有多个CPU的话,关中断并不能防止这种情况。

发表于 @ 2006年02月28日 20:39:00|评论(loading...)|编辑

新一篇: 学习ARM开发(23)  | 旧一篇:  学习ARM开发(21)

评论:没有评论。

发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 蔡军生