打印

我有个问题关于FWlib的~

[复制链接]
2712|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Swd21ic|  楼主 | 2008-6-18 22:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
gp, IO, GPIO, pi, UG
在map.h文件中

根据是否是debug模式对于某一个外设的基址有两种设置法,以GPIOA为例:


#ifndef debug

#ifdef _GPIOA
 #define GPIOA     (GPIO_TypeDef *)GPIOA_BASE
#endif

#else

#ifdef _GPIOA
 EXT GPIO_TypeDef *GPIOA;
#endif

#endif

普通模式下定义了常量宏GPIOA为外设基址.且可以按结构体访问(已强制转换)

而debug模式下,为何要定义一个变量? 这个变量在debug_init中初始化为了
GPIOA_BASE..效果不是一样吗?? 据文档中说是为了调试的目的..

请教: )




沙发
香水城| | 2008-6-18 22:29 | 只看该作者

什么芯片?

哪个固件库中都没有 map.h 这样的文件啊?

使用特权

评论回复
板凳
Swd21ic|  楼主 | 2008-6-18 22:33 | 只看该作者

这~

...........
楼主你有没有看过Fwlib阿..
 " stm32f10x_map.h "
说map.h应该很清楚吧.就是存储地址封装的头文件

使用特权

评论回复
地板
香水城| | 2008-6-18 22:48 | 只看该作者

哈哈,我是直接拷贝模板使用,从不管什么文件的名字

你说这个文件名,我却找不到,当然要问了。


言归正传,这个问题很简单,调试时如果想在watch窗口中查看GPIOA所有寄存器的值,当然要有一个变量才能看了,否则如何引用GPIOA_BASE这个常量?

使用特权

评论回复
5
Swd21ic|  楼主 | 2008-6-19 10:25 | 只看该作者

Re

只指是一个结构体基址指针变量而已..他永远都是指向外设的首地址.
您把他拉到watch里面去,看到的不永远是GPIOA_BASE吗?

另外如果想看GPIOA每个寄存器的值,应该可以通过IAR下面的寄存器看吧.
AT91的就行.再不行的话,观察memory也可以阿..

使用特权

评论回复
6
香水城| | 2008-6-19 10:44 | 只看该作者

楼上可以试试把*GPIOA拉到Watch窗口看看是什么效果

至少IDE要求这样。

使用特权

评论回复
7
Swd21ic|  楼主 | 2008-6-19 21:12 | 只看该作者

Re

MDK中把GPIOA拉到WATCH中..

他下面出现了*GPIOA,好象确实能看到.

明天用IAR试试..现在白天是IAR+JLINK,晚上是MDK+ULINK.晕菜了

使用特权

评论回复
8
Swd21ic|  楼主 | 2008-6-20 13:56 | 只看该作者

回复香主

用IAR4.42无论是不是编译为debug模式.

将GPIOA放入watch中都能观察到GPIOA的各个寄存器.

不过在IAR里用观察寄存器的功能更好,可以为用户分解每个bit的状态.

使用特权

评论回复
9
Swd21ic|  楼主 | 2008-6-20 14:01 | 只看该作者

问另外一个问题.

对于每个模块的输入参数检查宏
assert_param(..)中的IS_PARA_XXX

为何要定义在每个模块的.h中?

这部分宏定义需要给别的模块用吗?貌似只要在.c内部定义就可以了
private marco部分 ..

使用特权

评论回复
10
香水城| | 2008-6-20 14:26 | 只看该作者

有什么不妥吗?

如果做一件事情可以有多种方式,用哪一种方式没有关系呀,个人喜好。

使用特权

评论回复
11
Swd21ic|  楼主 | 2008-6-20 23:46 | 只看该作者

re

我的意思是.如果完全没有必要让外部知道的东西就应该隐藏起来..

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

71

主题

781

帖子

1

粉丝