Raspberry Pico

Windows下C/C++环境搭建

https://www.lexsion.com/index.php/archives/199/

在Windows下使用C语言开始Raspberry Pi Pico开发

准备工作:

学习本文内容需要做如下准备:

  • Raspberry Pi Pico开发板和MicroUSB数据线,方便下载程序验证。
  • 运行Windows10的电脑,其他Win系统笔者无力测试,本文不适用Linux系统。
  • 足够的存储空间,建议至少8GB,因为C的工具链中某些工具或库会很大。

警告:以下的某些操作可能对您电脑中现有的某些工具链产生影响,如果您的电脑中有其他重要生产环境,谨慎考虑是否实践本文内容。如果您对此了解,相信您也能够解决遇到的问题。本人不会也没有技术对任何结果负责。

下载固件和体验MicroPython:

新接触到一款MCU或开发板,首先需要研究的就是如何搭建编译环境以及如何下载固件。大多我们需要先搭环境写出点灯程序,然后再进行固件下载。考虑此开发板支持MicroPython,且官方提供了已经编译好的MicroPython固件,在搭建开发环境前,我们可以先体验一番固件下载方式,顺便试一下MicroPython是如何点灯的。我们可以直接在官方如何开始页面,点击Getting Started with MicroPython。然后在网页上点击Download UF2 File下载文件。

文件下载完成后,按住BOOTSEL键,插入连接电脑的USB后松开BOOTSEL键,电脑上会显示一个名为RPI-RP2的大容量存储设备。将MicroPython UF2文件拖放到RPI-RP2卷上。Pico将重新启动,然后就可以使用串口工具连接MicroPython了。

我们可以在设备管理器里看到开发板串口的端口号,然后我们使用串口工具连接端口,波特率为9600。连接后可以按Ctrl+D软重启,此时应该可以看到相关提示信息。如下:

MPY: soft reboot MicroPython v1.14 on 2021-02-05; Raspberry Pi Pico with RP2040 Type "help()" for more information. >>>
Shell

官方推荐了Thonny,可以点击其官网右上角超链接下载最新版本。安装后点击工具设置,在解释器选项卡下设置解释器为Pico,并正确设置端口号。即可在下面的Shell窗口中看到提示信息。

逐行输入以下代码(>>>忽略)可以点亮板上LED:

>>> from machine import Pin >>> led = Pin(25, Pin.OUT) >>> led.value(1)
Python

如果硬件正常,操作没有问题,此时板载LED已经点亮。我们便学会了如何下载固件和使用MicroPython点亮LED灯。如果想继续学习MicroPython,可参阅官方文档。

搭建C/C++编译环境:

安装工具链:

搭建编译环境的环节是必不可少的。我们首先按照文档说明安装工具链(Toolchain)。

我们需要安装的工具有:

  1. ARM GCC compiler(Windows 系统下载gcc-arm-none-eabi-XX-20XX-XX-major-win32.exe)
  2. CMake
  3. Build Tools for Visual Studio 2019(从下方的所有下载处展开VS2019工具,选择下载生成工具)
  4. Python 3(需要下载Python3,而不是Python2)
  5. Git

注意:

  1. ARM GCC compiler安装过程的最后一步,需要勾选Add path to environment variable,然后再点Finish完成安装;CMake安装过程中,InstallOptions页面要选择Add Cmake to the system PATH for all users。如果以上两个环境变量相关设置不正确,则会导致编译过程相关命令无法调用而失败。
  2. 通过VS2019生成工具下载器安装生成工具的时候,只需要在工作负载中勾选安装C++ 生成工具即可,其他不需要选择。右侧的可选功能会自动帮你选好,不要取消勾选 。也不要对存储空间占用有怀疑,这套工具确实非常大。
  3. 安装Python时需要选择Customize installation,然后在Advance Options页勾选Install for all users、Add Python to environment variables,并设置安装路径,最后点击Install开始安装,安装完成后还需要点击Disable path length limit以允许忽略MAX_PATH限制。
  4. 安装Git时,树莓派基金会官方文档做了如下要求(建议):需要换掉默认的vim编辑器,比如我换成了notepad++(因为使用vim需要极强的专业性,Git本身也建议换掉,但感觉是非必须项);后面的设置需要勾选third-party tools,勾选Checkout as is, commit as-is,还需要勾选Enable experimental support for pseudo consoles。

获取SDK和样例:

参考以下代码使用Git获取SDK和样例,具体使用的文件目录按情况自行配置:

C:\Users\pico\Downloads> git clone -b master https://github.com/raspberrypi/pico-sdk.git C:\Users\pico\Downloads> cd pico-sdk C:\Users\pico\Downloads\pico-sdk> git submodule update --init C:\Users\pico\Downloads\pico-sdk> cd .. C:\Users\pico\Downloads> git clone -b master https://github.com/raspberrypi/pico-examples.git
Shell

开始菜单搜索我习惯搜索Dev),找到Developer Command Prompt for VS 2019并启动它,然后在里面运行以下命令设置SDK路径(引号中的具体路径按实际情况填写):

C:\Users\pico\Downloads> setx PICO_SDK_PATH "..\..\pico-sdk"
Shell

关闭当前的窗口,重新打开Developer Command Prompt for VS 2019,这样环境变量应该就生效了。

导航到pico-examples目录下,通过以下命令尝试编译样例项目,以验证编译工具链是否正确配置:

C:\Users\pico\Downloads> cd pico-examples C:\Users\pico\Downloads\pico-examples> mkdir build C:\Users\pico\Downloads\pico-examples> cd build C:\Users\pico\Downloads\pico-examples\build> cmake -G "NMake Makefiles" .. C:\Users\pico\Downloads\pico-examples\build> nmake
Shell

如果没有错误,能够正常完成编译,能够在pico-examples\build下看到uf2文件,并且按照前文的方式将固件下载到Pico中后LED按照1s周期闪烁。即表示编译工具链可正常工作。

注意:以上必须使用Developer Command Prompt for VS 2019而不是系统自带的命令提示符,因为使用此工具会自带相关环境变量,而系统的命令提示符没有,使用系统的命令提示符执行操作无法成功编译。

自建工程:

确认编译工具链正常后,我们便可以开始尝试写一个自己的工程了,这在SDK的RADEME.md文件中有介绍。文档中的介绍是基于Linux系统的,但没关系,工程的目录结构是通用的,我们可以参考。以下我们参考文档建一个闪灯程序。

  1. 在合适的地方新建一个文件夹,以工程名字命名,名字建议避免使用中文和特殊符号。此处我命名为:Blinks。在文件夹内再建一个名为build的文件夹,用于存储编译后的文件。

  2. pico-sdkexternal文件夹下的pico_sdk_import.cmake复制到工程文件夹下(即Blinks下)。

  3. Blinks文件夹下建立名为blinks.c的源代码文件,在此文件中编写程序源代码。比如闪灯程序源代码如下:

     #include "pico/stdlib.h" const uint LED_PIN = 25; int main() { gpio_init(LED_PIN); gpio_set_dir(LED_PIN, GPIO_OUT); while (true) { gpio_put(LED_PIN, 1); sleep_ms(100); gpio_put(LED_PIN, 0); sleep_ms(100); } }
    C
  4. 在工程文件夹下创建CMakeLists.txt文件,内容参考如下。以#开始的行是注释,用于解释,编写代码时请勿直接抄写,建议使用英文注释。

    cmake_minimum_required(VERSION 3.12) # 引入SDK (必须写在下面的project行前) include(pico_sdk_import.cmake) # 工程名,比如Blinks project(Blinks) # 初始化SDK pico_sdk_init() #添加项目的源文件,比如此处我们添加的blinks.c源文件 add_executable(blinks blinks.c ) # 引入pico_stdlib库 target_link_libraries(blinks pico_stdlib) # 创建map/bin/hex 等文件. pico_add_extra_outputs(blinks)
    Makefile
  5. 打开Developer Command Prompt for VS 2019,通过以下命令编译项目。

    C:\Users\pico\Downloads> cd Blinks C:\Users\pico\Downloads\Blinks> cd build C:\Users\pico\Downloads\Blinks\build> cmake -G "NMake Makefiles" .. C:\Users\pico\Downloads\Blinks\build> nmake
    Shell
  6. 如果一切正常,我们便可以在build文件夹下得到项目编译产生的文件,其中的uf2文件可以按前文方法下载到Pico开发板中验证,看运行结果是否与代码设计一致。

结语:

至此,我们便学会了Raspberry Pi Pico开发板点灯,后面具体可参考树莓派基金会官方提供的相关文档学习。祝大家学习顺利。

参考:

  1. 官方产品页:https://www.raspberrypi.org/products/raspberry-pi-pico/
  2. Getting-started:https://www.raspberrypi.org/documentation/pico/getting-started/
  3. Pico-SDK代码:https://github.com/raspberrypi/pico-sdk
  4. Pico-example代码:https://github.com/raspberrypi/pico-examples

树莓派 wiringPi库 学习

wiringPi是一个很棒的树莓派IO控制库,使用C语言开发,提供了丰富的接口:GPIO控制,中断,多线程。

官方网站是:http://wiringpi.com/

wiringPi库是由Gordon Henderson所编写维护的一个用C语言写成的类库。起初主要是作为 BCM2835 芯片的 GPIO 库。而现在,已经非常丰富,除了 GPIO 库,还包括了I2C 库、SPI 库、UART 库和软件 PWM 库等。由于其与 Arduino 的“wiring”系统较为类似,故以此命名。它是采用 GNU LGPL v3 许可证的,可以在 C 或 C++上使用,而且在其他编程语言上也有对应的扩展。

wiringPi 库包含了一个命令行工具 gpio,它可以用来设置 GPIO 管脚,可以用来读写 GPIO 管脚,甚至可以在 Shell 脚本中使用来达到控制 GPIO 管脚的目的。

阅读剩余部分 -

智慧菜园

直流 继电器 加二极管 https://shumeipai.nxez.com/2019/06/10/a-raspberry-pi-powered-junk-drum-machine.html https://blog.csdn.net/weixin_37845646/article/details/104686072 续流二极管的作用 续流二极管通常和储能元件一起使用,其作用是防止电路中电压电流的突变,为反向电动势提供耗电通路。电感线圈可以经过它给负载提供持续的电流,以免负载电流突变,起到平滑电流的作用!在开关电源中,就能见到一个由二极管和电阻串连起来构成的的续流电路。这个电路与变压器原边并联。当开关管关断时,续流电路可以释放掉变压器线圈中储存的能量 BUCK电路中一般选择快速恢复二极管或者肖特基二极管来作为"续流二极管",它在电路中一般用来保护元件不被感应电压击穿或烧坏,以并联的方式接到产生感应电动势的元件两端,并与其形成回路,使其产生的高电动势在回路以续电流方式消耗,从而起到保护电路中的元件不被损坏的作用。 理论上二极管选用至少2倍于最大电流,实际使用时,由于二极管的瞬间抗过载能力较强,使用最大电流50A的超快速二极管也行,加上合理的散热片,实际使用中一般少有损坏。导通时的总阻抗是电机内阻+驱动管等效内阻。续流时的总阻抗是电机内阻+续流二极管等效内阻。一般情况下,由于续流二极管的交流等效内阻要比驱动三极管的交流等效内阻小。所以常规设计,一般续流二极管的最大电流,取二倍于电机最大电流。 瞬态电流只是一瞬间,面接触型二极管的抗过载能力还是可以的,只要不过压即可,必要时串个小阻值电阻进行限流。续流二极管是为了保护开关器件,续流时的瞬态电流跟电机的工作电压和绕组内阻有关,跟电机功率无关,真要计算的话,瞬态电流的峰值是反向自感电压减去二极管结压降再除以回路电阻。 这里之所以还要用一定电流以上的二极管是因为低压大功率电机的绕组内阻较低,所以瞬态电流会比较大,串个小阻值电阻就可以抑制峰值电流,因此造成的开关管瞬态加压的些许上升因为工作电压本来就不高,所以根本不必担心,现在的晶体管耐压至少都在50V以上。 继电器续流二极管的选择 继电器并联的二极管,不是什么BUCK电路中的续流二极管,由于继电器线圈的是感性负载,作用是吸收驱动三极管在断开时继电器线圈的自感电压,根据楞次定律,电感上的电流在减小时,会产生一个自感电压,这个电压的方向是正电源端为负,驱动管集电极为正,这个电压会击穿三极管,所以在继电器上并联一个吸收二极管,吸收这个自感电压。 第一,电路ms级以下时间参数对机械触点影响给予忽略 第二,即便是1N4000反向恢复时间也远低于ms,正向导通时间更小 第三,驱动管极间电容,继电器寄生电容足以使高速二极管无用武之地 第四,电感储能的消耗主要依靠绕组电阻,一般处于过阻尼状态 对于图中的开关,我们经常使用晶体管。如图所示,用一个晶体管TR1去控制继电器线圈(relay coil)的导通,继电器触点再去控制负载电路 实践经验 凡是电路中的继电器线圈两端和电磁阀接口两端都要接续流二极管。接法如上面的图,二极管的负极接线圈的正极,二极管的正极接线圈的负极。不过,你要清楚,续流二极管并不是利用二极管的反方向耐压特性,而是利用二极管的单方向正向导通特性。 如果懒得看二极管的datasheet参数,就用FR107吧,通吃一般应用。

CentOS 备份和恢复的折腾结论

一直都知道Centos可以全盘压缩备份。

正好赶上PVE各种问题,决定换回ESXI,结果网上都是说ESXI迁移PVE的。这可麻烦了。只好对系统本身进行备份迁移。

结果各种状况出现,最终找到了一个尝试4小时不停重装试错的正确路径。

阅读剩余部分 -

[收集]CSP/CCF 认证, 关于编程语言选择

认证来了!
最近学校组织进行新一轮的 CSP/CCF 认证, 对算法不熟悉没什么底, 准备从今天开始练习一下基础.

认证前, 我知道什么?
说一下认证前的准备吧, 首先就纠结在报名的语言上了, 本来以为只能用 C, 结果现在能用的有 C/C++, Java, Python. 本来想要报名 Pyhton 结果被 Python 的 IDLE 恶心住了, 连调试功能都难用的一批, 什么时候才能用上 vscode 呀!

在 C/C++ 和 Java 的选择上, 还是选择了 Java. 不是对 C/C++ 不熟悉, 而是 C 的标准在这里面太乱了, 很难保证在你电脑上正确的代码到了服务器会是什么样子, 所以还是选择了 Java.

同一段代码, 运行差异很大, 谨慎选择!
我在官网环境上测试同一段代码, 耗时长和占内存情况如下

时间: C/C++ < Python < Java
内存: C/C++ < Python < Java
感觉 Java 确实没多大优势.

题目难度
看了一下模拟题, 感觉题难度的阶梯有点悬殊, 简单的题不用多想, 但是难得题从语文上就需要仔细斟酌.

期望
图片和代码, 网址都没贴太多, 等考完试, 仔细和大家说一下感受, 给大家点建议, 今天9/7 天, 离考试还有 7 天左右, 希望自己可以从小白变成大神.

20200706 载入史册的暴涨期间还能做些什么?没错!套利。

2020年7月注定是是载入史册的7月,以当下今日更甚,可惜不才,跨式叠加备兑失衡,遭遇Gamma重击,形成了个人投资历史上的至黑时刻,创造最大亏损。但是痛心疾首向来不是解决问题的途径。今天讨论的不是反应慢半拍的研判失误,而是面对情绪高涨的暴涨,我们无股可买,空仓者还能参与点什么。

阅读剩余部分 -