烽火社区

标题: 实现一个最简单的嵌入式操作系统(二) [打印本页]

作者: chengm_2001    时间: 2006-1-3 04:22 AM
hao                                                                                                                                                                       
作者: cxjtag    时间: 2006-4-6 12:51 PM
好东西                                                                                                                                                                       
作者: xbtjys    时间: 2006-4-26 11:47 AM
好帖,顶!                                                                                                                                                                       
作者: endygao    时间: 2006-5-26 10:06 AM
hao                                                                                                                                                                       
作者: lihong0731    时间: 2006-7-6 02:50 AM
hao                                                                                                                                                                       
作者: 清泉诤友    时间: 2015-5-16 01:29 AM
进来好好学习一下了。                                                                                                                                                                       
作者: 红海    时间: 2015-6-15 03:46 AM
BOOTLOADER是 什么东西                                                                                                                                                                       
作者: endygao    时间: 2015-6-22 08:19 AM
好文章啊!


DSP+CPLD+单片机学习板 特价:480元
多功能红外单片机开发板 特价:180元
TMS320vc5502最小系统板(DSP5502开发板) 290元
S3C44B0开发板 特价:380元
USB2.0增强型DSP仿真器 特价:780元

QQ:342665334
Email:wen_zl@163.com
淘宝网店:http://shop33496317.taobao.com/
中国DSP网: http://www.chinadsp.cn/ (现有大量空板免费赠送活动,呵)
作者: huli184    时间: 2015-7-14 08:06 AM
BOOTLOADER是 什么东西                                                                                                                                                                       
作者: keil_justin    时间: 2015-12-22 12:00 PM
标题: 实现一个最简单的嵌入式操作系统(二)

如何实现BOOTLOADER

1.之所以要实现一个专用的BOOTLOADER,一是为了更好的移植和自身的升级,二是为了方便操作系统的调试,当然,你完全可以将这部分所要实现的与操作系统相关的功能集成到操作系统中去
2.确定一个简单的BOOTLOADER所要完成的功能:我们这里只需要完成两个主要功能,一是将操作系统加载到内存中去运行,二是将自己和操作系统内核固化到ROM存储区(这里的ROM可以是很多设备,比如嵌入式芯片中的FLASH,PC机上的软盘,U盘,硬盘等)

3.BOOTLOADER的编写:
第一步:要进行相关硬件的初使化,比如在at91rm9200这块嵌入式板子上(以后都使用这一款芯片,主要是我对这款芯片比较熟悉,嘿嘿),大概要做接下来的几方面的工作,其一:将CPU模式切换进系统模式,关闭系统中断,关闭看门狗,根据具体情况进行内存区域映射,初始化内存控制区,包括所使用的内存条的相关参数,刷新频率等,其二:设定系统运行频率,包括使用外部晶振,设置
CPU频率,设置总线频率,设置外部设备所采用的频率等。其三:设置系统中断相关,包括定时器中断,是否使用FIQ中断,外部中断等,还有就是中断优先级设置,这里只实现两个优先级,只有时钟中断高一级,其它都一样,而中断向量初始化时都将这些中断向量指向0x18处,并关闭这里的所有中断,如果板子还接有诸如FLASH设备的话,还需要设置诸如FLASH相关操制寄存器,其四:需要关闭CACHE,到此为止,芯片相关内容就完成初始化了

第二步:中断向量表,ARM的中断与PC机芯片的中断向量表有一点差异,嵌入式设备为了简单,当发生中断时,由CPU直接跳入由0x0开始的一部分区域(ARM芯片自身决定了它中断时就会跳入0x0开始的一片区域内,具体跳到哪个地址是由中断的模式决定的,一般用到的就是复位中断,FIQ,IRQ中断,SWI中断,指令异常中断,数据异常中断,预取指令异常中断),而当CPU进入相应的由0x0开始的向量表中时,这就需要用户自己编程接管中断处理程序了,这就是需要用户自己编写中断向量表,中断向量表里存放的就是一些跳转指令,比如当CPU发生一个IRQ中断时,就会自动跳入到0x18处,这里就是用户自己编写的一个跳转指令,假如用户在此编写了一条跳转到0x20010000处的指令,那么这个地址就是一个总的IRQ中断处理入口,一个CPU可能有多个IRQ中断,在这个总的入口处如何区分不同的中断呢?就由用户编程来决定了,具体实现请参见以后相关部分,中断向量表的一般用一个vector.S文件,当然,如何命名那是你自己的喜爱,但有一点需要声明,那就是在链接时一定要将它定位在0x0处


第三步:设置堆栈,一般使用三个栈,一个是IRQ栈,一个是系统模式下的栈(系统模式下和用户模式共享寄存器和内存空间,这主要是为了简单),设置栈的目的主要是为了进行函数调用和局部变量的存放,不可能全用汇编,也不可能不用局部变量


第四步:将自己以后的代码段和数据段全部拷贝至内存,并将BSS段清零


第五步:进行串口的初始化(主要是为了与用户交互,进行与PC机的文件传输),FLASH的初始化这里在FLASH中存放BOOT和内核),FLASH驱动的编写(这里的驱动有别于平常所说的驱动,由于FLASH不像SDRAM,只要设定了相关控制器之后就可以直接读写指定地址的数据,对FLASH的写操作是一块一块数据进行,而不是一个字节一个字节地写,具体请查阅相关资料)
第六步:等待一定的秒数,来接收用户进行输入,如果在指定的秒数内用户未输入任何字符,那么
BOOT就开始在FLASH中的指定位置(可以由自己指定,这么做主要是为了简单)读取内核的所有数据到内存中(具体是内存中的什么位置由自己指定,也可以采用LINUX之类的做法,就是在内存的起始位置加上一个0x8000处),将跳转到内核的第一条代码处);如果用户在指定的秒数内键入了字符(这主要是为了方便开发,如果开发定型之后完全可以不要这段代码),那么就在串口与用户进行交互,接受用户在串口输入的命令,比如用户要求下载文件在FLASH中指定的位置等,具体内容可参考U-BOOT之类的开源项目到这里为止,BOOT部分已完成,这个BOOT非常简单,仅仅只是将PC机上传下来的文件固化到FLASH中,然后再将FLASH中的操作系统内核部分加载进内存中,并将CPU的控制权交给操作系统,下一页开始讲解如何写一个最简单的操作系统,呵,到现在才开始切入正题呢!!!!


作者: ken1212    时间: 2015-12-23 12:38 PM
大哥,十分抱歉,我误操作,把你发的  实现一个最简单的嵌入式操作系统(一) 删除了,麻烦你再发一次(一),对不起对不起                                                                                                                                                                       
作者: huangbin8396    时间: 2015-12-24 10:51 AM
呵呵,我说怎么找了半天也没有找到(一),挺不错的文章,呵呵                                                                                                                                                                       
作者: netfarming    时间: 2015-12-27 01:06 AM
JTAG板级测试系统的主要应用

基础测试

基础测试是指扫描链路自测试,由于它是利用BS器件进入CAPTURE-IR状态时会自动装入CAPTURE信号而实现扫描链自测试的目的,所以又称为CAPTURE测试。

基础测试是进行JTAG其他任何测试加载任务之前首先进行的测试操作,以确保JTAG链能正常工作。
Ø 器件标志码IDCODE测试

IDCODE测试,也称为器件标志码测试,或器件型号测试,指令扫描送入IDCODE指令,然后通过数据扫描IDCODE寄存器中的IDCODE标志码,验证器件是否错装,器件的型号、版本号和生产厂商是否正确。

器件标志码存放在器件标准寄存器中,器件标志寄存器是包含在集成电路IC内部的一个可选寄存器,它由并行输入与串行输出的32位移位寄存器组成,而不需要并行输出锁存器。象Bybass寄存器一样,当器件标准寄存器在使用时,芯片IC)正常操作能继续进行。
Ø USERCODE测试

USERCODE测试,也称为用户代码测试,可编程器件提供一个32位的寄存器可以用来存放用户的任意信息。指令扫描送入USERCODE指令,然后通过数据扫描USERCODE寄存器中的标志代码,验证存放信息是否与用户信息一致。这些信息可以是软件的版本号、加密数据等。
Ø 互联测试

互连测试主要是指对电路板上器件之间互连线的测试,主要检测电路板级的开路、短路或呆滞型等故障。互联测试是引进边界扫描测试技术的一个主要原因,因此在IEEE1149.1标准中,互连测试指令(EXTEST)是一条强制性指令,所有的BS器件都支持互连测试。

互连测试可以检测电路板上的开路故障,并能精确定位到具体的引脚;可以检测电路板上的桥接短路广州,并能精确定位到桥接的具体网络和引脚;可以检测呆滞型故障,并能精确定位到具体的引脚;检测其余不知名故障(测试响应与期望响应不一致,但不属于以上三类故障)。
Ø Cluster测试

Cluster测试的问题是由混合技术电路板引起的。目前,虽然BS器件越来越多,但是非BS器件也仍然大量存在;而且在复杂电路设计中,VLSI和ASIC(专用集成电路)虽然能够完成电路的许多功能,但并不是所有的逻辑功能都可以集成,相当多的功能仍需要采用分离器件或通用集成电路实现,而它们很少支持边界扫描。由边界扫描器件和非边界扫描器件组装的混合技术电路板是常见的情形。

在一个电路板上,当BS器件和非BS器件混装的时候,非BS器件就不能直接使用边界扫描的方法进行测试。这时如果非BS器件的周围存在BS器件,那么仍然可能通过BS器件对非BS器件进行测试。被BS器件包围的非BS器件可以不止一个,我们将有若干非BS器件组成的逻辑簇称为一个Cluster,通过BS器件对Cluster进行的测试就称作Cluster测试。

对于JTAG.NET中的Cluster测试提供了两种测试方法,用于针对不同时序电路、组合电路的功能测试。对于存在时序电路的信号,可以使用业界标准的TCL脚本语言来完成相关引脚的控制和采样。从而完成相关的时序电路的设计。下面可以大概看一下对于时钟采样在JTAG.NET系统中的实现方案:

jtag::sample clear //清除所有采样引脚的定义

jtag::def clear //清楚所有参数定义

jtag::def pin p1 U26 "46" //定义U26芯片的第46引脚为P1采样引脚

jtag::add in pin p1 //定义P1引脚为输入引脚

jtag::sample init //初始化,并准备采样

for {set i 0} {$i < 1000} {incr i} { //一千次

jtag::sample frame //JTAG采样

puts [jtag::get pin p1] //输出P1引脚采样的值。

}

对于另外一种电路设计,通常在JTAG.net中同样也可以通过脚本的编写方式来完成测试。但为了简化这部分的编程工作量,提高板级测试设计的效率JTAG.NET提供了自学习的方法来完成这部分的脚本生成。用户仅需要在JTAG.NET中输入确定的输入引脚、输出引脚等信息,并确定输出引脚的学习算法(走部、自定义、遍历)。

Ø 网络覆盖率分析

在JTAG测试仪中,可以对所测试的板卡的网络进行分析。可以大概分成七大类网络:其中包含:电源/地网络,TAP口网络,基础互连测试网络、合并可测试网络、扩展可测试网络、单点网络、不可测试网络。
作者: 红海    时间: 2015-12-27 02:17 AM
very good !                                                                                                                                                                       
作者: betterbill    时间: 2015-12-27 04:45 AM
我会努力学习的。                                                                                                                                                                       
作者: endygao    时间: 2015-12-27 07:23 AM
不错                                                                                                                                                                       
作者: betterbill    时间: 2015-12-27 08:34 AM
不错!!!                                                                                                                                                                       
作者: cxjtag    时间: 2015-12-27 10:57 AM
多谢!                                                                                                                                                                       
作者: xbtjys    时间: 2015-12-27 11:55 AM
re                                                                                                                                                                       
作者: ken1212    时间: 2015-12-27 01:08 PM
very good! It is a great help. Thank you!!!!!!!!!!!!!                                                                                                                                                                       
作者: younew    时间: 2015-12-27 01:46 PM
长知识                                                                                                                                                                       
作者: 红海    时间: 2015-12-27 02:30 PM
继续3                                                                                                                                                                       
作者: 清泉诤友    时间: 2015-12-27 03:44 PM
怎么能删斑竹的合理贴子呢                                                                                                                                                                       
作者: cxjtag    时间: 2015-12-27 05:37 PM
很好                                                                                                                                                                       
作者: xbtjys    时间: 2015-12-27 06:58 PM
呵呵  我水平太次了 看不懂                                                                                                                                                                       
作者: huangbin8396    时间: 2015-12-27 10:05 PM
顶了.                                                                                                                                                                       
作者: cougar88    时间: 2015-12-27 11:13 PM
标记下                                                                                                                                                                       
作者: 122705363    时间: 2015-12-29 04:30 AM
hoho                                                                                                                                                                       




欢迎光临 烽火社区 (https://bbs.cnecport.com/) Powered by Discuz! X3.2