《Auguries of innocence》天真的寓言
作者简介这首诗是英国诗人威廉·布莱克最负盛名的作品。本·琼生在评价同时代的威廉·莎士比亚时曾说:他不属于一个时代,而属于所有的世纪。后世证明,此言未虚,莎士比亚确实是说不尽的。英国文学史上另一个威廉在世时及死后多年却远没有这么幸运。这位不朽的诗人就是威廉·布莱克。或许布莱克在天国会感谢周作人的,因为是周作人1919年第一个把他领到了中国。布莱克是一个“远离尘世”的疯狂天才,让人们不禁联想到另一位19世纪伟大的疯狂天才——梵高。威廉·布莱克(William Blake),英国第一位重要的浪漫主义诗人、版画家,英国文学史上最重要的伟大诗人之一。早期作品简洁明快,中后期作品趋向玄妙深沉,充满神秘色彩。他一生中与妻子相依为命,以绘画和雕版的劳酬过着简单平静的创作生活。后来诗人叶芝等人重编了他的诗集,时至今日,诸多评论家将布莱克列为英国文学史上与乔叟、斯宾塞、莎士比亚、弥尔顿、华兹华斯齐名的最伟大的六位诗人之一。由于他的画作在文艺复兴以后,开启了不重形似而重精神力量的创作新路,他又被赞誉为“英国艺术方面最重要的人物之一”。 作品全文To see a World in a Grain o...
【贴吧神贴】雪后初晴,说说自己走出阴霾的那几年
原贴链接: 雪后初晴,说说自己走出阴霾的那几年 前情故事: 【贴吧神贴】过去12个清明了,今年却没能去看她 本文完全保留了原贴内容,为提升阅读体验,使用AI对文章进行了重新排版以及添段落标题 八年的迷茫与停滞有人说,人生就像一座巨大的迷宫,充满了无尽的变化和色彩。可我却身处一条看不见尽头的走廊,两边是无数扇虚掩着的门,走廊是冷寂的白,门缝里是冷漠的黑,我没有勇气推开任何一扇,只能顺着走廊走下去,这一走就是八年。 亲情絮语与往事回响2020 年 3 月,第一波 yq 消散,世界又恢复了忙碌。我准备回西安上班,临行的前两天,打算去看一趟外爷外奶奶。出门前,我妈说:“给你外爷买只鸡吧,前两天你奶奶给我打电话说你外爷想吃鸡肉。”于是我便出门前往市场。一大早的太阳并不是很耀眼,小县城的市场还是熙熙攘攘,喇叭里的吆喝声此起彼伏。这么多年来,市场里修好坑坑洼洼的路,整顿规划了以前随处就摆的地摊,还起了一座服装商城,但逛市场的人从来都没有变过。我随便找了家看上去还不错的鸡肉店。“老板,鸡怎么卖?”“十三块一斤。”“嗯…… 拿这个吧。”“好嘞,七斤二两…… 九十三块二,给九十三就行。”我...
【贴吧神贴】过去12个清明了,今年却没能去看她
原贴链接: 过去12个清明了,今年却没能去看她 后续故事: 【贴吧神贴】雪后初晴,说说自己走出阴霾的那几年 本文完全保留了原贴内容,为提升阅读体验,使用AI对文章进行了重新排版以及添段落标题 半生感慨与农村童年想想自己这半生,经历大起大落,本以为自己是个主角,至少是个悲情戏里的主角,到头来发现无非还是个碌碌无为的路人甲。说说背景先,鼠鼠西北人,从小在农村长大,在农村上的小学,那所小学离家很远,大概得有四五公里吧,每天天不亮就起床出发了,中午一般不回家,每天上学书包里会带张奶奶烙的饼,我这个大孙儿,带一瓶水,记得装水的瓶子还是非常可乐瓶,水喝完了就去学校外面的水渠里灌水,虽然看上去有些混浊,但那时候哪有这些讲究,能解渴就行。有时候嘴馋了,就到学校门口小卖部,用瓶子换零食吃,一个瓶子卖一毛钱,在小卖部可以等价交换,回家后再和奶奶说瓶子丢了,被同学偷走了,这时候奶奶就会骂骂咧咧的再给我找个瓶子。那时候还用的第四版人民币,还有二毛和二块钱,那时候小学还是要交书本费的,我清楚记得三年级我爸带我去报名,和老师聊天说书本费二十七块五,他面色一滞,听到老师夸我学习好,又像是很大度的掏出...
C语言volatile关键字详解
在 C 语言里,volatile属于类型修饰符,其主要功能是告知编译器某个变量可能会以不可预知的方式被修改。这些不可预知的修改来源多样,像硬件、中断服务程序或者其他线程都可能进行修改。使用volatile的目的在于防止编译器对该变量的访问实施优化,以此保证每次对变量的读写操作都是直接针对内存进行的,否则编译器可能会把变量的值缓存到寄存器中。 使用场景 访问硬件寄存器在进行嵌入式系统编程时,常常需要对硬件寄存器进行直接访问,而这些寄存器的值可能会因为硬件状态的改变而发生变化。 12345// 定义一个指向硬件寄存器的指针volatile unsigned int* const UART_STATUS = (volatile unsigned int*)0x40000000; // 读取寄存器的值,每次都会直接从内存读取unsigned int status = *UART_STATUS; 在中断服务程序(ISR)中使用全局变量当中断发生时,会对全局变量的值进行修改,此时就需要用volatile来确保主程序能够正确感知到这种变化。 1234567891011121314...
C语言数组名和数组名取地址的区别
定义以下数组 1int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; a 和 &a 的值在数值上确实是相同的,但它们的类型和含义有本质区别。 a含义:a 是数组名,代表数组首元素的地址,也就是&a[0]。类型:int*(指向 int 的指针)。数值:数组第一个元素的地址。 &a含义:&a 是整个数组的地址,通过取址运算符 & 显式获取。类型:int (*)[10](指向包含 10 个 int 的数组的指针)。数值:与 &a[0] 相同,即数组的起始地址。 那么 a+1 和 &a+1 的值相等吗? 当对指针进行加法运算时,偏移量是由指针的类型决定的。由于 a 的类型是int*,因此 a+1 会偏移 1*sizeof(int) 字节,即指向下一个元素。由于 &a 的类型是int (*)[10],因此 &a+1 会偏移 1*sizeof(int[10]) 字节,即指向数组末尾后的位置。
博客迁移记录
前言之前我的博客是部署到 Cloudflare 上的,网页加载速度很慢,在线 ping 响应时间普遍在 200 - 300ms 之间,尤其是每到晚间经常加载不出页面,因此决定将博客从 Cloudflare 迁移至 Vercel。迁移后每次部署仅需几秒明显快于CF,最重要的是访问速度有明显提升, 在线 ping 响应时间普遍在 70ms 左右,vercel 后台显示绝大部分访问请求都被分配到了新加坡的CDN节点。要说 Vercel 有哪些不如 CF 地方,主要就是免费版每个月有 100 G 的流量限制,而 CF 没有流量限制,不过 100G/月 对于个人博客足够了。 出现问题我的博客使用的 Butterfly 主题,在迁移过程中,遇到了一个问题,就是访问图库的子页面(准确的说是所有使用 gallery-group 标签外挂的子页面)时会跳转到 404 页面,但是访问本地 local:4000 就没有问题。最后发现在访问的 url 后面加上 .html 后缀就能正常访问了。 解决方法在 hexo 根目录 source 文件中 新建一个 vercel.json 文件,内容如...
泰凌微B85m系列 Conn State Slave role 时序保护方法
本教程适⽤于泰凌微 B85m 系列芯片。 ConnSlaveRole,每个 interval 需要⼀个收发包事件,也就是 Brx Event。B85m SDK 中,Brx Event 完全是由中断触发的,所以 MCU 系统总中断需要⼀直被打开。如果 user 在 Conn state 的⼀些任务时间较⻓且必须把系统总中断关闭(⽐如擦除 Flash),就会造成 Brx Event 被停掉,BLE 的时序很快就乱掉,最终连接断开。 对于这种情况 SDK 中提供了⼀套保护机制,让 user 去停掉 Brx Event 却不破坏 BLE 的时序,user 需要严格根据这个机制来操作。相关 API 如下: 123int bls_ll_requestConnBrxEventDisable(void);void bls_ll_disableConnBrxEvent(void);void bls_ll_restoreConnBrxEvent(void); 调⽤ bls_ll_requestConnBrxEventDisable 来申请关掉 Brx Event。 该 API 返回值若为...
超线程技术简介
什么是超线程技术? 超线程技术是 Intel 在奔腾4C处理器上开始投入的一种技术,目前主要应用在 Intel、AMD 的x86多核处理器上。在超线程技术中,一个物理CPU核心被伪装成两个或两个以上的逻辑CPU核心,看起来就像多个CPU在同时执行任务。如图所示,打开Windows任务管理器,该CPU的内核是6个,也就是有6个物理CPU核心,但是它的逻辑处理器有12个,这就是使用了超线程技术。 超线程技术是如何实现的? 超线程技术是通过在一个物理核心中创建多个线程实现的,每个线程都有自己的PC寄存器、指令寄存器和条件码寄存器。当线程A的指令停顿的时候,物理CPU核心的译码器和算术逻辑单元(ALU)就会空出来,这时线程B就可以运行自己的指令。这样就可以提高CPU的利用效率。就像下面这条路,很笔直,但是总是空荡荡的,我们给它引入两个入口,把更大范围的车辆引入进来,提到了道路的使用效率。需要注意的是,如果译码器和ALU也是双份的,那么这就是真正的多个CPU核心了,不能称为超线程技术。 超线程技术的优缺点? 超线程技术非常适合运行内存IO密集而非计算密集的应用程序,因为IO操作会有...
泰凌微B85m系列SRAM和Firmware空间分配
本教程适⽤于泰凌微 B85m 系列芯片 B85m SDK V3.4.2.4及之后版本的 SRAM 空间分配与之前版本的分配原理上是一样的,只是为了节省空间,将原来的固定16K/32K retention size 修改为实际使用的 retention size 下面以 SRAM size 64K的IC:8258为例详细介绍 SRAM 区域各个部分。如果 SRAM size 是其他值,用户类推即可。 如上图所示: Flash 中 Firmware 包括 vector、ramcode、retention_data、text、rodata 和 data initial value。 SRAM 中包括 vector、ramcode、retention_data、Cache、data、bss、data no initial value、sdk_version、stack 和 unused SRAM area。 SRAM 中的 vector/ramcode/ retention_data 是 Flash 中 vector/ramcode...
解决使用Cloudflare后Waline评论无法显示真实IP的问题
当 Hexo 博客使用 Cloudflare 进行CDN加速时,Waline 评论区的用户IP会显示CF加速的地址而不显示真实的IP地址 本教程适用于使用 Vercel 部署 Waline 的情况 从你自己的 github 仓库中将 Waline 的源码仓库clone下来 在clone下来的仓库中的 index.cjs 文件的最后添加 1think.app.proxyIpHeader = 'CF-Connecting-IP'; 添加后文件内容如下: 12345678910const Application = require('@waline/vercel');module.exports = Application({ plugins: [], async postSave(comment) { // do what ever you want after comment saved },});think.app.proxyIpHeader = 'CF-Con...