2006年02月
中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西
,但程序突然中断了,又让另外一个程序输出打印内容,这样在打印机上就会乱得不得了,
同时有两份以上的文件交错地打印在一张纸上。像不可剥夺的资源,就一定要关闭中断,让
它占有这个资源。在ARM里,没有像x86那样有清除中断指令CLI。那么在ARM里是怎么样实现
关中断和开中断的呢?
阅读全文>
发表于 @ 2006年02月28日 20:39:00|评论(loading...)|编辑
OS任务切换源程序分析
先要声明任务指针,因为后面需要使用。
//任务指针.
volatile TASK_TCB* volatile g_pCurrentTask = NULL;
volatile TASK_TCB* volatile g_pCurrentTask1 = NULL;
volatile TASK_TCB* volatile g_pCurrentTask2 = NULL;
接着就需要初始化这些任务栈,用下面的代码进行初始化,为了简单,全部使用内存地址操作的方式,当然后面会改成动态地分配内存的方式。
阅读全文>
发表于 @ 2006年02月26日 13:21:00|评论(loading...)|编辑
OS的任务切换
有了前面的Tick中断,那么基本的任务切换条件已经是“万事俱备,只欠东风”了。不过,这个“东风”也是很难搞得懂的,只有不断地通过实践才会找到合适的方法。现在我就需要去找这个东风了,就是解决不同的任务切换的问题。从简单到复杂,这是任何事物的认识过程,也是行之有效的方法。绝对不要一上来就搞一个很复杂的,因为人的理解能力还是有限的。最简单的任务切换,就是我需要实现的:只需要实现两个任务不断地来回切换,就已经说明可行了。那我先把这两个任务设置为最简单的,因此,就把任务的栈定下来,因为每个任务的栈是肯定不同的,所以我选择了固定地设置栈地址。
阅读全文>
发表于 @ 2006年02月25日 19:59:00|评论(loading...)|编辑
使用TICK中断
经过许多天的努力,总算可以使用中断了,但为了让RTOS可以使用定时中断,那么在S3C44B0里有什么样的中断可以实现呢?在S3C44B0里有两种方法可以实现这样中断,一种是通过定时器中断,一种是通RTC的TICK定时中断。由于S3C44B0片内已经有提供给RTOS的中断,就应使用它作为RTOS的中断,这样可以使时间片跟RTC时钟是时间同步。RTOS调度任务是通过设置时间片中断实现的。当时间片到达时,就向CPU发出中断信号,CPU就会把当前任务状态保存下来,然后转到中断进程运行,并且在中断里放着的是进行优先选择运行任务的程序,接着从中断返回时就可以运行不同的任务了。既然这个中断那么重要,就需要详细地了解TICK中断实现。
阅读全文>
发表于 @ 2006年02月21日 13:26:00|评论(loading...)|编辑
上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因
为S3C44B0还有好几个寄存器是控制中断是否打开的。 这个几个寄存器如下
阅读全文>
发表于 @ 2006年02月18日 11:27:00|评论(loading...)|编辑
因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深
入了解,最好的方法,就是去写程序,然后不断地调试。在这个程序之前,先要深入去了解ARM的中断方式,知
道它有7种工作方式。下面先看初始化的代码是怎么样初始化不同模式栈的。
/* IRQMODE。 */
orr r1,r0,#0x12|0xc0
msr cpsr,r1
ldr sp,=IRQ_MODE_SP_START
这段代码,就是初始化IRQ模式的栈,这样在IRQ中断时就可以使用栈了。
阅读全文>
发表于 @ 2006年02月16日 15:43:00|评论(loading...)|编辑
ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进
入多任务系统工作,并且大大提高了工作效率。采用中断比以往的查询方式占用更少的CPU时间,让
系统提供更好性能。那么中断在S3C44B0中是怎么样的呢?在开发ARM程序中是怎么样进行响应的呢
?这就是我需要学习的东西。
阅读全文>
发表于 @ 2006年02月12日 19:27:00|评论(loading...)|编辑
使用GCC来开发ARM,就一定遇到编译器的问题。比如遇到编译C代码各种警告和错误。像我昨天就遇到了几个警告,那么就来看看这几个警告是什么引导的呢?
警告如下:
armlib/memory.c: 91 warning: cast increases required alignment of target type
这个警告是什么意思呢?从字面上来看,就是类型转换时,引起目标类型的存储方式排列改变。比如从一个char*指针转换为一个int*指针,就出这样的警告。
阅读全文>
发表于 @ 2006年02月09日 13:35:00|评论(loading...)|编辑
由于在LINUX下开发还是比较麻烦,那么在WINDOWS下有没有更加方便简单的开发方法呢?答案是肯定的。当然不是选择ADS这样的开发工具,因为它成本太贵。就算使用盗版,也不会觉得心安理得,那么就要采用其它方案了。目前只有选择GCC的开发工具。经过不断地努力,总找到合适的ARM开发工具。它就是WINARM,采用它来开发,就大提高了工作效率,使写起代码来更加方便,编译更加快速,出错更容易修改,并且比较便宜,又可作为商业使用。
采用GCC编译器后,编译程序发了一个警告,它如下:
init.h 13:29: warning: no newline at end of file
阅读全文>
发表于 @ 2006年02月07日 20:07:00|评论(loading...)|编辑
提供S3C44B0的软件开发包。
有如下特点:
1. 方便,简单。由于采用WINDOWS操作系统开发,变得非常方便和简单。
2. 便宜。由于采用GNU的ARM-ELF工具,免费使用,成本最便宜。
3. 大量代码已经调试好,代码规范,详细的注释。
4. 提供详细技术支持。
阅读全文>
发表于 @ 2006年02月07日 13:01:00|评论(loading...)|编辑
由于网络设计,是采用了16位数据线的方式,还有RTL8019AS采用了9346的存储器,这样的设计都带来了很大的麻烦。因为是全新的东西,没有任何经验,也没有相应的仪器。所以开发这个RTL8019AS的网络驱动,就成为了一个很大的问题。
阅读全文>
发表于 @ 2006年02月05日 12:00:00|评论(loading...)|编辑