新手问题,裸机编程

xitijie 2011-09-26 11:16:39
我的板子上飞凌6410
1,我用裸机编程实现6410板子上第一个LED亮灭,但是程序好像有问题,我实在找不出什么问题,编译器提示好像是寄存器的问题,你们看哈吧

#define rGPMCON (*(volatile unsigned *)(0x7F008820))
#define rGPMDAT (*(volatile unsigned *)(0x7F008824))
#define rGPMPUD (*(volatile unsigned *)(0x7F008828))


void delay()
{
int i,j;

for(i=110;i<0;i--)
for(j=500;j<0;j--);
}

void init()
{
rGPMCON = 0x11111;
rGPMPUD = 0x00;
rGPMDAT = 0x1F;
}


void led1_on_off()
{
rGPMDAT=0x1E;
delay();
rGPMDAT=0x1F;
delay();

}

void Main()
{
init();
while(1)
{
led1_on_off();
}
}

2,为什么裸机编程时候都要添加一个init.s的初始化汇编文件
3,ASD里面用C编程时区分大小写吗?比如十六进制的0x1f与0x1F?

谢谢解答,
...全文
155 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangcuncunzhang 2011-09-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 xitijie 的回复:]
我的板子上飞凌6410
1,我用裸机编程实现6410板子上第一个LED亮灭,但是程序好像有问题,我实在找不出什么问题,编译器提示好像是寄存器的问题,你们看哈吧

#define rGPMCON (*(volatile unsigned *)(0x7F008820))
#define rGPMDAT (*(volatile unsigned *)(0x7F008824))
#define ……
[/Quote]


1. 你说"程序好像有问题"是指编译不能通过? 还是运行时LED灯没有闪烁?

如果是编译不能通过, 最好将编译器提示错误的信息也贴上来; 如果是运行时没有达到预期, 那么提醒你一点:首先飞凌6410我没有用过,不知道有没有IOMUX控制(即管脚复用)? 如果有的话, 看看你用的这个IO默认是不是用作GPIO的,需不需要设置?

2. 原因有2点:
(1)CPU上电后有些寄存器/状态需要设置.
(2)你写的C语言的代码要运行,是需要栈和全局变量空间的, 我们一般要设置栈指针. 另外汇编代码最后一般不是直接跳到你的main()函数的,而是进入到编译器提供的C库中的__main()函数(我们的main()函数名字应该是_main(),只有一个下划线), 它内部会初始化全局变量区域,例如将有初值的全局变量赋初值. 最后才回到我们的main()里面执行.

3. 数据的大小写不区分的, 0x1f和0x1F是一样的.
当我遇上-你 2011-09-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 xitijie 的回复:]
我的板子上飞凌6410
1,我用裸机编程实现6410板子上第一个LED亮灭,但是程序好像有问题,我实在找不出什么问题,编译器提示好像是寄存器的问题,你们看哈吧

#define rGPMCON (*(volatile unsigned *)(0x7F008820))
#define rGPMDAT (*(volatile unsigned *)(0x7F008824))
#define ……
[/Quote]
十六进制的0x1f与0x1F 是数据,不是关键字或者变量,自己实践下吧
当我遇上-你 2011-09-26
  • 打赏
  • 举报
回复
1.贴错误消息
2.问题你自己已经回答
3.LZ知道ADS使用C编程,那我问下LZ你知道C区分大小写吗?
都是基本的东西,找本书看看,在上论坛来提问好点。
当我遇上-你 2011-09-26
  • 打赏
  • 举报
回复
1.贴错误消息
2.问题你自己已经回答LZ你知道C区分大小写吗?
都是基本的东西,找本书看看,在上论坛来提问好点。
qfjygz 2011-09-26
  • 打赏
  • 举报
回复
我来回答第2个问题:为什么裸机编程时候都要添加一个init.s的初始化汇编文件
这是用来初始化有关硬件用的,比如CPU的频率、初始化堆栈,初始化中断控制器等等
xitijie 2011-09-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wswwxk 的回复:]
1.贴错误消息
2.问题你自己已经回答
3.LZ知道ADS使用C编程,那我问下LZ你知道C区分大小写吗?
都是基本的东西,找本书看看,在上论坛来提问好点。
[/Quote]

Application terminated, rc = 0x1

就是这个错误,请问是不是寄存器操作不得当
xitijie 2011-09-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yangcuncunzhang 的回复:]
引用楼主 xitijie 的回复:
我的板子上飞凌6410
1,我用裸机编程实现6410板子上第一个LED亮灭,但是程序好像有问题,我实在找不出什么问题,编译器提示好像是寄存器的问题,你们看哈吧

#define rGPMCON (*(volatile unsigned *)(0x7F008820))
#define rGPMDAT (*(volatile unsigned *)(0x7……
[/Quote]

他的初始化汇编是这样的:
IMPORT Main

AREA |C$$code|, CODE, READONLY
global start

start
bl Main

END

就直接跳到main而已啊,哪有设置指针,堆栈什么的?

19,498

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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