解决 gcc + openocd + stm32 烧录程序时覆盖 bootloader 的问题

我希望将 bootloader 放到 0x08000000,主程序放到 0x08008000。gcc 编译时默认会把 Program Header 的 Align 调到 0x10000,导致产生的 ELF 文件的加载地址从 0x08000000 起始,openocd 烧写时会覆盖掉 bootloader,产生麻烦。解决办法是在链接器参数中增加 -z max-page-size=4096,调小页面大小;或者直接增加 -n选项,让 Program Header 不要对齐。修改后,烧录时就不会覆盖掉 bootloader 了。

APC BP1000CH UPS 调试记录

TL;DR: 这是一款套牌产品,实际使用的不是 APC 的协议,而是 Voltronic 的协议。这款 UPS 可以用 NUT 工具来连接电脑,实现 Linux 系统下的自动关机,只需使用 https://networkupstools.org/protocols/voltronic-qs.html 协议就行了。

更新:这款 UPS 输出是方波(最廉价的方案),不兼容带有主动 PFC 的电源(现在市面上大部分电脑电源都是这种电源),会导致供电不稳定、不开机等问题,强烈不建议购买!!

解决 Linux 下 Vivado 字体渲染异常、崩溃的问题

众所周知 Xilinx Vivado 在 Linux 下存在诸如字体渲染丑陋、不定期崩溃的问题,今天试了一下,可以替换自带的 JRE 为 Intellij IDEA 的 JRE,就可以解决多数问题。不过,如果直接替换 jre 目录,会出现找不到 com.sun.java.swing.plaf.windows.WindowsLookAndFeel的错误。经过一番折腾从原始 jdk 里面提取了这个类,将它补全到 classes 目录里面就可以了。

经过一段时间的测试暂时没发现什么问题,仿真、综合、下载功能都是正常运行的,如果有其他问题请在下面评论区补充。

给出替换使用的脚本,供大家参考:

$VIVADO_HOME=/mnt/largejunk/Xilinx/Vivado/2019.1
$JBR_HOME=/opt/intellij-idea-ultimate-edition/jbr/
cd $VIVADO_HOME/tps/lnx64
mv jre9.0.4 jre9.0.4-bak
ln -s $JBR_HOME jre9.0.4
cd $VIVADO_HOME/lib/classes
wget --content-disposition "https://seafile.t123yh.xyz:2/f/f260c2f5132541549e86/?dl=1"  # Add the WindowsLookAndFeel absent in Linux JREs.

计组经验分享

经过半个学期的努力,大部分同学已经来到了险象环生的 P5 和 P6。P5 和 P6 已不再像程设、数据结构等课程作业一样只是功能单一、结构简单的设计,相反,我们设计的 CPU 是一个由多个部件组成的有机整体。因此,我们必须对系统进行良好的规划,让它拥有简洁优美的设计,并能稳定工作。

继续阅读“计组经验分享”

51 单片机中断、定时器简介及其应用

本文介绍中断(interrupt)的基本概念,并演示定时器中断、外部中断的使用方法。如果同学们对文章内容有疑问,或发现文中有任何不妥之处,请在页面末尾评论区留言,我会及时回复并订正。

继续阅读“51 单片机中断、定时器简介及其应用”

I²C 总线简介及其在 51 单片机上的应用

本文对 I²C 总线的协议做出详细的介绍,并对其在 51 单片机上的应用代码做出解析。如果同学们对文章内容有疑问,或发现文中有任何不妥之处,请在页面末尾评论区留言,我会及时回复并订正。

继续阅读“I²C 总线简介及其在 51 单片机上的应用”