proteus自带uclinux的改造与扩展源代码
- 格式:doc
- 大小:523.50 KB
- 文档页数:5
arduino 用proteus仿真基础知识和实例-回复Arduino用Proteus仿真基础知识和实例Arduino是一款非常流行的开源电子原型平台,而Proteus则是一款功能强大的电子电路仿真软件。
结合二者可以实现Arduino电路的仿真和调试,为电路设计师和Arduino爱好者提供了极大的便利。
本文将一步一步详细介绍Arduino用Proteus仿真的基础知识和实例。
第一部分:Proteus仿真基础知识在开始之前,我们需要了解一些Proteus仿真的基础知识。
1. Proteus简介:Proteus是一款由Labcenter Electronics公司开发的集电子电路设计、仿真、PCB设计于一体的综合性软件。
2. Proteus版本:Proteus有两个主要版本,分别是Professional和Lite。
Professional版拥有更多高级功能,而Lite版则相对简化但仍然可以满足一般需求。
3. 库文件:Proteus中包含了大量的元件库,我们可以在其中找到Arduino相关的元件以进行仿真。
4. Arduino模拟器:Proteus还提供了一个Arduino模拟器,可以模拟运行Arduino代码,观察器件的实际工作效果。
了解这些基本概念后,我们可以开始进行Arduino在Proteus中的仿真实例。
第二部分:Arduino在Proteus中的仿真实例在这里,我们将以一个简单的LED闪烁的例子来介绍Arduino在Proteus 中的仿真。
实例一:LED闪烁材料准备:- Arduino开发板- 220欧姆电阻- 5mm LED- 连接线步骤一:绘制电路图1. 打开Proteus,选择Arduino UNO开发板并放置到绘图区域。
2. 从库文件中选择一个LED并放置到UNO开发板上。
再选择一个220欧姆电阻并将其连接到LED的长脚上,另一端连接到UNO开发板上的GND端口。
3. 连接UNO开发板的数字引脚13与LED的短脚。
uClinux-dist源码包目录分析许多初学的朋友在看到uClinux-dist目录下的内容觉得很烦杂,对编译过程也觉得很疑惑,这里以我的理解作一个简单的介绍,希望对初学者有所帮助,也希望高手指正。
uClinux-dist源代码包的目录如下所示:uClinux-dist可以生成内核和根文件系统,有三个源代码目录需要编译,linux-2.4.x是放内核源代码的目录,lib目录是放库文件的目录,user目录是生成rootfs所需要的文件。
Config目录是存放一些配置脚本,bin目录存放编译时所需要的可执行文件,tools目录存放一些工具和脚本,uClibc也是存放库文件的目录,vendors分为所有支持的CPU厂商目录下面会有,内核的配置文件和romfs所需要的文件。
比如要编译44B0,就会在vendors/Samsung/44B0下专门针对44b0这款cpu的配置文件。
在uClinux-dist目录下有的Makefile文件是总文件,当运行make lib_only时,会编译lib 目录,在lib目录下又有相应的目录,每个目录下也有自己的Makefile文件,这样就会根据配置编译不同目录下的文件,一般调用格式为make –C 目录名,这样就会调用目录下的Makefile文件。
最终编译每个源代码文件,.c或.s.下面举user目录下的Makefile的片段例子说明,dir_$(CONFIG_USER_ZEBRA_RIPD_RIPD) += zebradir_$(CONFIG_USER_ZEBRA_ZEBRA_ZEBRA) += zebradir_y += gamesall:for i in $(dir_y) ; do make -C $$i || exit $? ; doneromfs:for i in $(dir_y) ; do make -C $$i romfs || exit $? ; doneclean:-for i in $(dir_y) $(dir_n) $(dir_) ; do \[ ! -d $$i ] || make -C $$i clean; \done其中dir_$(CONFIG_USER_ZEBRA_RIPD_RIPD)的值可能是dir_yCONFIG_USER_ZEBRA_RIPD_RIPD值只可能是y或n,若设置了相应的变量,就会有相应的文件名加入dir_y的变量中,for i in $(dir_y) ; do make -C $$i,相应的文件就会被编译。
如何利用p r o t e u s来仿真e m u8086下编写的E X E程序如何利用proteus来仿真emu8086下编写的EXE程序1.安装proteus和emu8086,都采用默认安装方式2.打开proteus,在其中设置emu8086编译器1)打开“源代码”菜单中的“设定代码生成工具”弹出下面所示对话框2)选中上面所示对话框中左下角的“新建”按钮,然后打开c盘下emu8086文件夹,选中emu8086.exe。
3)按照下图所示,填写源程序扩展名为“ASM”目标代码扩“EXE”,命令行“%1”,然后点击确定。
2.使用emu8086,生成可执行文件1)打开emu8086,会出现下图所示,在其中选择NEW2)单击new按钮后会弹出如下所示对话框,选择empty workspace3)再出现的空白编辑区部分敲入代码如:实验二中给的EX2_1.ASM4)利用FILE菜单中的save as对源程序进行存盘,利用assembler菜单下并编译,注意文件名和路径,请注意生成的可执行文件EXE一定要和仿真电路图DSN在同一文件夹下。
5)如果编译时提示有错误,则修改反色部分,再重新编译,直至没有错误编译成功生成可执行EXE文件为止。
3.打开仿真电路图,设置仿真运行环境。
1)以EX2_1.DSN为例,双击电路图中U1:8086单元2)弹出如下图所示对话框3)双击第三行 program file 右侧打开按钮,选择同文件夹下EX2_1.EXE,其他参数如上图设置。
4)下面如下图所示,设置内部存储器的容量Internal Memory Size 为0x1f0h,(注:内部存储器的容量还可以加大,根据情况设置即可,但因为本实验中用得到了外部扩展存储器,所以注意不能超过4000H)又因为本程序中有INT 3;断点中断,故要设置断点Stop on int 3 YES4.以上都做完,即可仿真执行程序并调试了,并可观察结果。
组名U5G参赛编号A358文档编号DOC-2日期2007-1-26作者王志勇uCLinux操作系统开发文档一.uClinux操作系统简介在本设计中采用的STR 710处理器不带有MMU,故操作系统选用uClinux.uClinux, Micro-Control-Linux,即"针对微控制领域而设计的Linux系统"。
1.uClinux的内存管理对于uClinux来说,其设计针对没有MMU的处理器,即uClinux不能使用处理器的虚拟内存管理技术。
uClinux仍然采用存储器的分页管理,系统在启动时把实际存储器进行分页。
在加载应用程序时程序分页加载。
但是由于没有MMU管理,所以实际上uClinux采用实存储器管理策略(real memeory management)。
这一点影响了系统工作的很多方面。
uClinux系统对于内存的访问是直接的,(它对地址的访问不需要经过MMU,而是直接送到地址线上输出),所有程序中访问的地址都是实际的物理地址。
操作系统对内存空间没有保护(这实际上是很多嵌入式系统的特点),各个进程实际上共享一个运行空间(没有独立的地址转换表)。
2.uClinux的内核加载方式uClinux的内核有两种可选的运行方式:可以在flash上直接运行,也可以加载到内存中运行。
这种做法可以减少内存需要。
Flash运行方式:把内核的可执行映象烧写到flash上,系统启动时从flash的某个地址开始逐句执行。
这种方法实际上是很多嵌入式系统采用的方法。
内核加载方式:把内核的压缩文件存放在flash上,系统启动时读取压缩文件在内存里解压,然后开始执行,这种方式相对复杂一些,但是运行速度可能更快(ram的存取速率要比flash高)。
3.uClinux的根(root)文件系统uClinux系统采用romfs文件系统,这种文件系统相对于一般的ext2文件系统要求更少的空间。
空间的节约来自于两个方面,首先内核支持romfs文件系统比支持ext2文件系统需要更少的代码,其次romfs文件系统相对简单,在建立文件系统超级块(superblock)需要更少的存储空间。
常用快捷键:Proteus的按键和菜单很多,下面只是介绍一些常用的不好找到的快捷键和菜单F5:重定位中心F8:全部显示当前工作区全部显示F6:放大以鼠标为中心放大F7:缩小以鼠标为中心缩小G:栅格开关栅格网格U:撤销键R:刷新Ctrl+M:元件翻转Ctrl+画线:可以划曲线数字键盘+-:旋转右键双击:删除System -> set sheet sizes 调整画布的大小常用芯片:下面是课程实验中可能会用到的器件,知道名字后可以直接到库里搜索。
8086 处理器74LS373 锁存器74LS245 数据缓冲74LS138 三八译码器62648Kx8 RAM8255A IO扩展ADC0809 8位AD转换器BUTTON 按键DIPSW 拨码开关7SEG 数码管LED_RED 发光二极管Switch 开关PULLUP 上拉电阻逻辑器件AND OR NOT XOR NAND NOR仿真注意事项和技巧:1.总线的画法: 左边有一个蓝色的BUSES MODE按钮,点了之后,先画出来,线尾以双击结束。
然后将你需要画的线都连到这个总线上。
点WIRE LABEL model,单击每根线,写入名称,名称相同的线表示连接在了一起。
2.画总线的单根线时,按住Ctrl可以画出折线,画完第一根后,此后双击要连接的芯片引脚可以自动重复上一次的连线轨迹。
3.8086芯片的设置,internal memory size 初始值为0,这样仿真会提示内存不足,设置为0x1000就可以了,要是程序比较大,此值可以调整。
4.没有仿真库的元件是不能仿真的,如果电路中有这样的原件,可以在设置中勾选exclude from simulation,把此元件在仿真中排除。
5.8086内部是没有存储空间的,为了仿真需要有部分地址是不可以接外设使用的,试验中大家尽量用最高的四位地址线参与译码,这样肯定是没有问题的。
软件的使用说到底很简单,大家把所有的按钮和菜单都点一遍,自己搭个小电路,应该就掌握得差不多了。
Proteus⼊门教程完整版Proteus ⼊门教程本⽂将简单介绍⼀下Proteus 的使⽤。
在这⾥,我⽤的Proteus 版本是Proteus 6.7 sp3 Professional 。
⼀、Proteus 6 Professional 界⾯简介安装完Proteus 后,运⾏ISIS 6 Professional ,会出现以下窗⼝界⾯:为了⽅便介绍,我分别对窗⼝内各部分进⾏中⽂说明(见上图) 。
下⾯简单介绍各部分的功能:1.原理图编辑窗⼝( The Editing Window ):顾名思义,它是⽤来绘制原理图的。
蓝⾊⽅框内为可编辑区,元件要放到它⾥⾯。
注意,这个窗⼝是没有滚动条的,你可⽤预览窗⼝来改变原理图的可视范围。
2.预览窗⼝( The Overview Window ):它可显⽰两个内容,⼀个是:当你在元件列表中选择⼀个元件时,它会显⽰该元件的预览图;另⼀个是,当你的⿏标焦点落在原理图编辑窗⼝时(即放置元件到原理图编辑窗⼝后或在原理图编辑窗⼝中点击⿏标后) ,它会显⽰整张原理图的缩略图,并会显⽰⼀个绿⾊的⽅框,绿⾊的⽅框⾥⾯的内容就是当前原理图窗⼝中显⽰的内容,因此,你可⽤⿏标在它上⾯点击来改变绿⾊的⽅框的位置,从⽽改变原理图的可视范围。
3.模型选择⼯具栏( Mode Selector Toolbar ):主要模型( Main Modes ):1* 选择元件( components)(默认选择的)2* 放置连接点3* 放置标签(⽤总线时会⽤到)4* 放置⽂本5* ⽤于绘制总线6* ⽤于放置⼦电路7* ⽤于即时编辑元件参数 (先单击该图标再单击要修改的元件)配件( Gadgets):1* 终端接⼝( terminals ):有VCC 、地、输出、输⼊等接⼝2* 器件引脚:⽤于绘制各种引脚3* 仿真图表( graph):⽤于各种分析,如Noise Analysis4* 录⾳机5* 信号发⽣器( generators)6* 电压探针:使⽤仿真图表时要⽤到7* 电流探针:使⽤仿真图表时要⽤到8* 虚拟仪表:有⽰波器等2D 图形( 2D Graphics ):1* 画各种直线2* 画各种⽅框3* 画各种圆4* 画各种圆弧5* 画各种多边形6* 画各种⽂本8* 画原点等4.元件列表( The Object Selector ):⽤于挑选元件( components)、终端接⼝( terminals)、信号发⽣器 ( generators )、仿真图表( graph )等。
Harbin Institute of Technology专业综合实践课程(论文)设计题目:Proteus V8的特殊调试与诊断功能的开发摘要—本文主要以Proteus8.0版本的功能及使用为基础,主要介绍工程的创建、编译器的配置、基本调试等一些基本问题,并探讨Proteus8.0的一些新特点新功能,最后与Proteus7.0做出对比得出结论。
关键词—Proteus8.0,Proteus7.0;1.简介Proteus软件是英国Lab Center Electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前比较好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
同时,Proteus还是一个巨大的教学资源,可以用于模拟电路与数字电路的教学实验、单片机与嵌入式系统的教学实验、微控制器系统的综合实验、创新实验与毕业设计等。
Proteus可以与广大学生相结合,打造成一个口袋实验室。
在Proteus家族里,Proteus8.0是目前较新的版本(最新的是8.1版),Proteus8.0版本的出现具有重要的意义,它也与其他版本有着很明显的不同,再此进行详细介绍Proteus8.0版本的使用过程。
2.使用过程2.1创建新工程假定此时已安装了Proteus8.0版本。
选择并点开Proteus8Professional,首先需要新建一个工程,由于本教程是与PCB绘制教程相关联的,所以此时的工程是一个带有原理图、PCB和源代码编译部分的工程。
点击File,如图,选择New Project,将出现新建工程向导部分,在此可以设置文件名(Name)和保存路径(Path)点击Next,在下一页的顶部选项卡中,选择“从选中的模板中创建原理图”(Create aSchematic from the selected template),在此可选择默认(DFAULT)。
向嵌入式平台移植软件的相关技术字节顺序大端:高字节数据存放在低地址处,低字节数据存放在高地址处;小端:低字节数据存放在低地址处,高字节数据存放在高地址处。
字节对齐Makefile中增加了编译参数- -pack – struct;增加组包函数和拆包函数。
其解决字节对齐的原理是,通过在发数据包处增加组包函数,使数据按CPU要求组织放在指定地址处,组成包发给下层,而后在收数据包处增加拆包函数,是收到的内存中的数据再按要求还原。
位段采用条件编译方式,针对不同的平台定义顺序不同的位段;也可在组包函数和拆包函数中加上位段处理。
代码优化1,提高代码执行效率,switch-case语句吧最可能发生的情况放在第一;使用全局变量比向函数传递参数更有效率。
减少了函数调用前参数入栈及函数完成后参数出栈的操作;2,尽可能的减小代码尺寸,并避免试用标准库例程;3,避免内存泄露。
Make文件中的内容Make文件包含五方面的内容:具体规则、隐含规则、变量定义、指令和注释。
具体规则例举了目标的依赖,可能同时提供了创建或更新该目标的命令。
隐含规则目标是由同名文件创建或更新,同时提供了创建更新该目标的命令。
变量定义定义变量占一独立行。
指令1,读其他make文件;2,根据变量值判定是否使用或忽略make文件的部分内容;3,定义多行变量,即定义变量值可以包含多行字符的变量;以“#”开始的行是注释行,在处理时被make忽略。
若注释行尾是“\”,则表示下一行继续问注释行。
除在define指令内部外,注释可以出现在make文件任何位置,甚至于命令内部(这里shell决定什么是注释内容)。
Make文件命名(P27)在标准名字make文件中,make按GNUmakefile、makefile、Makefile顺序寻找make 文件。
Make文件一般命名为“makefile”或“Makefile”。
若不存在,则不使用任何make文件。
在非标准名字Make文件中,使用“-f name”或“- - file=name”指定make文件。
proteus自带uclinux的改造与扩展源代码
自己写的源代码供大家学习:这里要感谢bqtanterry网友提
供的proteus实例
http://www.protues.com.cn/forum.php?mod=viewthread&tid=2455
#include
#define com 0u
#define dat 1u
#define rs (1u<<0)
#define rw (1u<<1)
#define e (1u<<2)
#define addr 0x80000020u
unsigned char tab[]="I love ARM!";
unsigned char tbl[]="Fuck! I do!";
void delay(int z)
{
int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write(unsigned char f,unsigned char input)
{
unsigned int tmp=addr;
*((volatile unsigned *)(tmp+=f))=input;delay(5);
*((volatile unsigned *)(tmp&=~(rw)))=input;delay(5);
*((volatile unsigned *)tmp)=input;delay(5);
*((volatile unsigned *)(tmp|=e))=input;delay(5);
*((volatile unsigned *)(tmp&=~e))=input;delay(5);
*((volatile unsigned *)(tmp|=rw))=input;
}
void init()
{
write(com,0x38);
write(com,0x0f);
write(com,0x06);
write(com,0x01);
}
int main()
{
int i;
init();
write(com,0x80+0x10);
for(i=0;i<11;i++)
{
write(dat,tab
);
delay(10);
}
write(com,0x80+0x40+0x12);
for(i=0;i<11;i++)
{
write(dat,tbl);
delay(10);
}
for(i=0;i<16;i++)
{
write(com,0x1c);
delay(220);
}
return 0;
}
编译:arm-elf-gcc -o lcd lcd.c -elf2flt
生成romfs镜像:./genromfs -d romfs/ -f romfs.img
再用H-Converter.exe转换成romfs.hex
上图可以看出A0是控制LCD_RS,A1控制LCD_RW,A2
控制LCD_E
这个是关于地址对lcd的控制逻辑图。U68的Q4有效时
ADDR_LCD才能使能,所以有A6A5A4A3=0b0100,即addr
=0x80000020地址使能lcd。