一、目的

细心的朋友可能会发现官方提供了pico-examples仓库,示例代码都是作为一个文件夹的形式放在此仓库下,那么如果我们自己创建一个工程,是不是一定要放在这个仓库下呢?

答案是否定的,我们完全可以自己创建一个文件夹,然后添加源码文件和CMakeLists.txt文件就可以做到。

二、准备

我们先创建一个目录用于存放我们工程

$ mkdir -p ~/workspace/work/pico/blink

添加代码文件后如下

$ tree
.
├── CMakeLists.txt
├── main
│   └── main.c
└── pico_sdk_import.cmake1 directory, 3 files

main.c文件其实就是pico-examples/blink/blink.c文件

pico_sdk_import.cmake文件是从pico-sdk中拷贝过来的

$ cp $PICO_SDK_PATH/external/pico_sdk_import.cmake .

我们主要看一下CMakeLists.txt文件内容

cmake_minimum_required(VERSION 3.13)
include(pico_sdk_import.cmake)
project(blink C CXX ASM)
pico_sdk_init()add_executable(blinkmain/main.c)# pull in common dependencies
target_link_libraries(blink pico_stdlib)# create map/bin/hex file etc.
pico_add_extra_outputs(blink)

其中cmake_minimum_requiresd指定cmake的最低版本;

include指定需要包含pico-sdk里面的cmake依赖文件;

project指定工程名以及编译此工程时涉及到的语言,包括C/C++/ASM;

pico_sdk_init初始化pico sdk;

add_executable指定需要编译的源码文件;

target_link_libraries告诉cmake最终的blink需要链接pico_stdlib库文件;

pico_add_extra_outpus告诉cmake需要生成一些额外的文件,包括map/bin/hex文件以及blink.uf2文件 ;

三、实战

下面我们开始配置工程

$ cd ~/workspace/work/pico/blink
$ mkdir build
$ cd build/
$ cmake ..
Using PICO_SDK_PATH from environment ('/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk')
PICO_SDK_PATH is /Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
Defaulting PICO platform compiler to pico_arm_gcc since not specified.
-- Defaulting build type to 'Release' since not specified.
PICO compiler is pico_arm_gcc
-- The C compiler identification is GNU 10.3.1
-- The CXX compiler identification is GNU 10.3.1
-- The ASM compiler identification is GNU
-- Found assembler: /Users/你的用户名/workspace/third/raspberry_pi_pico/toolchain/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-gcc
Defaulting PICO target board to pico since not specified.
Using board configuration from /Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/boards/include/boards/pico.h
-- Found Python3: /usr/local/Frameworks/Python.framework/Versions/3.9/bin/python3.9 (found version "3.9.2") found components: Interpreter
TinyUSB available at /Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; enabling build support for USB.
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/你的用户名/workspace/work/pico/blink/build

如果需要编译出debug版本,可以执行以下命令

$ cmake  -DCMAKE_BUILD_TYPE=Debug ..

开始编译

$ make

编译后输出

你的用户名@bogon:~/workspace/work/pico/blink/build$make
Scanning dependencies of target ELF2UF2Build
[  1%] Creating directories for 'ELF2UF2Build'
[  3%] No download step for 'ELF2UF2Build'
[  5%] No update step for 'ELF2UF2Build'
[  6%] No patch step for 'ELF2UF2Build'
[  8%] Performing configure step for 'ELF2UF2Build'
-- The C compiler identification is AppleClang 13.0.0.13000029
-- The CXX compiler identification is AppleClang 13.0.0.13000029
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/你的用户名/workspace/work/pico/blink/build/elf2uf2
[ 10%] Performing build step for 'ELF2UF2Build'
Scanning dependencies of target elf2uf2
[ 50%] Building CXX object CMakeFiles/elf2uf2.dir/main.cpp.o
[100%] Linking CXX executable elf2uf2
[100%] Built target elf2uf2
[ 11%] No install step for 'ELF2UF2Build'
[ 13%] Completed 'ELF2UF2Build'
[ 13%] Built target ELF2UF2Build
Scanning dependencies of target bs2_default
[ 15%] Building ASM object pico-sdk/src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/compile_time_choice.S.obj
[ 16%] Linking ASM executable bs2_default.elf
[ 16%] Built target bs2_default
Scanning dependencies of target bs2_default_padded_checksummed_asm
[ 18%] Generating bs2_default.bin
[ 20%] Generating bs2_default_padded_checksummed.S
[ 20%] Built target bs2_default_padded_checksummed_asm
Scanning dependencies of target blink
[ 22%] Building C object CMakeFiles/blink.dir/main/main.c.obj
[ 23%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_stdlib/stdlib.c.obj
[ 25%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/hardware_gpio/gpio.c.obj
[ 27%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/hardware_claim/claim.c.obj
[ 28%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_platform/platform.c.obj
[ 30%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/hardware_sync/sync.c.obj
[ 32%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/hardware_uart/uart.c.obj
[ 33%] Building ASM object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/hardware_divider/divider.S.obj
[ 35%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/common/pico_time/time.c.obj
[ 37%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/common/pico_time/timeout_helper.c.obj
[ 38%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/hardware_timer/timer.c.obj
[ 40%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/common/pico_sync/sem.c.obj
[ 42%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/common/pico_sync/lock_core.c.obj
[ 44%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/common/pico_sync/mutex.c.obj
[ 45%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/common/pico_sync/critical_section.c.obj
[ 47%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/common/pico_util/datetime.c.obj
[ 49%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/common/pico_util/pheap.c.obj
[ 50%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/common/pico_util/queue.c.obj
[ 52%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_runtime/runtime.c.obj
[ 54%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/hardware_clocks/clocks.c.obj
[ 55%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/hardware_irq/irq.c.obj
[ 57%] Building ASM object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/hardware_irq/irq_handler_chain.S.obj
[ 59%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/hardware_pll/pll.c.obj
[ 61%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/hardware_vreg/vreg.c.obj
[ 62%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/hardware_watchdog/watchdog.c.obj
[ 64%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/hardware_xosc/xosc.c.obj
[ 66%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_printf/printf.c.obj
[ 67%] Building ASM object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_bit_ops/bit_ops_aeabi.S.obj
[ 69%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_bootrom/bootrom.c.obj
[ 71%] Building ASM object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_divider/divider.S.obj
[ 72%] Building ASM object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_double/double_aeabi.S.obj
[ 74%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_double/double_init_rom.c.obj
[ 76%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_double/double_math.c.obj
[ 77%] Building ASM object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_double/double_v1_rom_shim.S.obj
[ 79%] Building ASM object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S.obj
[ 81%] Building ASM object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_float/float_aeabi.S.obj
[ 83%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_float/float_init_rom.c.obj
[ 84%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_float/float_math.c.obj
[ 86%] Building ASM object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_float/float_v1_rom_shim.S.obj
[ 88%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_malloc/pico_malloc.c.obj
[ 89%] Building ASM object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_mem_ops/mem_ops_aeabi.S.obj
[ 91%] Building ASM object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_standard_link/crt0.S.obj
[ 93%] Building CXX object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp.obj
[ 94%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_standard_link/binary_info.c.obj
[ 96%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_stdio/stdio.c.obj
[ 98%] Building C object CMakeFiles/blink.dir/Users/你的用户名/workspace/third/raspberry_pi_pico/pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c.obj
[100%] Linking CXX executable blink.elf
[100%] Built target blink

我们查看以下build目录下的内容

$ tree -L 1
.
├── CMakeCache.txt
├── CMakeFiles
├── Makefile
├── blink.bin
├── blink.dis
├── blink.elf
├── blink.elf.map
├── blink.hex
├── blink.uf2
├── cmake_install.cmake
├── elf2uf2
├── generated
└── pico-sdk

其中blink.elf/blink.uf2/blink.bin就是我们的固件文件(只需要烧写其中任何一个)。

关于烧写步骤参考其他博文中的说明,都是一样的过程,此处不再赘述

下篇我们将介绍如何通过SWD烧写和调试程序。

Raspberry-Pi-PICO系列--第七篇 创建自己的工程相关推荐

  1. 在 Windows 中编程 Raspberry Pi Pico 的初学者指南

    在 Windows 中编程 Raspberry Pi Pico 的初学者指南 在本教程中,我们将了解如何在 Windows 系统中安装和设置用于编程 Raspberry Pi Pico 的 Visua ...

  2. 如何安装WIZnet库到Raspberry Pi PICO

    在您开始在Raspberry Pi PICO上使用WIZnet的以太网解决方案之前,在使用它之前需要几步的安装步骤. 连接WIZnet产品与Raspberry Pi PICO -如果您正在使用WIZn ...

  3. 物联网开发笔记(69)- 使用Micropython开发树莓派pico开发板raspberry pi pico之控制晶联JLX172104G-590液晶模块

    一.目的 这一节我们学习如何使用我们的树莓派pico开发板raspberry pi pico来控制晶联JLX172104G-590液晶模块. 二.环境 Win10 + 树莓派pico开发板raspbe ...

  4. 智能垃圾桶(十二)——电路图软件fritzing+raspberry pi pico(树莓派pico)

    文章目录 一.起因 二.raspberry pi pico元件库 三.小试牛刀 一.起因 总是看到这种图,却一直不知道叫啥,上午搜索半天才知道是电路图软件fritzing,找了找官网,发现不是免费,伤 ...

  5. 树莓派Pico(Raspberry Pi Pico) Windows开发环境—①开发工具链的安装

    Windows 下搭建 树莓派Pico(Raspberry Pi Pico) 的开发环境 在Microsoft Windows上安装工具链与其他平台有所不同.然而,一旦安装,RP2040的构建代码有点 ...

  6. 树莓派-Raspberry Pi Pico RP2040 使用大全(硬件接口功能、传感器模块等)

    树莓派-RP2040 主板实物图 主板引脚图 Thonny开发IDE工具 查看帮助信息 GPIO 输出 GPIO 输入 GPIO 中断 ADC(模数转换) PWM(脉宽调制) WDT看门狗 RTC实时 ...

  7. 树莓派出微控制器了!Raspberry Pi Pico 只需 4 美元

    整理 | 郑丽媛 来源 | CSDN(ID:CSDNnews) 昨天,树莓派搞了个大动作:推出了首款微控制器开发板 Raspberry Pi Pico!该开发板基于树莓派开发的全新芯片--RP2040 ...

  8. RASPBERRY PI PICO 开发板 基础测试

    ▌01 PI PICO 颜色名 十六进制颜色值 颜色 Coral #FF7F50 rgb(255, 127, 80) 1.安装与上载程序 在 RASPBERRY PI PICO 树莓派PICO开发板双 ...

  9. RASPBERRY PI PICO 树莓派PICO开发板双核高性能低功耗RP2040芯片

    ▌01 RASPBERRY PICO 1.简介 RaspBerry Pi Pico是一款低价格.高性能的微控制器电路板,具有丰富灵活的数字接口,主要特点包括有: RP2040 microcontrol ...

  10. 树莓派竟出微控制器了!Raspberry Pi Pico 只需 4 美元!

    [CSDN 编者按]树莓派进军微控制器市场了!而这场改革的开始只需 4 美元? 整理 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 昨天,树莓派搞了个大动作:推出了首款微控制器开发板 Ra ...

最新文章

  1. 手把手教你使用 YOLOV5 训练目标检测模型
  2. 程序员薪资两极分化,如何成为高薪程序员?
  3. 010——VUE中使用lodash库减少watch对后台请求的压力
  4. php的div和p的区别,p标签与div标签区别
  5. Android输入系统(三)InputReader的加工类型和InputDispatcher的分发过程
  6. linux sysctl重启服务,Linux /etc/sysctl.conf重启没有生效
  7. Flask实战2问答平台-首页布局,功能完成
  8. 自己动手写一个单链表
  9. windows文件保护_文件通通用它加密,安全等级提高一个档次
  10. 设计模式的C语言应用-建造者模式-第七章
  11. 中本聪主题系列NFT收藏品在OpenSea发售,于26秒内售罄
  12. 那一天,那一月,那一年,那一世,那一瞬
  13. SVN客户端安装及汉化
  14. 【Android Audio 入门 五】--- AudioSW介绍
  15. 谷歌浏览器SwitchyOmega插件下载安装
  16. ElasticSearch: 使用Java Api 操作 ES
  17. 静态HTML网页设计作品——动漫电影《你的名字》(7页) HTML+CSS大作业_ 动漫电网页制作作业_动漫电网页设计...
  18. C++多线程/互斥锁/条件变量/信号量思维很重要;设计线程安全队列;1114按序打印;1115交替打印FooBar;1116打印零与奇偶数;1117H2O 生成1195交替打印字符串1226哲学家进餐
  19. 行至青鸟 | 为学习保驾护航的“教学管理”
  20. 查看linux服务器存储空间状况

热门文章

  1. 学习@浅墨_毛星云的【OpenCV入门教程】之四
  2. 网络营销推广实战宝典 软文推广
  3. OOP的六大原则+一法则
  4. LINUX HTB队列规定用户指南
  5. 【图像隐藏】基于matlab像素预测和位平面压缩的加密图像可逆数据隐藏【含Matlab源码 2218期】
  6. Python修改屏幕分辨率
  7. 计算机网络--物理层(全)
  8. Something‘s wrong--perhaps a missing \item. \begin{thebibliography}{1}
  9. 1031. 高一学堂 (at)
  10. CSS(定位、淘宝轮播图案例、网页布局总结、元素的显示和隐藏、鼠标经过显示遮罩)