野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13218|回复: 12

ST的官方库使用结构体指针为什么不需要malloc

[复制链接]
发表于 2020-5-15 09:45:37 | 显示全部楼层 |阅读模式
我在使用另外一款公司自主研发的芯片,库基本与ST相同,一直不能够正确配置;
经过调试发现是因为没有加malloc函数,导致结构体指针指向了一块随机的内存;
请问ST的库也没有malloc函数,为什么它的没有问题呢?

ST官方库,中断配置函数

ST官方库,中断配置函数
私有库.PNG
回复

使用道具 举报

 楼主| 发表于 2020-5-21 16:21:10 | 显示全部楼层
问题点找到了:
对于只写寄存器,是不能使用“|=”“&=”操作符的。
ST的这个寄存器是WR,所以可以用,RO的只能用“=”来写。
回复 支持 反对

使用道具 举报

发表于 2020-5-15 16:12:33 | 显示全部楼层
应该是你传参就传错了吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-15 16:42:55 | 显示全部楼层
a5820736 发表于 2020-5-15 16:12
应该是你传参就传错了吧

参数没有错,仅仅是在库里面加了malloc()这个函数,然后原工程就可以正常工作了;
回复 支持 反对

使用道具 举报

发表于 2020-5-15 18:55:33 | 显示全部楼层
你先看看那个库的头文件有没有类似ST这种的定义:
#define ADC1                ((ADC_TypeDef *) ADC1_BASE)
#define ADC2                ((ADC_TypeDef *) ADC2_BASE)
有的话直接传是没问题的,不需要动态分配。
再说你动态分配的内存地址在堆上,应该不可能和ADC的寄存器地址一致,所以你这个代码实际真的有作用?应该只是能编译过吧
回复 支持 反对

使用道具 举报

发表于 2020-5-17 11:31:57 | 显示全部楼层
你这么用的应该是没有任何效果的,是你独创的
回复 支持 反对

使用道具 举报

发表于 2020-5-17 11:51:58 | 显示全部楼层
你把图二改成图一形式,赋值通过 memcpy 实现,试试?
  1. memcpy(&itmask, &ADC_IT, sizeof(uint32_t));
复制代码


另外,你图2 函数接口实现有问题,内存泄漏,malloc 的内存没有 free。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-18 08:45:05 | 显示全部楼层
a5820736 发表于 2020-5-15 18:55
你先看看那个库的头文件有没有类似ST这种的定义:
#define ADC1                ((ADC_TypeDef *) ADC1_BAS ...

有ADC基地址的定义;如果我不加malloc修改初始化结构体的时候会改到一些无关的memory,导致初始化失败,加了之后就能用了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-18 08:45:56 | 显示全部楼层
nongxiaoming 发表于 2020-5-17 11:31
你这么用的应该是没有任何效果的,是你独创的

我加的这个malloc这块,应该是没有找到根本原因,但是这个地方加了malloc确实能够正常初始化了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-18 08:48:21 | 显示全部楼层
netalpha 发表于 2020-5-17 11:51
你把图二改成图一形式,赋值通过 memcpy 实现,试试?

嗯嗯,没有free这个我知道。memcpy加上的话应该也可以。我就是不明白为什么ST不需要加就能正常用,而我这边不加就会出现问题;想请教大神,这个应该往哪个方先去排查。
回复 支持 反对

使用道具 举报

发表于 2020-5-19 10:44:24 | 显示全部楼层
传入的ADC寄存器的地址是固定的,与malloc无关,   ST的那个函数是配置中断开关的,,所以你最好看下你用的这个芯片的资料,
回复 支持 反对

使用道具 举报

发表于 2020-5-20 09:57:41 | 显示全部楼层
学到老活到老
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-21 16:21:35 | 显示全部楼层
感谢各位大神的集思广益!!!
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-25 20:16 , Processed in 0.031387 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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