Archive by day May 15, 2019

日本士兵不懂汉语意思给自己起了中国名字让人忍不住大笑!

  抗日战争时期,日本人留给中国人的罪行,至今还留在国人的心目中。当时的日本侵略者,来到中国后,有的日本人还为自己起了中国的名字。但是日本人当时不懂汉语,起的名字让人忍不住大笑。下面就来为大家讲一个有趣的故事。   抗日战争时期的斗争很激烈,日本人为了引人耳目,有的日本人隐姓埋名,甚至潜伏在中国的每一个地方,日本人为了方便还为自己起了一个中国名字。这个日本人原名叫做山本亲雄,给自己的起得中国名字叫做帅本源,真是太搞笑了,日本人都有着八字胡子,还说自己叫帅本源,大家幻想一下,是什么感觉呢?CON京燕头条-懂你的新闻才是你想看的   20世纪初,有一位日本人潜入了中国,是为了了解中国的情况,他为自己起的名字更可笑,叫做范统,名字的意思是想要统治中国的想法,自己还为这个名字感到得意,但是中国听了会忍不住大笑。在中国,他为日本收集了大量的情报,任务完成得很顺利,并且受到了晋升,日本继续让他留在中国做收集工作。CON京燕头条-懂你的新闻才是你想看的   后来,山本亲雄的弟弟一起来到中国做收集情报工作,弟弟原名叫山本相健,他为弟弟起了中国名字叫做范建。2人就一起潜入当时的村落里,打听中国的新行动。后来,2人被村子里的一位老妇人给看穿,聚集村民将2人抓获。直到日本投降,2人还一直被管到监狱中,当说到自己叫范统、范建时,就连监狱长都忍不住大笑。CON京燕头条-懂你的新闻才是你想看的   (作者:游龙公子创作)阅后如果喜欢,不妨关注、点赞和评论,谢谢!本文图片来自网络,如有侵权请谅解!CON京燕头条-懂你的新闻才是你想看的

Read More

STM32 _I _0 _IO volatile const

显然,这三个宏定义都是用来替换成 volatile 和 const 的,所以我们先要了解 这两个关键字的作用: 简单的说,就是不让编译器进行优化,即每次读取或者修改值的时候,都必须重新从内存或者寄存器中读取或者修改。 3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义; 我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。搞嵌入式的家伙们经常同硬件、中断、RTOS等等打交道,所有这些都要求用到 volatile变量。不懂得volatile的内容将会带来灾难。假设被面试者正确地回答了这是问题(嗯,怀疑是否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。 1)是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。 2); 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。 3) 这段代码有点变态。这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码: 由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下: 只读变量,即变量保存在只读静态存储区。编译时,如何尝试修改只读变量,则编译器提示出错,就能防止误修改。 两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些(其实const定义的是只读变量,而不是常量)。#define只是简单的文本替换,除了可以定义常量外,还可以用来定义一些简单的函数,有点类似内置函数。const和define定义的常量可以放在头文件里面。(小注:可以多次声明,但只能定义一次) 前面介绍了 volatile 和 const 的用法,不知道大家了解了没?了解了后,下面的讲解就更加容易了: __I :输入口。既然是输入,那么寄存器的值就随时会外部修改,那就不能进行优化,每次都要重新从寄存器中读取。也不能写,即只读,不然就不是输入而是输出了。 __O :输出口,也不能进行优化,不然你连续两次输出相同值,编译器认为没改变,就忽略了后面那一次输出,假如外部在两次输出中间修改了值,那就影响输出 一般宏定义都是大写,但因为这里的字母比较少,所以再添加下划线来区分。这样一般都可以避免命名冲突问题,因为很少人这样命名,这样命名的人肯定知道这些是有什么用的。 经常写大工程时,都会发现老是命名冲突,要不是全局变量冲突,要不就是宏定义冲突,所以我们要尽量避免这些问题,不然出问题了都不知道问题在哪里。

Read More