02 2006 档案

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