免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: lijialis
打印 上一主题 下一主题

arm9开发板 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-04-21 10:27 |只看该作者
原帖由 lijialis 于 2009-4-19 21:04 发表
#include
int main ()
{#define rGPFCON=(*(volatile unsigned int *)0x56000050)  /控制寄存器地址0x..
  #define rGPFDAT=(*(volatile unsigned int *)0x56000054)   /对应的数据寄存器地址
  rGPFCON=0 ...

关于这篇帖子的几点疑问,请T-bagwell解答:
首先,预定义可以放在函数里么?一般都是放在函数之前的不是?
其次,这代码应该是应用层的写法,那么在linux下,对端口和外设的访问是不是要用到mmu,即地址重映射?
最后,对硬件端口和外设的操作是不是可以在应用层完成,而不经过底层?
总之,楼主的代码让我很困惑

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
22 [报告]
发表于 2009-04-21 10:33 |只看该作者
预定义可以放在函数里面的,只不过这么写的相对来说不是很常见,看代码看得多了,写得多了就会看到了

对端口外设操作的话,我一般是在driver里面做,没有在引用层实现过,也没有这么测试过

论坛徽章:
0
23 [报告]
发表于 2009-04-21 11:06 |只看该作者
#include <stdio.h>
int main ()
{#define rGPFCON=(*(volatile unsigned int *)0x56000050)  /控制寄存器地址0x..
  #define rGPFDAT=(*(volatile unsigned int *)0x56000054)   /对应的数据寄存器地址
  rGPFCON=0x5555;
  rGPFDAT=0x00;
printf ("hello.Friendlyarm!\n");
}

#define rGPFCON=...
这个等于号表示...?

论坛徽章:
0
24 [报告]
发表于 2009-04-21 13:02 |只看该作者
我想楼主的板子应该不会是ARM7的,因为在ARM7里是不能支持动态库的。所有楼主想像ARM7那样直接操作实地址那是不可能的; 如果是ARM9的话,还是把这些寄存器的初始化放到内核空间吧!

   如果楼主只是想了解这个过程,那么就可以写test.c如下,完全没必要一下子就来操作GPIO口:
#include <stdio.h>
int main (int argc, char **argv)
{
    printf ("hello.Friendlyarm!\n");
   return 0;
}

这样编译是不需要Makefile的:
#arm-linux-gcc  test.c -o test
#chmod 777 test
然后按照你的方法,将test copy USB上,然后再拷贝到开发板上测试。如果有mount的话,使用NFS来挂载调试应用程序是再方便不过了!

论坛徽章:
0
25 [报告]
发表于 2009-04-21 13:55 |只看该作者
原帖由 dglwx 于 2009-4-21 13:02 发表
我想楼主的板子应该不会是ARM7的,因为在ARM7里是不能支持动态库的。所有楼主想像ARM7那样直接操作实地址那是不可能的; 如果是ARM9的话,还是把这些寄存器的初始化放到内核空间吧!

   如果楼主只是想了解这 ...

其实如果不加系统,在ARM9上也可以对地址直接操作的
我想你的意思是不是如果在系统上跑,对地址直接操作是不可以的?

[ 本帖最后由 zhongfrank 于 2009-4-21 13:56 编辑 ]

论坛徽章:
0
26 [报告]
发表于 2009-04-21 17:54 |只看该作者

建议楼主先去学好微机原理和操作系统原理

zhongfrank 兄弟说的没错
linux里如果要操作硬件的东西,必需要经过驱动的映射,直接这样对地址赋值,楼主完全不知道mmu是什么
建议自己先去看点书,这是基础知识

论坛徽章:
0
27 [报告]
发表于 2009-04-22 10:13 |只看该作者
#define 用错了啊小弟

#define rGPFCON (*(volatile unsigned int *)0x56000050)  
#define rGPFDAT (*(volatile unsigned int *)0x56000054)   
不要 = , 后面的注视不要用 // 要用 /**/
看看你的预处理结果就知道了。
去看看 c 语言教程吧

论坛徽章:
0
28 [报告]
发表于 2009-04-22 10:31 |只看该作者

谢谢大家了

真的很谢谢各位,我只做过单片机的开发,以前就是定义地址就可以用了,这个就不行,还是个没毕业的学生。弄arm才2个月,确实什么都不懂。现在知道了,应该是要有驱动的。我会好好学习,还有什么建议的,请大家继续说。我很爱听!再有,你们只说错了一件事情,我不是小弟,是女生,看名字也知道啊!欢迎大家继续发贴!

论坛徽章:
0
29 [报告]
发表于 2009-04-22 10:36 |只看该作者
原帖由 lijialis 于 2009-4-22 10:31 发表
真的很谢谢各位,我只做过单片机的开发,以前就是定义地址就可以用了,这个就不行,还是个没毕业的学生。弄arm才2个月,确实什么都不懂。现在知道了,应该是要有驱动的。我会好好学习,还有什么建议的,请大家继 ...

其实arm是可以像单片机那样用的,也就是俗称的裸机,不过这样大大限制了arm的功能
所以建议看看LDD3或者宋宝华的那本“linux设备驱动开发详解”,应该会有帮助的

论坛徽章:
0
30 [报告]
发表于 2009-04-22 11:14 |只看该作者
啊,楼主完全没有常识啊。C语法有错误,对CPU架构,MMU, 应用层IO地址的映射等的认识都完全没有概念啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP