8375|22

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

硬件特殊功能寄存器编程思路和RAM使用的问题?请各位大人 [复制链接]

看了一下STM32的库,对于其中的关于硬件的特殊功能寄存器的设置都是通过:1、定义一个和实际硬件地址相镜像的全局结构体变量。
2、设置结构体的各个变量相对应的参数。
3、把结构体整体复制到硬件特殊功能寄存器。

个人理解,当结构体定义的时候编译器给它分配空间,且这个为全局变量一直占用RAM空间,即使初始化后也一直占用空间,编译器也不会回收其空间。到最后其实有一份硬件特殊功能寄存器的镜像一直占用着RAM。

而以前弄51,AVR,PIC的时候硬件特殊功能寄存器都是一个一个设置。

请教一下这两个方法各有什么有点和缺点。

个人感觉:第一个方法 缺点:RAM来说是一直浪费的,优点:还没发现。
          第二个方法 缺点:以前51,avr,pic都可以用没发现什么问题,优点:直接设置寄存器,省RAM

不知道我理解的对不对,为什么STM32的库里面要采用第一个方法???请各位大人解答一下!!!
此帖出自stm32/stm8论坛

最新回复

实在是忍不住了  那些全是局部变量  又不是全局的  怎么会占用RAM  可笑啊。  详情 回复 发表于 2011-7-12 11:59
点赞 关注
 

回复
举报

59

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

这个问题问得好,欢迎讨论

                                 加酷以示鼓励,鼓励这种深入研究的精神。
此帖出自stm32/stm8论坛
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

可以在函数内设置局部变量解决这个问题

                                 不过现在STM32内部资源丰富,不浪费都是不对的~~~
此帖出自stm32/stm8论坛
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 

想不到问个问题还有条裤子穿!!!

                                 但是问题还是没有解决啊!!!
此帖出自stm32/stm8论坛
 
 
 

回复

48

帖子

0

TA的资源

一粒金砂(初级)

5
 

问题问得好当然有裤子穿

                                 这个问题每个人都会有不同的看法,没有标准答案,所以才呼吁“欢迎讨论”。
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

6
 

哈哈~~~俺在3楼已经给出解答了呀~~~

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

7
 

老外觉得这样写程序移植性好一些

                                 可能老外觉得这样写程序移植性好一些.
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

8
 

hot大叔,为浪费而浪费,不应该吧~~~~~

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

9
 

re

                                 这种写法有利模块的划分,如果资源足够的话,这种写法很有好处的.一般在大的程序中,驱动就这样做.比如,驱动是一个人写的,用驱动其它人,有可能它不清楚驱动的具体细节,这样好处体现出来了
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

10
 

还有其它好处

                                 使用STM32的库,还有其它好处:上手快,即使数据手册还没有看明白,也可以开始进行学习和编程。
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

11
 

你也完全可以一个个设置,不占ram,你愿意用哪种?

                                 其实现在的开发的硬件资源越来越复杂,此举是将资源的描述简单化而已。浪费不浪费不是关键的问题。就相当于学籍的管理,有必要增加那些档案吗?要调查某个学生的情况,直接去问他本人吗?
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

12
 

主要是为了方便

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

13
 

感觉9楼-12楼的回答有点牵强!!

                                 如果是为了程序易读好写,完全可以像以前44B0X那样直接在硬件的地址上定义结构体,直接对寄存器进行操作.没有必要先在RAM内把参数改好,然后再将它复制到实际的寄存器.
此帖出自stm32/stm8论坛
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

14
 

如果想节省RAM空间,可以把结构体定义在Flash中

对于13楼的论点我有一点看法:假如寄存器的操作需要一定的顺序,那么直接在硬件的地址上定义结构体,直接对寄存器进行操作,就需要程序员深入了解和掌握这样的操作规定;如果把这个任务交给库函数完成,就可以减小对编程人员的要求。同样对于某些计算工作,如UART、I2C、SPI等的时钟频率问题,也可以交给库函数计算,同样可以减小对编程员的要求。

当然,如果你是一个有经验的工程师,对这款芯片的使用非常熟悉,或对系统的性能和资源有较为苛刻的要求,直接操作寄存器是最好的办法。实际上,我们的工程师们也喜欢直接操作寄存器,他们认为这样可以有最大的灵活性和自由度。

不管怎么说,使用库函数的操作办法对初学者或还不十分了解这款芯片的工程师是十分有益的,可以帮助他们快速地上手,加快学习的进度和开发的速度。
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

15
 

呵呵,结构体定义在FLASH中?

有可能吗?

结构类型本身不占用RAM空间,只有变量声明的时候才会占用RAM,3楼的回答是正确的,只能放在局域变量中,可以相互覆盖使用。
此帖出自stm32/stm8论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

16
 

pointer!

                                 4 bytes in 32-bit system
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

17
 

呵呵,香水偷换概念

用它初始化外设试试看?
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

18
 

我也是刚学

                                 程序库里定义的都是数据类型 如:typedef struct,这个也不占RAM啊。他在用的时候多数是局部变量,况且还有重复使用的情况
此帖出自stm32/stm8论坛
 
 
 

回复

53

帖子

0

TA的资源

一粒金砂(初级)

19
 

移动一下

                                 全局结构体变量是占用RAM,想办法让他成为函数的局部变量就不会占用RAM,不过要注意局部变量不会自动初始化的问题。
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

20
 

学习了

                                  
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表