3521|14

73

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

这句话是什么意思? [复制链接]

 
1芯积分
本帖最后由 今夜雨夹雪 于 2016-9-2 16:14 编辑



求大神解释

图片1.png (29.52 KB, 下载次数: 4)

图片1.png

最新回复

想多了。 我只是对C的语法形成了一套自己习惯性的思维方式。 但是,没怎么看ansi c 标准。 理论上来说,那个,才是标准。 但后来我逐渐放弃这种方式—— 就像对编译器,还有计算机底层的行为。 我不需要去知道它的根本原因,我只关心它表现出来的样子就好了。 所以对于 堆 栈 这些细节,我现在都是这样处理。省了很多事。  详情 回复 发表于 2016-9-3 13:21
 
点赞 关注

回复
举报

6066

帖子

90

TA的资源

裸片初长成(初级)

沙发
 
???哪句话
 
 

回复

73

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

在楼上
 
 
 

回复

574

帖子

11

TA的资源

一粒金砂(高级)

4
 
你的英文那些翻译是什么意思啊?
只知道它和计数寄存器的TA0R有关
英文翻译了再说
 
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

5
 
((void (*)() ) (unsigned int ) & TAOR) ();好复杂的机构。。。看不懂
void (*)( )  变量类型,函数指针变量,指向函数的入口,返回一个,等楼下回答



赞赏

1

查看全部赞赏

 
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

6
 
@辛昕  论坛ID对不对
 
 
 

回复

574

帖子

11

TA的资源

一粒金砂(高级)

7
 
把那句话的注释的发一下,我水平很低,还是看一下注释
 
 
 

回复

6040

帖子

202

TA的资源

版主

8
 
TA0R的地址转成整型,再转成函数指针进行调用。后面注释写的也挺清楚呢。

赞赏

1

查看全部赞赏

 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

9
 
真是够作孽的........诶
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

10
 
这个事情,这么看。

首先,这个 TA0R,我不知道它是啥,曾经我以为这是个寄存器。
但是看到后面,我觉得不一定。

所以,下一步,你给我乖乖找到 TA0R是啥,否则这问题没法往下说。

然后,我们来看看这个复杂的表达式。
其实我早就说过,这种复杂的表达式,得拆开来看。就不复杂了。
你可能没啥经验,那我教你怎么看。

其实答案基本就是 lcoftp说的,八九不离十。

我教你怎么看。

首先,找到这些括号里最大的,也就是最外层的格式。
我们发现一个很有意思的。
它说到底,前面那一大串 void *什么鬼的,反正就是个强转对不对?
所以不管他是啥,反正最后意思就是强转成一个 void *指针,那就别管他了,让他去死吧。
接下来,你会注意到,在最外层的括号之外,还有一个 ()

一般来说我们都知道,这种格式,必然是一个函数调用。

所以,考虑到前面的格式,我们就懂了。
其实,事情,是这样的。

它,是把 TAOR这个东西的地址给读出来,然后,把它强转成一种指针。
那接下来就好解释了。
既然我们看出这是个函数指针调用。那必然就是转换成一种 函数指针。

而这个函数指针是一个什么样的函数呢?
看那个 void *啥的就好了。

其实我也是刚刚才发现这一点。
注意看,括号里是这样写的

void (*)()
其实,这是一个很不标准的函数指针定义。
它的完整写法应该是

void (*)(void)
意思就是,这是一个 声明如下形式 的 函数指针

void xxx(void)

你看着有点迷糊是吧,那如果我写成这样你就不迷糊了
void *p(void);
这是一个函数指针,它的名字叫 p,它是一个指向 形如  void xxx(void)类型函数的指针。

上述定义,只是少了一个p,因为它只是一个函数指针类型。

最后,我们稍稍考虑一下这么写是个什么意思。
因为前面很奇怪,它赋值给 TAOR = 0x3FFF

现在我们来综合考虑一下,这个式子是什么意思。

首先,

(void (*)()) 这一部分我已经说了,它表明的是强转成 void *(void) 这种格式的函数指针。

然后其次是第二个括号
(unsigned int)&TAOR
这其实也好理解,它取出 TA0R 的地址,然后,把这个地址转化成 unsigned int类型,其实就是把地址转化成一个整形值。注意,它不是上面那个 0x3FFF
所以,我才让你去找程序中另外定义 TA0R的地方,否则,我能看懂这句话,但我也不知道这句话背后在做什么。
虽然我从注释里 ,大致能猜到,它应该是要去掉 flash中的某个地址值,不知道是为了某种特定的跳转还是 软件形式的IAP。

最后,就是所有括号之外,还有一个()括号。
这个没什么,因为既然这是一个 参数为 void的函数指针,所以这么干,无非是要调用这个指向的函数指针。

说的很乱了,我先缓一会,你们感受一下。

明天楼主贴住 TA0R是啥,我继续说~~

赞赏

1

查看全部赞赏

 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

11
 
数码小叶的回答也是对的。
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

回复

348

帖子

0

TA的资源

一粒金砂(高级)

12
 
辛昕 发表于 2016-9-3 00:17
这个事情,这么看。

首先,这个 TA0R,我不知道它是啥,曾经我以为这是个寄存器。
但是看到后面,我觉 ...

版主很棒~~~涨姿势啦~~~坐等楼主和版主的互动继续~~~我之前也有看到这个函数形式,一知半解的
 
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

13
 
辛昕 发表于 2016-9-3 00:17
这个事情,这么看。

首先,这个 TA0R,我不知道它是啥,曾经我以为这是个寄存器。
但是看到后面,我觉 ...

果然回答不一般,论坛估计没人敢和你挑语法吧
 
 
 

回复

2549

帖子

0

TA的资源

五彩晶圆(初级)

14
 
火火山 发表于 2016-9-3 08:15
版主很棒~~~涨姿势啦~~~坐等楼主和版主的互动继续~~~我之前也有看到这个函数形式,一知半解的

这位可不是一般人
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

15
 
数码小叶 发表于 2016-9-3 11:33
果然回答不一般,论坛估计没人敢和你挑语法吧

想多了。
我只是对C的语法形成了一套自己习惯性的思维方式。
但是,没怎么看ansi c 标准。
理论上来说,那个,才是标准。

但后来我逐渐放弃这种方式——
就像对编译器,还有计算机底层的行为。
我不需要去知道它的根本原因,我只关心它表现出来的样子就好了。

所以对于 堆 栈 这些细节,我现在都是这样处理。省了很多事。
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表