打印

初学者的问题1

[复制链接]
2036|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
刘老头|  楼主 | 2013-6-15 13:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天才开始接触STM32,上午看了几页书,发现一个问题,请各位指教
1.为什么STM32在对寄存器编程的时候要使用链表这种形式,为什么不像51和AVR那样使用寄存器地址来访问寄存器,使用链表有什么优势,我觉得使用地址直接访问寄存器也挺好的啊,编起程序来简洁明了,上午试图把STM32的IO口操作整明白,结果那宏定义是一层套一层,看的我这个崩溃
沙发
logokfu| | 2013-6-15 13:52 | 只看该作者
没见用链表啊

使用特权

评论回复
板凳
study1234| | 2013-6-15 15:21 | 只看该作者
STM32的开发采用库和寄存器两种方式

看你自己喜欢了,简单的说采用库上手快,但灵活性显得不足。
大部分的书针对库方式编程,仅很少的书针对寄存器编程,如正点原子

使用特权

评论回复
地板
刘老头|  楼主 | 2013-6-15 18:55 | 只看该作者
m16在设置IO口方向时用DDRA=0X00;
STM32在设置IO口方向时用GPIOC->CRH&=0XFFF00FFF;
为什么不直接CRHC&=0XFFF00FFF;然后在宏定义CRHC为C口CRH寄存器的地址,为什么要用链表的形式呢,这样到底有什么好处
我买的书名字叫《例说STM32》,这本书是讲库方式编程的吗

使用特权

评论回复
5
zeluo| | 2013-6-15 19:09 | 只看该作者
这一块还是需要多加强   买一块开发板   对照例程 写一些   应该就熟悉多了

使用特权

评论回复
6
刘老头|  楼主 | 2013-6-15 19:24 | 只看该作者
zeluo 发表于 2013-6-15 19:09
这一块还是需要多加强   买一块开发板   对照例程 写一些   应该就熟悉多了  ...

貌似没有回答我的问题啊,大侠

使用特权

评论回复
7
e2zone| | 2013-6-15 19:59 | 只看该作者
请楼主贴出,你说的用了链表的地方,貌似没见过使用链表 吧?
难道您说的是结构体?
使用结构提这样的话,我们使用的时候就不用**那些地址什么的,比较方便。

使用特权

评论回复
8
刘老头|  楼主 | 2013-6-15 20:32 | 只看该作者
e2zone 发表于 2013-6-15 19:59
请楼主贴出,你说的用了链表的地方,貌似没见过使用链表 吧?
难道您说的是结构体?
使用结构提这样的话, ...

我错了,就是结构体
我不明白的是为什么要先定义一个结构体,然后用GPIOC->CRH去访问寄存器
之前我学习51和AVR的时候,没有定义结构体,也可以访问寄存器啊,用结构体我相信应该有它的优势和道理,但是我就是不知道它的优势在哪里

使用特权

评论回复
9
e2zone| | 2013-6-15 23:47 | 只看该作者
道理是一样的,因为整个结构体的基址指向了那一组寄存器的基地址,然后使用偏移量寻找任何一个寄存器。
这可以看做是一种面向对象的编程思想。使用的时候需要实例化这么一个对象。然后设定这个对象的任何一个参数。

这么做,首先 是由于硬件的体系架构较方便这样去实现。假设硬件上面同一组的每个寄存器的安排相距甚远,就不适合这么做了。
当然好处就是,更方便管理,更容易理清架构了。

但是这么做也是有缺点的,编译器如果没有针对此类代码优化,那么明显这么做会浪费更多的内存(如果像您上面那种使用指针的话则会好一些),然后就是欠缺灵活性,比如再某一时刻需要单独修改某一个寄存器的值。

以上为个人理解,仅供参考。
呵呵~

使用特权

评论回复
10
zhang7676050| | 2013-6-18 10:41 | 只看该作者
我也在初识,不过新手上路,调用库函数挺方便的,不想51那样直接操作寄存器,学到后来可以仔细研究一下寄存器的直接操作,希望高手们给点指导意见!

使用特权

评论回复
11
ticomi| | 2013-6-18 10:50 | 只看该作者
库开发有很多的优势和优点,习惯了库开发就不会再使用寄存器了,虽然寄存器较快。
库开发调试和移植都非常方便,如果想操作寄存器可以直接参考库中的函数。

使用特权

评论回复
12
大猫在睡觉| | 2013-6-18 10:54 | 只看该作者
这是结构体,程序可读性强,用GPIOC->CRH去访问寄存器,对应的汇编指令你可以看编译器产生的汇编文本文件,很可能就是使用直接地址操作哦,不过编译器会根据上下文优化,也可能用指针访问。

使用特权

评论回复
13
刘老头|  楼主 | 2013-6-19 22:06 | 只看该作者
e2zone 发表于 2013-6-15 23:47
道理是一样的,因为整个结构体的基址指向了那一组寄存器的基地址,然后使用偏移量寻找任何一个寄存器。
这 ...

谢谢,我又买了另一本书,STM32寄存器地址分配是有规律的,我现在就把这种方式想象成汇编里的基址+变址寻址,编译器自带的几个头文件也分析过了

使用特权

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

本版积分规则

2

主题

6

帖子

0

粉丝