鱼C论坛

 找回密码
 立即注册
查看: 4481|回复: 4

不是很懂的写法

[复制链接]
发表于 2013-7-6 11:02:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
小弟看完了谭浩强,开始学习fpga nios2 但是看到了如下的代码很是费解
#define LED          ((PIO_STR *) LED_BASE)
其中
typedef struct
{
    unsigned long int DATA;
    unsigned long int DIRECTION;
    unsigned long int INTERRUPT_MASK;
    unsigned long int EDGE_CAPTURE;
   
}PIO_STR;
#define LED_BASE 0x00001800

((PIO_STR *) LED_BASE) 是什么意思,把LED_BASE转化成PIO_STR *指针变量?
但是LED_BASE 不是宏定义为了一个地址值吗?
这句话的意思是不是将LED当成一个PIO_STR结构体,而首地址为 0x00001800,如果是的话,那么该如何解释这句话呢?
谢谢了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-7-6 12:17:51 | 显示全部楼层
你理解得没错。之前学习的编程中,变量的地址是编译器分配的。在嵌入式系统中,我们希望某个结构体的对象表示一个外设,这样我们才能编程控制该外设。但是对一个特定的电路板,外设的地址分配是固定的,所以就需要寻求一种方法,能够控制已经处于某个特定位置上的结构体对象。
#define LED_BASE 0x00001800
就完成了地址的定义。

这里和常规编程不同的是,我们已经知道该地址出就是某个外设,因此不需要真的在该地址上分配空间。相反,我们认为,在该地址上已经存在了一个结构体PIO_STR的对象
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-6 20:18:47 | 显示全部楼层

谢谢版主的答复,但是还是有些不明白的地方,led被定义成了结构体变量,这个没有问题,但是为什么它,的首地址是0x00001800
(PIO_STR *) LED_BASE把LED_BASE转化成结构体指针,但是LED_BASE不是一个宏么,就等于0x00001800,也就是以后赋值结构体的首地址可以(结构体名*)地址值 这样?
初次接触不是很习惯,自己分析不出来,望版主明示,从语言角度分析下为什么可以这么写,谢谢了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-6 22:33:40 | 显示全部楼层
破翳の刃 发表于 2013-7-6 20:18
谢谢版主的答复,但是还是有些不明白的地方,led被定义成了结构体变量,这个没有问题,但是为什么它,的首 ...

1.关于led的基地址为什么是0x00001800,这是由硬件决定的,建议你在看看开发板相关教程中NIOS2相关外设地址是如何分配的,这个纯属硬件的事情,和软件真没关系。
2.也就是以后赋值结构体的首地址可以(结构体名*)地址值。显然,一般的编程不能这样做。在这里,由于硬件的缘故,相当于你已经知道了以0x00001800为基地址处有一个PIO_STR对象,该对象可以直接控制硬件。在这个前提下,你如何用C语言来控制这个对象呢?显然,利用硬件的知识,我们会写出如:
PIO_STR * pled = (PIO_STR *) 0x00001800;
pled->DATA=...;
pled->DIRECTION=...;
以上代码仅为示意,有很多中写法,但大概的思想就是这样的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-7-8 14:28:21 | 显示全部楼层
仰望天上的光 发表于 2013-7-6 22:33
1.关于led的基地址为什么是0x00001800,这是由硬件决定的,建议你在看看开发板相关教程中NIOS2相关外设地 ...

知道了,谢谢版主{:1_1:}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-20 01:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表