uclinux下的应用程序错误

sdssly 2003-11-21 03:19:46
使用arm 7 cpu,uclinux 20030522。错误信息如下:

Unhandled fault: external abort on linefetch (F4) at 0x00000001

fault-common.c(97): start_code=0x3ed040, start_stack=0x3f6f2c)

我发现错误是由于在一个函数中定义的结构数组太大引起的。

struct fdb fbs【1024】

其中的fdb结构大小为18。这样整个数组占用的空间为18K。程序执行到这个函数,就报告上面的错误。

奇怪的问题是:如果我增加一个printf函数,又没有问题了。报告的错误类型有时是非法指令。搞得我调试了很久。最后把那个数组使用malloc定义成了一个指针。

我想知道:到底是什么原因引起的这个问题?我感觉好像是stack溢出了。我能不能怎么修改uclinux中的kernel设置来扩大stack。或是使用makefile定义大一些的stack?

请大家帮忙

谢谢!
...全文
15 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdssly 2003-11-25
  • 打赏
  • 举报
回复
我改为malloc函数就可以了。就是不清楚为什么会有这个问题?
dongjj511 2003-11-25
  • 打赏
  • 举报
回复
我按《构建嵌入式开发的GCC工具链》的步骤把FOR ARM的交叉编译环境建立起来,编译一个只有一条printf的小程序,发现都有错:
[root@dongjj tmp]# arm-elf-gcc -I/root/gnutools/include -msoft-float -mcpu=arm7tdmi -fomit-frame-pointer -fsigned-char -mcpu=arm7tdmi -Os -Wall -DEMBED -D_uclinux_ -c test.c
test.c:1: stdio.h: No such file or directory

查看gnutools目录的确没有stdio.h等等标准的头文件,只友ansidecl.h,为什么?我于是换上它再编,就出了下面的警告:
test.c: In function `_start':
test.c:5: warning: implicit declaration of function `printf'

我构建gnu工具链比较迷糊,东家能否指点一二
dongjj511 2003-11-25
  • 打赏
  • 举报
回复
“全局变量、静态数据、常量存放在全局数据区,所有类成员函数和非成员函数代码存放在代码区别,为运行函数而分配的局部变量、函数参数、返回数据、返回地址等存放在栈区,余下的空间都被作为堆区”。这是C++的内容,但C与之也是一致的。malloc从堆中分配内存块。注意,函数的局部变量在栈区分配。这就可以知道为什么了
dongjj511 2003-11-24
  • 打赏
  • 举报
回复
或许可以用new来实现
struct fdb * p_fbs;
p_fbs = new struct fdb[1024];
如果new不成功也不行


23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧