嵌入式C的两个小问题

jetta 2006-05-28 04:53:22
1.为什么寄存器要这样定义?
#define rSYSCFG (*(volatile unsigned *)0x1c00000)
我觉得
#define rSYSCFG 0x1c00000
就行了啊,两个星号把我给搞晕了 :(
2.void * function[][2]=
{
(void *)Test_Eint, "Ext. Int ",
0,0
};
......
while(1)
{
( (void (*)(void)) (function[0][0]))();
}
......
void Test_Eint(void)
{
....
}
上面这一段,我理解是声明并初始化一个二维的指针数组,其中function[0][0]为Test_Eint()这个函数,搞不懂为什么要这样写,直接
while(1)
{
Test_Eint( );

}
不就行了,搞个数组干什么。

哪位能帮我解释解释,谢谢啦
...全文
144 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodluckyxl 2006-05-28
  • 打赏
  • 举报
回复
Q1:
http://community.csdn.net/Expert/topic/4738/4738731.xml?temp=.8419763

Q2:
你说的倒也没有错,这样的复杂书写方法一般会是针对业务层次的应用
现在只是一个初始化,如果几十上百个呢?只要一个循环调用就over了
而按照你的理解需要手写调用上百个函数,影响美观
呵呵 主要还是可能还是作者在构造简单的hash+数组完成某些功能
这个我也是用过的,确实需要使用这种方法,demo比较简单可能看不出效果
你应该看整体的设计就明白了
shu_yoyo 2006-05-28
  • 打赏
  • 举报
回复
#define rSYSCFG (*(volatile unsigned *)0x1c00000)
两个星号不是抵消的啊,第一个星是把0x1c00000转化为unsigned int 型的指针。
volatile 关键字是说明这个地址可以被编译器未知的因素而改变。
第二个星是取这个地址的值。

jixingzhong 2006-05-28
  • 打赏
  • 举报
回复
1. 就字面上是和你的方式一样,
但是意义就不一样了 ...

数据类型不同了,理解方式也要改变 ~
niatclock 2006-05-28
  • 打赏
  • 举报
回复
up

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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