首先下载golang安装包，版本号根据需要修改。wget https://dl.google.com/go/go1.22.1.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.22.1.linux-amd64.tar.gz 设置环境变量，并生效。echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bash_profile echo 'export GOPATH=$HOME/go' >> ~/.bash_profile source ~/.bash_profile 检查安装成功与否go version 安装好了就可以在go项目目录下运行go get下载依赖，运行go build编译。
解决'go get' is no longer supported outside a module.问题
执行go get命令，提示：go: go.mod file not found in current directory or any parent directory. 'go get' is no longer supported outside a module. To build and install a command, use 'go install' with a version, like 'go install example.com/cmd@latest' For more information, see https://golang.org/doc/go-get-install-deprecation or run 'go help get' or 'go help install'.这个错误提示说明当前目录或其父目录中都找不到 go.mod 文件，而且在 Go 1.16 版本之后，使用 go get 命令在没有模块的情况下是不再支持的。要解决这个问题，你可以按照以下步骤进行操作：确保你的工作目录是正确的。进入你的项目根目录，或者创建一个新的模块。如果你已经有了 go.mod 文件，请确认它是否存在于正确的位置，并且文件名为 “go.mod”。如果你还没有创建 go.mod 文件，则需要通过运行 go mod init 命令来初始化一个新模块：go mod init <module-name> 这将会在当前目录下生成一个新的 go.mod 文件，并设置模块名称为 <module-name>。完成上述步骤后，应该就能够成功运行 go get 或其他相关命令了。如果问题仍然存在，请确保你安装了最新版本的 Go 并且环境配置正确。
自制Arduboy有一个包arduboy_homemade可以简化我们arduino配置工作，并扩展了不少功能。地址如下https://github.com/MrBlinky/Arduboy-homemade-package。安装这个包只要在Arduino IDE文件->首选项,把https://raw.githubusercontent.com/MrBlinky/Arduboy-homemade-package/master/package_arduboy_homemade_index.json 添加到“其它开发板管理器地址”。然后在开发板管理中下载包即可，当然也可以在github下载zip包后离线添加。在github主页，有一个表格Pin wiring table，里面详细说明了引脚链接,为使用方便，直接复制在这儿。Arduboy functionArduboy Leonardo/MicroDevelopmentKitProMicro 5V (standard wiring)ProMicro 5V (alternate wiring)OLED CS12 PORTD66 PORTD7GND/(inverted CART_CS)**1/TXO PORTD3*OLED DC4 PORTD44 PORTD44 PORTD44 PORTD4OLED RST6 PORTD712 PORTD66 PORTD72 PORTD1*SPI SCK15 PORTB115 PORTB115 PORTB 115 PORTB1SPI MOSI16 PORTB216 PORTB216 PORTB216 PORTB2RGB LED RED10 PORTB6_10 PORTB610 PORTB6RGB LED GREEN11 PORTB7_-3 PORTD0*RGB LED BLUE9 PORTB517 PORTB09 PORTB59 PORTB5RxLED17 PORTB0_17 PORTB017 PORTB0TxLED30 PORTD5_30 PORTD530 PORTD5BUTTON UPA0 PORTF78 PORTB4A0 PORTF7A0 PORTF7BUTTON RIGHTA1 PORTF65 PORTC6A1 PORTF6A1 PORTF6BUTTON LEFTA2 PORTF59 PORTB5A2 PORTF5A2 PORTF5BUTTON DOWNA3 PORTF410 PORTB6A3 PORTF4A3 PORTF4BUTTON A (left)7 PORTE6A0 PORTF77 PORTE67 PORTE6BUTTON B (right)8 PORTB4A1 PORTF68 PORTB48 PORTB4SPEAKER PIN 15 PORTC6A2 PORTF55 PORTC65 PORTC6SPEAKER PIN 213 PORTC7A3 PORTF4**GND6 PORTD7*CART_CS (org)0 PORTD2*-0 PORTD2*0 PORTD2*CART_CS (new)2 PORTD1*-2 PORTD1*-SPI MISO14 PORTB3*--14 PORTB3*OLED SDA4 PORTD4*-4 PORTD4*4 PORTD4*OLED SCL6 PORTD7*-6 PORTD7*1/TXO PORTD3*安装完arduboy_homemade之后，把开发板设置为homemade Arduboy,自制Arduboy最简单的就是使用Arduino Pro micro这个板子。在开发板设置里面可以设置为如下图所示。Based on里面有两个关于Pro micro的选项。一个是标准接线，一个是备用接线，分别对应上面表格里面最右边两列，按照表格接线即可。Bootloader选项，选择Cathy3K(start with menu),可以支持外挂Flash芯片，上传游戏合集包。Display选择SSD1306是兼容性最强的，这样设置烧录的Bootloader可以直接使用编译好的游戏和游戏合集包，使用Arduboy-uploader这个工具上传即可。而使用其它的显示屏则只能使用Arduino IDE编译游戏源码上传游戏。我这里测试SH1103 IIC支持不好，画面抖动厉害。Flash select这个选项是专门针对外挂Flash芯片的，就是在PD2（RX1）和PD1（2）中选择一个作为SPIFlash的片选（CS）引脚，不外挂Flash可以不用理它。使用外挂Flash芯片还有一个要注意的是，我们SPI显示屏的SCL和SDA是和Flash芯片共用的，这个时候显示屏的CS引脚接地（始终激活）就行不通了，表现为在游戏菜单选择界面无法正常显示，进入游戏后正常。直接用ATMEGA32U4芯片自制Arduboy的话一般是将显示屏片选引脚接芯片的PD6脚，但是Pro micro这个板子没有将这个引脚引出来。但是根据arduboy_homemade主页说明可以使用三级管和两个电阻组成非门电路，达到在Flash芯片的CS引脚激活时，关闭显示器CS引脚激活状态的目的。整个Arduboy接线如下。效果视频：https://www.bilibili.com/video/BV1Jz4y1A7qz/关于使用Arduino UNO给Pro micro烧录Bootloader接线如下。
Android Studio Giraffe | 2022.3.1版本解决创建项目下载gradle缓慢问题
新版本Android Studio的maven写法改变了，所以网上的老版本的修改gradle下载源的方法都无效了，改完会报错Unexpected tokens (use ';' to separate expressions on the same line)。新的版本方法如下。找到如下所示settings.gradle.kts。打开后在两个地方添加如下代码 maven { url =uri("https://plugins.gradle.org/m2/")} maven { url =uri("https://maven.aliyun.com/nexus/content/repositories/google")} maven { url =uri("https://maven.aliyun.com/nexus/content/groups/public") } maven { url =uri("https://maven.aliyun.com/nexus/content/repositories/jcenter")}改完后这样。pluginManagement { repositories { maven { url =uri("https://plugins.gradle.org/m2/")} maven { url =uri("https://maven.aliyun.com/nexus/content/repositories/google")} maven { url =uri("https://maven.aliyun.com/nexus/content/groups/public") } maven { url =uri("https://maven.aliyun.com/nexus/content/repositories/jcenter")} google() mavenCentral() gradlePluginPortal() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { maven { url =uri("https://plugins.gradle.org/m2/")} maven { url =uri("https://maven.aliyun.com/nexus/content/repositories/google")} maven { url =uri("https://maven.aliyun.com/nexus/content/groups/public") } maven { url =uri("https://maven.aliyun.com/nexus/content/repositories/jcenter")} google() mavenCentral() } } rootProject.name = "My Application" include(":app")
由于Keil收费，想要免费的替代，SDCC是51单片机开发不错的选择。这里用VSCode、EIDE和SDCC编译器组合来进行51单片机开发。1.首先安装SDCC编译器，SDCC的特点是免费、开源和跨平台，下载地址：https://sourceforge.net/projects/sdcc/files/。2.安装VSCode和EIDE，在VSCode扩展里面找到Embedded IDE并安装。3.设置EIDE，一般情况下在安装好SDCC后安装EIDE，工具链路径已经默认设置为SDCC，如果没设置好就手动设置一下。4.开始开发，打开EIDE，新建项目，选择模板，可以选择现成的模板，比如内置项目模板和从远程仓库获取里面都有针对51单片机的专门模板（带SDCC Toolchain或者with sdcc compiler的），当然也可以选择空项目->8位MCU项目，键入项目名称，选择项目保存位置，切换工作区，点左侧构建配置：SDCC->构建器选项->全局选项，在下面的编译器附加选项（全局）里面填入：--iram-size 128 --xram-size 0 --code-size 4096，这段设置对应的是STC15F104W单片机，其它单片机自行修改，然后点右上全部保存。这样就设置好了，可以开发了。--iram-size 128 --xram-size 0 --code-size 4096 \\参数说明 iram-size 用来检查片内ram的使用情况 xram-size 用来检查外部ram的使用情况 code-size 用来检查rom的使用情况 stack-size 用来检查堆栈的使用情况5.SDCC和Keil在语法上还是有一些区别的。1.sbit keil C： sbit SDA = P1 ^ 5; sbit CLK_ST = P1 ^ 6; SDCC: #define SDA P1_5 #define CLK_ST P1_6 2.中断 在sdcc中，中断处理函数使用关键字__interrupt标识，后面跟上中断号 keil C： void SerialComm() interrupt 4 SDCC: void SerialComm() __interrupt 4 3._nop_() 在sdcc中，没有_nop_()，可以用 #define _nop_() __asm NOP __endasm 替代 SDCC: #define _nop_() __asm NOP __endasm
添加引用ICSharpCode.SharpZipLib.dll、NPOI.dll、NPOI.OOXML.dll、NPOI.OpenXml4Net.dll、NPOI.OpenXmlFormats.dll，这几个dll文件NPOI官网上只能下载到源码，编译有些麻烦。这里找到一个现成的，http://www.itmop.com/downinfo/267826.html。源码如下。using System; using System.Collections.Generic; using System.Windows.Forms; using NPOI.XWPF.UserModel; using System.IO; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { openFileDialog1.Title = "选择word文件"; openFileDialog1.Filter = "Word文档|*.docx"; if (openFileDialog1.ShowDialog() == DialogResult.OK) { textBox1.Text = openFileDialog1.FileName; } } private void button2_Click(object sender, EventArgs e) { //遍历word文档所有段落，并存入文本文件 FileStream fs = new FileStream(textBox1.Text, FileMode.Open); XWPFDocument doc = new XWPFDocument(fs); IList<XWPFParagraph> paragraphs = doc.Paragraphs; foreach(XWPFParagraph paragraph in paragraphs) { File.AppendAllText("⽂本1.txt", paragraph.Text); } } } }