智能命令行设计及其在SOPC系统中的应用

发布者:Zhenxiang最新更新时间:2010-08-12 来源: Altera公司关键字:SOPC  智能命令行 手机看文章 扫描二维码
随时随地手机看文章

  命令行是计算机系统中最重要的组件之一。它可以帮助开发人员更方便的控制系统。在调试过程中,可以让开发人员随时变更测试方法。

  FPGA的成本越来越低,FPGA上的嵌入式系统(SOPC)也应用得越来越广泛。但是相对其他成熟的计算机体系,SOPC系统现在还没有命令行。为了更好的推广SOPC应用,笔者开发了一个智能的命令行模块,可以调用系统中的任意函数,降低了开发人员的使用难度。在最小配置时,它只有大约1000行代码,占用14KB存储容量,可以放在完全由FPGA片内资源构成的计算机系统中。它的结构也具有很好的扩展性,开发人员可以结合自己的需求,轻松添加命令,丰富它的特性。

  命令行框架设计

  1 总体设计

  好的命令行要具有扩展性,开发人员能轻松添加自己的命令;也要傻瓜化,简单易于使用。

  为了达到这两个目的,可采用编译器创建的数组作为命令的总索引数据结构。为每条命令创建一个变量,指定它放在一个命令行专用的段中;其中用段“shell_cmd_tab”存放用户主动创建的命令;用段“shell_cmd_tab_auto”存放系统中所有全局函数。创建变量只需调用宏SHELL_CMD_DECL,提供命令名、命令说明和函数名即可。这样就可以实现C语言函数、变量、段、内存区域的自动映射过程。

  命令的数据结构如下。

  typedef struct _ncommand_t {

  const char *name;

  const char *descr;

  shell_st_call cfunc;

  } ncommand_t;

  为了简化命令的创建,定义下面这个宏来创建命令。

  #define SHELL_CMD_DECL(name, usage, func) ncommand_t _shell_cmd_tab_##func _attribute_ ( (section( “.shell_cmd_tab”) ) )={ name, usage, func }; // small memory version

  创建命令的实例如下:SHELL_CMD_DECL(“dump”, “Shows a memory dump”, hexdump);[page]

  2 连接脚本

  在连接脚本里指定段的位置是简化命令行使用流程的关键。GCC使用PROVIDE定义变量。笔者使用PROVIDE定义了各个段的起始地址和结束地址,从而可以在代码中使用段地址查询到所有命令。在编译器使用的连接脚本中添加如下行定义函数表。

  .shell :

  {

  PROVIDE (__ram_shell_start = ABSOLUTE(.));

  . = ALIGN(32 / 8);

  PROVIDE (__ram_shell_cmd_tab_begin = ABSOLUTE(.));

  *(.shell_cmd_tab .shell_cmd_tab.*)

  PROVIDE (__ram_shell_cmd_tab_end = ABSOLUTE(.));

  PROVIDE (__ram_shell_cmd_tab_auto_begin = ABSOLUTE(.));

  *(.shell_cmd_tab_auto .shell_cmd_tab_auto.*)

  PROVIDE (__ram_shell_cmd_tab_auto_end = ABSOLUTE(.));

  *(.shell .shell.*)

  . = ALIGN(32 / 8);

  PROVIDE (__ram_shell_end = ABSOLUTE(.));

  } > ddr_sdram

  3 动态函数表创建

  由工具自动根据系统中的全局函数创建的命令被称为自动命令。自动命令使用户可以在命令行中调用任意普通函数,即使开发人员没有声明这些函数为命令。自动命令也需要一个数组包含系统中所有全局函数的信息,这个表为动态函数表。使用一个脚本根据系统的可执行文件自动生成动态函数表。要先编译软件,生成可执行文件;再调用脚本创建动态函数表;最后再编译出包含动态函数表的可执行文件。

  在脚本中先使用GNU的nm工具从可执行文件导出所有全局符号,再使用grep提取出包括函数名的行,接着使用cut删除函数名前的地址信息,使用sed将字符T替换为创建命令的宏SHELL_CMD_DECL_AUTO,并在行尾添加括号。最后将所有这些信息写入一个C源代码文件,交给编译器编译,就能得到一个动态函数表。

  4 自动命令参数个数

  为了便于开发人员使用,自动命令最好能适应所有函数类型,假设都是unsigned int的函数类型。对于可以成功转化为unsigned int类型整数的参数,将真实的值传递给函数;对于其他参数,则将参数作为一个字符串传递给函数。

  5 字符输入

  命令行从标准输入设备中获取字符。命令行只接受可打印的字符和特定的控制字符。如果收到了回车或者换行字符,代表用户完成了命令输入,就解析命令。解析命令前,去掉多余的空格符(0x20),即不允许有连续的两个或多个空格符存在,命令的最后也不能有空格符。

  6 参数解析

  命令行模块要从用户输入的字符串中解析出命令名和参数。为命令提供与DOS和Linux类似的两个参数,argc和argv。argc表示参数的个数;argv是字符串指针的数组,最多10个字符串。argv[0]是第一个参数,argv[1]是第二个参数,如此类推。

  7 函数解析

  在代码中使用SHELL_CMD_DECL创建了命令列表,使用工具创建了自动命令列表。这两个表实际上都是数据结构ncommand_t的数组,其中有命令名和函数地址的信息。解析函数实际上就是根据在这两个数组中依次比较函数名。如果用户输入的命令名和数组中的命令名一致,就使用对应的函数地址。[page]

  8 命令执行

  得到函数地址后,就可以执行命令对应的函数。对于主动创建的命令,使用argc和argv作为参数。对于自动命令,命令行模块先尝试将原始参数转换无符号整数。如果成功,使用无符号整数作为参数;如果不成功,则将原始参数的地址作为参数,实际上是一个字符串。

  命令设计

  完成总体设计后,就可以逐个添加开发需要的命令了。

  ● 帮助命令用于显示所有命令名及其用法。

  ● IO命令用来访问输入输出设备的寄存器,可以实现对外部设备的控制。

  ● 存储器命令用来显示、修改存储器的值。最基本的包括:dump命令显示指定位置的内存的值;modify命令用来修改指定内存单元的值。

  ● 用户在使用过程中,会使用很多命令。能够查询历史命令、循环执行历史命令将给用户带来很多方便。因此笔者实现了三条命令。history_show用来显示所有已经使用了的命令;history_del用来删除指定的历史命令;history_exec用来执行指定的历史命令。

  优化处理

  Altera提供了简化版的输出函数alt_printf来替代printf,降低了嵌入式系统的开销,笔者在命令行中也支持这个这个函数。命令行的代码中,只调用SHELL_PRINT;在头文件中,根据用户设置,SHELL_PRINT使用标准的printf或者简化的alt_printf。如果使用简化的alt_printf,这个命令行占用的内存小于14KB。

  在SOPC系统中的应用

  Altera为SOPC系统开发提供的集成开发环境NIOS II IDE附带了多个软件实例。在使用这些软件实例时,用户只需要选择模块,完全不用新编代码,非常简单。

  智能命令行模块也可以作为NIOS II IDE的一个实例。先在“nios2edsexamplessoftware”目录下为命令行创建一个子目录shell_standard,再以其他软件实例的template.xml为模板创为命令行建一个template.xml文件,然后复制命令行模块的所有文件到这个目录中。这样,用户在创建工程时,直接选中智能命令行模板,就可以使用智能命令行模块了。

关键字:SOPC  智能命令行 引用地址:智能命令行设计及其在SOPC系统中的应用

上一篇:基于FPGA的快速9/7整形离散小波变换系统
下一篇:基于FPGA的键盘扫描模块的设计与实现

推荐阅读最新更新时间:2024-05-02 21:07

基于SoPC的FPGA在线测试方法
  本文提出了一种基于SoPC的FPGA在线测试方法,是对现有FPGA在线测试方法的一种有效的补充。   1 在线测试数据操作流程   基于SoPC的FPGA在线测试方法的数据操作流程如图1所示。如果用户需要采集FPGA的测试数据并且上传至PC机,则用户首先要将被测试数据写入DMA读从外设,然后系统自动启动DMA控制器,将数据送入Nios II的数据存储器。再由JTAG UART控制器经JTAG接口上传至Nios II IDE(NiosⅡIntegrated Development Environment,Nios II开发环境),Nios II IDE将接收到的数据写入测量数据存储文件,从而完成了FPGA测试数据的上传。如果
[测试测量]
基于<font color='red'>SoPC</font>的FPGA在线测试方法
基于Nios II软核的内河航标监控系统设计
    内河水运是国家综合运输体系和水资源综合利用的重要组成部分,是实现经济社会可持续发展的重要战略资源。航标是内河航道的基础助航设施,传统的航标管理模式落后,标准化程度低,实时性、安全性能差,已无法满足当前日益繁忙的航道运输所提出的高质量安全航行的需求。     Nios II是Altera公司推出的基于RISC技术的软核CPU,作为一种用户可随意配置和构建的32位总线嵌入式系统微处理器软核,它的硬件设计方面用户是可自定制的,具有灵活性和可裁减性等优点。     结合内河航道航标管理的实际情况,介绍了一种新的基于Nios II软核的航标监控系统的设计方案。根据系统的运行结果显示,设计实现了系统预期功能,为监控中心能实时地监测航标的
[嵌入式]
Altium携手苏州大学共建电子设计联合实验室
    2010 年 12 月 24 日,中国北京讯 —全球领先的一体化电子产品开发解决方案提供商Altium日前宣布与苏州大学合作共建电子设计联合实验室,通过开展电子电路设计、FPGA数字电路设计及SoPC嵌入式系统设计领域相关的教学合作,进一步提升江苏省及周边地区电子设计人才的综合素养。长久以来,Altium一直坚持深耕教育领域,通过不断加强与大专院校的合作,支持中国高校电子设计人才的培养,从而为中国电子设计行业的发展贡献力量。       苏州大学路建美副校长表示:“江苏省及周边省市是中国电子技术应用最发达的区域之一。苏州大学作为国家‘211工程’重点建设高校和江苏省属重点综合性大学,在电子设计人才培养和教学投资上一
[嵌入式]
关于可编程系统级芯片(SoPC)应用设计的工具要求
    对可编程系统级芯片(SoPC)的开发而言,仅仅依靠可编程器件(PLD)在规模和速度方面的进步,依靠使用方便的嵌入式处理器内核,以及依靠其他的IP内核本身是不够的。通过解决系统级的复杂问题,使 PLD 技术在产品面市时间方面带来好处,需要一种清晰的系统层次的构造方法。 过去, PLD的用户喜爱MAX+PLUS II的集成化特点(一个完全集成的设计实体,包括设计输入、综合、仿真、布局布线和时序分析),今天,同样还是那些用户,却要求最佳的综合工具、最佳的仿真工具和最佳的时序分析工具。PLD布局布线工具必须以某种方式满足这些不断变化的要求,这种方式使得整个设计方法在方向上更加以专用集成电路(ASIC)为中心。如果这种新的P
[嵌入式]
单片DSP处理器功能系统的SOPC技术设计
  结合Altera公司推出的Nios II 嵌入式 软核处理器,提出一种具有常规DSP处理器功能的NiosII系统SOPC解决方案;利用NiosII可自定叉指令的特点。   通过Matlab和DSP Builder或直接用VHDL设计并生成复数乘法器、整数乘法器和浮点乘法器等硬件模块,将它们定制为相应的指令,从而将软件的灵活性和硬件的高速性结合起来,较好地解决了传统DSP处理器所面临的速度问题、硬件结构不可重构性问题、开发升级周期长和不可移植性等问题。   随着微电子技术和计算机工具软件的发展,可编程片上系统SOPC的设计理念和设计方法成为了一种趋势。为了解决传统DSP处理器所面临的速度问题、硬件结构不可重构性问题、开发升级
[嵌入式]
单片DSP处理器功能系统的<font color='red'>SOPC</font>技术设计
基于SOPC的嵌入式数字音频AGC系统的设计与实现
系统结构设计 技术是SOC(System on Chip)技术和电子设计自动化技术相结合的一种全新的嵌入式系统设计技术,为设计者提供了一个可以快速开发设计及验证的系统设计平台,用以搭建基于总线的系统。它包含了一系列的模块,例如NiosⅡ处理器、存储器、总线、JTAG等IP核,还有包含操作系统内核的嵌入式软件开发工具。它可以将处理器、存储器、I/O接口、硬件协处理器和普通的用户逻辑等功能模块都集成到一个FPGA芯片里,构建一个可编程的片上系统。 在系统结构上数字音频AGC系统的设计主要包括3个层面:最底层是硬件层面,即物理硬件电路的原理图设计,包括各功能IC的外围电路设计;中间层是SOPC系统层,其设计主要有NiosⅡ
[嵌入式]
基于<font color='red'>SOPC</font>的嵌入式数字音频AGC系统的设计与实现
基于SoPC的温度和时钟实时显示系统设计
时钟是我们日常生活中不可或缺的一部分,温度也是我们生活中最关注的环境要素,时钟和温度的实时数字化显示给我们的生活带来了极大的方便。随着可编程逻辑器件的发展,可编程片上系统技术(SoPC)已经广泛应用于电子、通信和工业控制等领域。本文提出了基于SoPC技术的温度和时钟实时显示系统的设计方案。该设计结果可以应用于商场、银行、家庭等场合,为人们的生活和工作带来便利。 硬件设计 基于SoPC技术的温度和时钟实时显示系统的硬件组成部分为:在SoPC Builder中构建的基于Nios II的硬件平台,实时时钟和温度传感器电路,液晶显示电路。核心芯片选用ALTERA公司Cyclone II(EP2C8)FPGA芯片作为微处理器,实时时钟选
[电源管理]
基于<font color='red'>SoPC</font>的温度和时钟实时显示系统设计
智能命令行SOPC系统中的设计
命令行是计算机系统中最重要的组件之一。它可以帮助开发人员更方便的控制系统。在调试过程中,可以让开发人员随时变更测试方法。   FPGA的成本越来越低,FPGA上的嵌入式系统(SOPC)也应用得越来越广泛。但是相对其他成熟的计算机体系,SOPC系统现在还没有命令行。为了更好的推广SOPC应用,笔者开发了一个智能的命令行模块,可以调用系统中的任意函数,降低了开发人员的使用难度。在最小配置时,它只有大约1000行代码,占用14KB存储容量,可以放在完全由FPGA片内资源构成的计算机系统中。它的结构也具有很好的扩展性,开发人员可以结合自己的需求,轻松添加命令,丰富它的特性。   命令行框架设计   1 总体设计   好的命
[嵌入式]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved