调试准备
编译工具:MDK470a
开发板:s3c2410
调试方式:经mdk编译后得到 hex文件,用hex2bin工具转换成bin文件,通过usb下载,在DNW上观察
<Code-1>
-
#define GPFCON (*(volatile unsigned long*)0x56000050)
-
#define GPFDAT (*(volatile unsigned long*)0x56000054)
-
//===PORT F GROUP
-
//端口: GPF7 GPF6 GPF5 GPF4 GPF3 GPF2 GPF1 GPF0
-
//信号: LED_1 LED_2 LED_3 LED_4 FS2_INT GPLD_INT1 KEY_INT BUT_INT1
-
//设置属性: output output output output EINT3 EINT2 EINT1 EINT0
-
//二进制值: 01 01 01 01 00 00 00 00
-
int i,nout;
-
int Main()
-
{
-
GPFCON = 0x00005500;
-
// GPFDAT = 0x00000050;
-
nout=0x000000F0;
-
while(1)
-
{
-
GPFDAT=nout & 0x00000070;
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000030;
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000010;
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000000;
-
for(i=0; i<1000000; i++);
-
//led();
-
}
-
//return(0);
-
}
现象:LED1~4按等时间间隙顺序循环亮灭
<Code-2>
-
#define GPFCON (*(volatile unsigned long*)0x56000050)
-
#define GPFDAT (*(volatile unsigned long*)0x56000054)
-
-
int i,nout;
-
void led(void)
-
{
-
GPFDAT=nout & 0x00000070;
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000030;
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000010;
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000000;
-
}
-
int Main()
-
{
-
GPFCON = 0x00005500;
-
// GPFDAT = 0x00000050;
-
nout=0x000000F0;
-
while(1)
-
{
-
GPFDAT=nout & 0x00000070; //μãááLED1
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000030; //μãááLED1/LED2
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000010; //μãááLED1/LED2/LED3
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000000; //μãááLED1/LED2/LED3/LED4
-
for(i=0; i<1000000; i++);
-
//led();
-
}
-
//return(0);
-
}
现象:LED1与LED3几乎同时亮,一小段时间后LED2亮,一段时间后LED4亮,然后不再循环
注意:Code-2只是在Code-1的前面加了一个函数,但是并没有调用
<Code-3>
-
#define GPFCON (*(volatile unsigned long*)0x56000050)
-
#define GPFDAT (*(volatile unsigned long*)0x56000054)
-
-
int i,nout;
-
void led(void)
-
{
-
GPFDAT=nout & 0x00000070;
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000030;
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000010;
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000000;
-
}
-
int Main()
-
{
-
GPFCON = 0x00005500;
-
// GPFDAT = 0x00000050;
-
nout=0x000000F0;
-
while(1)
-
{
-
/*
-
GPFDAT=nout & 0x00000070; //μãááLED1
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000030; //μãááLED1/LED2
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000010; //μãááLED1/LED2/LED3
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000000; //μãááLED1/LED2/LED3/LED4
-
for(i=0; i<1000000; i++);
-
*/
-
led();
-
}
-
//return(0);
-
}
现象:和Code-2现象一样
<Code-4>
-
#define rGPFCON (*(volatile unsigned *)0x56000050)
-
#define rGPFDAT (*(volatile unsigned *)0x56000054)
-
//#define rGPFUP (*(volatile unsigned *)0x56000058)
-
void port_init(void)
-
{
-
-
rGPFCON=0x00005500;
-
// rGPFUP=0x0000ff;
-
}
-
void led_on(void)
-
{
-
int i,nout;
-
nout=0x000000F0;
-
rGPFDAT=nout & 0x00000070;
-
for(i=0; i<100000; i++);
-
rGPFDAT=nout & 0x00000030;
-
for(i=0; i<100000; i++);
-
rGPFDAT=nout & 0x00000010;
-
for(i=0; i<100000; i++);
-
rGPFDAT=nout & 0x00000000;
-
for(i=0; i<100000; i++);
-
}
-
/*
-
void led_off(void)
-
{
-
int i,nout;
-
nout=0;
-
rGPFDAT=0;
-
for(i=0; i<100000; i++);
-
rGPFDAT=nout | 0x00000080;
-
for(i=0; i<100000; i++);
-
rGPFDAT=nout | 0x00000040;
-
for(i=0; i<100000; i++);
-
rGPFDAT=nout | 0x00000020;
-
for(i=0; i<100000; i++);
-
rGPFDAT=nout | 0x00000000;
-
for(i=0; i<100000; i++);
-
}
-
void led_on_off(void)
-
{
-
int i;
-
rGPFDAT=0;
-
for(i=0; i<100000; i++);
-
rGPFDAT=0x000000F0;
-
for(i=0; i<100000; i++);
-
}
-
*/
-
int main(void)
-
{
-
// port_init();
-
rGPFCON=0x00005500;
-
while(1)
-
{
-
led_on();
-
// led_off();
-
// led_on_off();
-
}
-
return(0);
-
}
-
/*
-
int i,nout;
-
void led(void)
-
{
-
GPFDAT=nout & 0x00000070;
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000030;
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000010;
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000000;
-
}
-
int Main()
-
{
-
GPFCON = 0x00005500;
-
// GPFDAT = 0x00000050;
-
-
nout=0x000000F0;
-
while(1)
-
{
-
-
GPFDAT=nout & 0x00000070;
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000030;
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000010;
-
for(i=0; i<1000000; i++);
-
GPFDAT=nout & 0x00000000;
-
for(i=0; i<1000000; i++);
-
-
//led();
-
}
-
-
//return(0);
-
}
-
*/
现象:下载完成后,先y运行时开发板直接重启
分析
目前看来达到效果的就只有Code-1,我在源码中是有很多注释的,因为粘贴过来都是乱码,所以就全部删掉了。
Code-1与Code-2在PC平台上看应该是一样的,但是运行结果大相径庭,应该不是开发板缓存引起的,估计是编译器动了手脚
<1>可能MDK对代码作了优化,应该不是链接器,可能是编译的时候
<2>Code-4致使板子直接重启,原因是什么呢?
这两个个问题好像现在还搞不定,先放一放吧,下次问老师,或者大手帮忙解决下啊……
本文转自infohacker 51CTO博客,原文链接:http://blog.51cto.com/liucw/1190765