当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 3 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : Segmentation fault code
帖子发表于 : 2009-03-17 21:34 

注册: 2008-11-28 16:32
帖子: 7
送出感谢: 0 次
接收感谢: 0 次
求助:小弟在ubuntu下交叉编译一个控制ARM9的GPIO的程序,开发板上已经有Linux操作系统,但是在板子上运行时出现如下错误:
pc : [<000084a4>] lr : [<00008608>] Not tainted
sp : bffffe24 ip : bffffe38 fp : bffffe34
r10: 40127c98 r9 : 00008564 r8 : 00000001
r7 : 4000b040 r6 : 000082c4 r5 : bffffe84 r4 : 4001c720
r3 : 00000003 r2 : 00000003 r1 : 40129940 r0 : ffffffff
Flags: nZCv IRQs on FIQs on Mode USER_32 Segment user
Control: C000717F Table: 00AC0000 DAC: 00000015
Segmentation fault
我的程序代码是:
//程序控制GPIOE0(GRLED)和GPIOE1(RDLED)连接的红绿灯闪烁
#include<stdio.h>
#include <stdlib.h>
#include <math.h>
#include<sys/mman.h>
#include<fcntl.h>
#include <asm/page.h>

//定义GPIOE端口地址
#define GPIO_BASE 0x80840020
#define rPEDR 0x00000000 //E口数据寄存器
#define rPEDDR 0x00000004 //E口数据方向寄存器

volatile unsigned int *PEDR,*PEDDR;
static void Delay() //延时函数
{
int j;
for(j=0;j<0xffff;j++)
;
}
void Display() //显示函数
{
int h;
*PEDDR=0x3 ; //初始化GPIO,设置方向为出
for(h=0;h<10;h++)
{
*PEDR=0x1;
Delay();
printf("Now,Green Light\n");
*PEDR=0x2;
Delay();
printf("Now,Red Light\n");
*PEDR=0x0;
printf("Now,No Light\n");
Delay();
*PEDR=0x3;
printf("Now,both Light\n");
}
printf("It's done\n");
}

int main()
{
int gpio_fd;
unsigned char *gpio_map;
gpio_fd =open("/dev/mem",O_RDWR);
if (gpio_fd == -1)
{
printf("can't open /dev/mem.\n");
}
gpio_map = (unsigned char *)mmap(NULL, 0x30,PROT_READ | PROT_WRITE, MAP_SHARED,gpio_fd, GPIO_BASE);
PEDR = (volatile unsigned int *) (gpio_map+rPEDR);
PEDDR = (volatile unsigned int *) (gpio_map+rPEDDR);
Display();
if (gpio_fd != 0x0)
{
close(gpio_fd);
}
printf("GPIO Control Test end\n");
return 0;
}
我一直困惑不知道为什么?求助各位,是不是嵌入式Linux不能直接控制硬件,进行地址映射后也不行吗?


页首
 用户资料  
 
2 楼 
 文章标题 : Re: Segmentation fault code
帖子发表于 : 2009-03-21 13:57 
头像

注册: 2007-09-09 15:41
帖子: 218
地址: Beijing
送出感谢: 0 次
接收感谢: 1
我遇到的这样问题一般都是指针错误。非法使用指针,使用空指针等等。
你可以调试下,单步跟踪看看哪儿出错了


页首
 用户资料  
 
3 楼 
 文章标题 : Re: Segmentation fault code
帖子发表于 : 2009-03-22 15:22 

注册: 2008-11-28 16:32
帖子: 7
送出感谢: 0 次
接收感谢: 0 次
我单步调试过,就是在给PEDR指向的寄存器写内容时出错,地址映射没有问题,这就不明白是为什么了


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 3 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译