阡陌 发布的文章

阡陌

ISO 8601 日期格式与持续时间格式

国际标准 ISO 8601,是国际标准化组织的日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》。目前是 2004 年 12 月 1 日发行的第三版“ISO8601:2004”以替代 1998 年的第一版“ISO8601:1998”与 2000 年的第二版“ISO8601:2000”。 ISO 8601 日期格式 YYYY-MM-DDThh:mm:ss[.mmm]TZD 其中: YYYY表示四位数的年份 MM表示两位数的月份 DD表示两位数的天(day of the month),从 01 到 31 T是用来指示时间元素的开始字符 hh表示两位数的小时,从 00 到 23 mm表示两位数的分钟,从 00 到 59 ss表示两位数的秒,从 00 到 59 mmm表示三位数的毫秒数,从 000 到 999 TZD表示时区指示符:Z或+hh:mm或-hh:mm,Z 表示 UTC(Coordinated Universal Time,协调世界时) 时间,+和-表示与 UTC 的差。例如: CST(中国标准时间):UTC +08:00,EST(东部标准时间):UTC -05:00,CST(中部标准时间):UTC -06:00。 举例: 2023-12-27T13:37:50.238Z 表示 UTC 时间:2023年12月27日 13:37:50 2023-12-27T13:37:50.238+08:00 表示北京时间:2023年12月27日 21:37:50 ISO 8601 持续时间格式 P(n)Y(n)M(n)DT(n)H(n)M(n)S 其中: P 是持续时间指示符,始终放置在持续时间的开头位置 T 是表示时间元素开始的指示符 (n)为时间值 符号 含义 Y 年 M 月 D 日 W 星期 H 时 M 分 S 秒 举例: P1Y2M3DT4H5M6S 表示的持续时间为:1年2月3天4小时5分钟6秒 UTC 与 GMT 协调世界时,又称世界标准时间或世界协调时间,简称 UTC(Coordinated Universal Time),是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间(GMT)。理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能与实际的太阳时有误差,最大误差达 16 分钟。由于地球每天的自转是有些不规则的,而且正在缓慢减速,因此格林尼治时间已经不再被作为标准时间使用。现在的标准时间,是由原子钟报时的协调世界时(UTC...

时间造成的 Hugo 页面无法渲染问题

使用 Hugo 写博客,凌晨发布文章的时候总发不出来,什么原因呢?难道半夜见鬼了?👻 --- title: 文章标题 date: "2023-12-27" draft: false --- Hugo 默认采用的是 UTC,比北京时间 (UTC+8) 晚了 8 个小时。hugo 命令在生成静态页面的时候,默认不会生成超过当前时间的文章。所以,有三个方法可以解决问题: 可以在命令行加 --buildFuture 来生成未来的文章; 文章的 date 采用更标准的写法,采用 ISO 8601 日期时间表示法,带上时区信息; 例如:2023-12-27T17:52:08+08:00,其中的 +08:00 表示的就是北京时间了。 配置文件中增加配置 timeZone: Asia/Shangha...

git 推送报错 [remote rejected] shallow update not allowed

新建远程仓库,并将本地仓库的远程仓库改为新的地址后,执行 push 报错: [remote rejected] master -> master (shallow update not allowed) 原因是之前使用了 git clone --depth< number> 命令进行了浅层克隆。这样一个克隆的一个限制是你不能将它推送到一个新的存储库中。 先加回旧仓库的地址: git remote add old <path-to-old-remote> 然后执行: git fetch --unshallow old 这个命令是认为当前本地的这个目录下面是 shallow(不完整的),比较远端库和本地库,然后把没有的下载补齐。然后就可以推到新库了。 当然了,也可以抛弃历史包袱,改成新库再推送到新远程...

IAR for RL78 使用未声明函数引起的问题

在使用 IAR for RL78 1.30.3 时遇到一个奇怪的问题: 调用一个函数(反转 IO 口电平)时总不能达到预期结果,一通分析也查不出个所以然,最后只能通过反汇编结果分析了一下。向函数传递的是 uint8_t 参数(函数定义 void gpio_toggle(uint8_t port)),使用的却是 16 位的 AX 寄存器,低 8 位存放在 X 寄存器,但进入函数处理时却是从 A 寄存器中取值的(而不是 X),这就导致参数传递错误了。 还发现,奇怪的是在别的地方调用同样的函数却是正常的!传递参数用的是 8 位的寄存器 A: 搞糊涂了,为什么同样的函数在不同文件中调用的结果是不同的呢?而且后续还发现出问题的那个函数所在文件的其他函数也会有类似的问题。于是疯狂地怀疑这儿怀疑那儿,还怀疑是不是这个低版本的编译器存在 Bug 😅 冷静下来后排查了一下编译时的 Warning: Warning[w6]: Type conflict for external/entry "gpio_toggle", in module ... against external/entry in module hal_gpio; prototyped function vs K&R function 其实警告信息说的不够直白,实际的情况是调用了没有声明的函数(没有引用头文件或头文件中没有声明函数),所以加上声明 extern void gpio_toggle(uint8_t port); 就正常了。 反思:我没把这条警告信息当回事儿,想当然地认为编译链接不报错就应该是正确地链接了,如果是链接到找不到的函数会报错的。实在是大意了😂 找不到函数你倒是不要给我瞎传参数啊,报错也好啊!不知道更新版本的 IAR 是否存在同样的问题,年轻人真是不讲武德啊 😎 总结:认真对待每一条警告信息,耗子尾汁儿! 后记:还真是令我印象更深刻了,后续又遇到了这个问题。把一个 enum 参数传递给了函数,但进到函数后却不能正确地得到这个参数,忽然想到以前遇到过类似的问题,一查还真是没有引用相关头文...

旋转编码开关(Rotary Encoder)

旋转编码开关是一种电子开关,可以通过旋转旋钮来控制电路。它通常由一个旋转编码器和一个按键组成。旋转编码器通常由两个部分组成:旋转轴和编码器。旋转轴是一个旋转旋钮,可以通过旋转来控制电路。编码器是一个由两个感应器组成的环形装置,可以检测旋转轴的旋转方向和旋转步数。每次旋转时,编码器会输出一个二进制码来表示旋转方向和步数,从而实现精确的控制。 旋转编码开关通常用于在多个离散状态之间进行选择,如控制音量、调节屏幕亮度等功能。通过旋转编码开关,可以改变电路的连接状态,从而控制设备的功能。 常用的旋转编码开关旋转―周输出 20 个脉冲,每个脉冲代表编码开关旋转了一定的角度,旋转编码开关一般有 3 个或 5 个引脚的,5 脚的比 3 脚的仅多 2 个按键引脚,另外 3 个引脚的功能与只有 3 个引脚的旋转编码开关功能相同,分别实现旋转时输出脉冲,在对编码器进行左旋和右旋时,其输出波形如图1(a)和图1(b)所示。 判断左右旋转有多个方法,比如,A上升沿时B为低电平就表示右旋,B为高电平就表示左旋。要注意处理管脚信号的抖动。 应用电路...

燃气表 ISO7064 MOD11,10 校验

《T/CGAS 003-2017 民用智能燃气表通用技术要求》中定义了表号编制组成为: 表号由 16 位 BCD 码组成,由表厂代码(3 位)+生产年月(4 位)+流水号(6 位)+嵌入式软件代号(2 位)+校验位(1 位)构成。 校验位算法 应采用 ISO7064,MOD11,10 校验系统校验码计算方法生成。 ISO7064 MOD11,10 校验码系统属于混合系统,它在运算中采用两个模数,其中一种模数等于被保护的字符集中的字符数,另一个模数比它大 1,形成的校验码位于被保护的字符串组成的字符集...

Nginx 的 root 与 alias 的区别

Nginx 指定文件路径有两种方式 root 和 alias,指令的使用方法和作用域: root 语法:root path 配置段:http、server、location、if alias 语法:alias path 配置段:location alias 是一个目录别名的定义,root 则是根目录(父目录)的定义。关于别名,我的理解是 alias 指定的是物理路径,location 指定的则是该物理路径的别名,一个物理路径可以存在多个别...

使用 SoftEther 接入内网

有时需要从外网访问到家庭内网的资源,方法很多,这里说一下用 SoftEther 如何实现。 SoftEther 是日本筑波大学的一个研究项目,是一套开源的跨平台 VPN 软件,包括服务端、客户端、管理工具等组件。它可以虚拟几种网络设备:Hub、 网络适配器(Ethernet Adapter,客户端中支持)、网桥(Bridge )、三层交换机(Switch,支持DHCP)等。支持 SSL-VPN (HTTPS)、OpenVPN、IPsec、L2TP、MS-SSTP、L2TPv3、EtherIP 等协议,并且安装简单,方便易...

群晖(Synology)NAS 包管理工具 ipkg

虽然群晖套件中心的工具挺丰富,但需要比较偏门的工具时很可能没有。如果能有像 apt、yum 这样的软件包管理器就好了,这个确实可以有,IPKG(Itsy Package Management System)就是这样的工具。 iPKG 是一个非常轻量级的包管理系统。它是为存储资源匮乏的 Linux 系统软件安装设计的,例如掌上电脑(曾经)。它不仅可以构建软件包,还可以方便地安装和卸载。曾在 OpenWrt 系统上较为流行。由于 ipkg 项目已不再继续开发,很多项目已转粉 opkg(从 ipkg fork 的项目)。不过这不影响我们的使...