首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
MCU 单片机技术
»
ARM
» Ubuntu12.04下Xilinx MicroBlaze调试总结
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
Ubuntu12.04下Xilinx MicroBlaze调试总结
发短消息
加为好友
yuyang911220
当前离线
UID
1029342
帖子
9914
精华
0
积分
4959
阅读权限
90
在线时间
286 小时
注册时间
2014-5-22
最后登录
2017-7-24
论坛元老
UID
1029342
性别
男
1
#
打印
字体大小:
t
T
yuyang911220
发表于 2015-11-25 19:50
|
只看该作者
Ubuntu12.04下Xilinx MicroBlaze调试总结
Design
,
Board
,
操作系统
,
软件
,
硬件
硬件环境:HP CQ45 308
操作系统:KUbuntu12.04 LTS 32bit软件环境:ISE Design Suite 14.5 & VIVADO 2013.1
目标平台:Digilent Atlys(Spartan 6 LX45) 最近在调试Digilent Atlys Board,片上是Xilinx Spartan 6 FPGA XC6SLX45,在用xps综合出microblaze软核之后,主要的工作就是调试microblaze了。一开始遇到了不少问题,总结如下:
1. 使用xsdk创建bsp以及Application Project之后,链接的过程中出现如下类似错误:
xxx.elf section `.stack' will not fit in region `microblaze_0_i_bram_ctrl_microblaze_0_d_bram_ctrl'
region `microblaze_0_i_bram_ctrl_microblaze_0_d_bram_ctrl' overflowed by xxx bytes
由报错的内容的主要意思是microblaze_0_i_bram_ctrl_microblaze_0_d_bram_ctrl是数据以及指令存放的区域,.stack放不进该区域导致microblaze_0_i_bram_ctrl_microblaze_0_d_bram_ctrl溢出。
(如下链接中就有人遇到类似错误:
http://forums.xilinx.com/t5/Embedded-Development-Tools/MicroBlaze-s-Stack-Overflown/td-p/291425
)
这里有两种解决方法:
a. 压缩原来的程序
由于我建立的工程是Memory Test的工程,因此本身并不会很大,我一开始尝试使用GCC的编译器优化,默认情况下是-O0,即不作任何优化,我将其修改为-Os,即Optimize for Size。
不过依旧报类似错误,仔细看一下xsdk生成的memory test的程序,也就是几个函数,没有道理会放不下,并且如果是要测试内存(这里我的理解应该是外部的DDR)的话,程序必须在BRAM中执行,不能放在外部DDR中,参考了一下Xilinx University Program课程的资料,按照上面的操作来还是会报这个错误,但是与此不同的仅仅是我使用的是14.5 ISE Design Suite,而XUP课程上用的是12.2的版本。于是我想会不会是有一些没有用到的函数也被一起放进了BRAM中,这里我想到了以前使用CooCox 的CoIDE的时候有一个GCC Link优化选项是Remove Unused Section,于是立即google一些关键字,找到了gcc ld优化选项 --gc-sections,打开shell,找到mb-ld的位置,输入mb-ld --help,然后看到了两行:
--gc-sections Remove unused sections (on some targets)
--no-gc-sections Don't remove unused sections (default)
看来默认情况下链接器是会把所有使用的段落全部放进可执行文件中的,于是在链接器中添加该命令,添加的地方如下图:
设置完了就可以顺利编译通过了,由此看来由于这次我包含的外设比较多,于是链接器将bsp中提供的外设api函数全部放进了bram中,如果外设比较少的话一般不会出现这种问题,这也是为什么XUP课程中编译就不会出现这种问题!
注意:如果是GCC 编译器作为linker来使用的话,直接加上--gc-sections是不能用的,还需要在前面加上-Wl选项,即-Wl,--gc-sections,即-Wl,<option>,这个命令的意思即将option作为参数传递给linker,比如avr-gcc就是这样子的,运行avr-gcc -help可以找到:
-Wl,<options> Pass comma-separated <options> on to the linker
运行的时候需要在Program FPGA的同时设置可执行文件的路径,步骤如下:
首先,打开Program FPGA 工具:
然后,在Software Configuration中不能设置bootloop(这个在后面会用到),这里要制定之前生产的可执行文件,正如上面注明的,ELF File to Initialize in Block RAM,这是直接在Block RAM(BRAM)中初始化并执行的!
收藏
分享
评分
继承事业,薪火相传
回复
引用
订阅
TOP
返回列表
DSP技术
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议