硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2035|回复: 8
收起左侧

const 修饰函数指针数组无法定义到FLASH中

[复制链接]

98

主题

340

回帖

634

积分

金牌会员

积分
634
发表于 2018-11-29 12:16:25 | 显示全部楼层 |阅读模式
想把一些函数的地址放到一个函数指针数组里面,然后用const修饰这个数组,达到不占内存的目的,但仿真发现这个数组依然在RAM中,哪儿的问题呢?
const uint8_t (*Tx[2])(uint8_t *)={
fun1,
fun2,
};

回复

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2018-11-29 14:38:25 | 显示全部楼层
可以直接看map文件
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
 楼主| 发表于 2018-11-30 17:49:51 | 显示全部楼层
byccc 发表于 2018-11-29 14:38
可以直接看map文件

仿真器的结果可能不准?
回复

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2018-12-1 15:03:39 | 显示全部楼层
云琴箫龙 发表于 2018-11-30 17:49
仿真器的结果可能不准?

可以实际运行状态,串口打印地址看看。
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

3

主题

35

回帖

44

积分

新手上路

积分
44
发表于 2018-12-2 21:51:06 | 显示全部楼层
按照楼主的想法,这样的定义,似乎不太对
这样定义,是在告诉编译器,指针指向的内容,
是存储在rom里面,而指针本身,仍旧存储在ram里面
而要想让编译器把指针本身也放在rom里,
需要在星号后面也加上const
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2019-3-28 12:17:21 | 显示全部楼层
const uint8_t (* const Tx[2])(uint8_t *)={
fun1,
fun2,
};
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
 楼主| 发表于 2019-4-3 13:37:34 | 显示全部楼层
KeepRun_M4LSI 发表于 2019-3-28 12:17
const uint8_t (* const Tx[2])(uint8_t *)={
fun1,
fun2,

实乃画龙点睛之笔
回复

使用道具 举报

39

主题

928

回帖

1050

积分

至尊会员

积分
1050
发表于 2019-4-3 16:46:06 | 显示全部楼层
这就是const修饰指针的问题。有下列3种形式:
1. const    u32* i;                //i放在rom中,但i指向的变量放在ram中
2. u32* const    i;                //i放在ram中,但i指向的变量放在rom中
3. const    u32* const i;       //i放在rom中,i指向的变量也放在rom中

用行话讲,1、2、3分别是:常量指针、指针常量、指向常量的指针常量
回复

使用道具 举报

98

主题

340

回帖

634

积分

金牌会员

积分
634
 楼主| 发表于 2019-4-4 17:09:43 | 显示全部楼层
ghslfgkkl88 发表于 2019-4-3 16:46
这就是const修饰指针的问题。有下列3种形式:
1. const    u32* i;                //i放在rom中,但i指向 ...

const    u32* const i;
编译后仿真显示该指针的地址还在RAM中
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 08:14 , Processed in 0.173551 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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