1.我买了一块基于ARM9的EP9315开发板,但是没有买JTAG仿真器,请问不用仿真器怎样调试和运行测试程序?是不是一定要有仿真器才行?
2.交叉编译一个控制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
#include
#include
#include
#include
#include
//定义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不能直接控制硬件,进行地址映射后也不行吗?
我是菜鸟,由于这块开发板资料少得可怜,真心向各位求助,不甚感激!