OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4117|回复: 4

STM32固件库文件编程结构思想的理解(疑问)

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2010-12-15
在线时间
0 小时
发表于 2015-12-10 14:57:55 | 显示全部楼层 |阅读模式
5金钱

 STM32的固件库文件功能相当完善,提供的API完全能满足一般的项目需要。刚从51单片机转到STM32的人,肯定会被这么庞大的东东吓到,51单片机上对IO口操作,简简单单几行代码就搞定了,一个C源文件就搞定。假如用STM32,对IO口进行简单操作,远不是几行代码能搞定的。(其实直接操作寄存器也能搞定)。

   废话不多说,这就带你解剖固件库文件,包你看完之后豁然开朗。

   首先,请看一段简单的C语言代码


#include <stdio.h>
#define base  0x0012ff60
#define flash ((TestType *)base)
typedef struct
{
      int i;
      int j;
      int k;
}TestType;

void main()
{
       flash->i = 0;
       flash->j = 1;
       flash->k = 2;

       printf( "%x \n", flash->i);
       printf( "%x", &(flash->i));
}


有人会问了这段代码有什么用?我告诉你ST的固件库都是按照这种方式编写的

上面程序打印出来结果为   0

                                  0x0012ff60


  0x0012ff60这个地址人为定义的, 而((TestType *)base)转为一个指针 ,指向0x0012ff60  对吗?
 TestType这个结构体的地址不是系统分配好的吗?人为不是不可以定义的吗?

最佳答案

查看完整内容[请看2#楼]

((TestType *)base)就是把0x0012ff60这个“数值”作为“指针”对待,所指向的地址就是0x0012ff60,而从这个地址开始的储存区域以TestType的格式来访问。 如果你的这个0x0012ff60是个寄存器的地址,那就是由厂家定义好的。只要在芯片中这个寄存器的地址是0x0012ff60,那这样访问就可以访问到寄存器
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2015-12-10 14:57:56 | 显示全部楼层
((TestType *)base)就是把0x0012ff60这个“数值”作为“指针”对待,所指向的地址就是0x0012ff60,而从这个地址开始的储存区域以TestType的格式来访问。

如果你的这个0x0012ff60是个寄存器的地址,那就是由厂家定义好的。只要在芯片中这个寄存器的地址是0x0012ff60,那这样访问就可以访问到寄存器
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2010-12-15
在线时间
0 小时
 楼主| 发表于 2015-12-11 08:43:56 | 显示全部楼层
回复【2楼】ianhom:
---------------------------------
了解了谢谢,主要是没有想到是厂家定义好的
回复

使用道具 举报

0

主题

10

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2015-12-13
在线时间
2 小时
发表于 2015-12-19 12:54:33 | 显示全部楼层
自己也可以这样定义,不过 要注意字节对齐问题
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2016-1-30
在线时间
6 小时
发表于 2016-3-9 11:05:29 | 显示全部楼层
赞一个,这样能够提高代码的可读性。比较清楚含义。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-27 05:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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