mirror of
https://github.com/mytechnotalent/Embedded-Hacking.git
synced 2026-10-19 22:17:25 +02:00
Add legacy project code and precompiled binaries to WEEK01-WEEK11 directories
This commit is contained in:
1 parent
7f4ef2f144
commit
fa16d15b57
648 files changed
+389134
No files matched your search
+13
@@ -81,3 +81,16 @@ build-flash.log
|
||||
# Nested repositories
|
||||
eCTF/
|
||||
|
||||
# Whitelist course binaries in WEEK folders
|
||||
!WEEK*/**/build/
|
||||
!WEEK*/**/build/**
|
||||
!WEEK*/**/*.elf
|
||||
!WEEK*/**/*.hex
|
||||
!WEEK*/**/*.bin
|
||||
!WEEK*/**/*.uf2
|
||||
!WEEK*/**/*.map
|
||||
!WEEK*/**/*.dis
|
||||
!WEEK*/**/*.bndb
|
||||
!WEEK*/**/*.a
|
||||
!WEEK*/**/*.ld
|
||||
!WEEK*/**/*.h
|
||||
@@ -0,0 +1,9 @@
|
||||
build/CMakeFiles/
|
||||
build/pico_sdk/
|
||||
build/pico-sdk/
|
||||
build/generated/
|
||||
build/_deps/
|
||||
build/*.o
|
||||
build/*.d
|
||||
build/*.obj
|
||||
!.vscode/*
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Pico",
|
||||
"includePath": [
|
||||
"${workspaceFolder}/**",
|
||||
"${userHome}/.pico-sdk/sdk/2.2.0/**"
|
||||
],
|
||||
"forcedInclude": [
|
||||
"${userHome}/.pico-sdk/sdk/2.2.0/src/common/pico_base_headers/include/pico.h",
|
||||
"${workspaceFolder}/build/generated/pico_base/pico/config_autogen.h"
|
||||
],
|
||||
"defines": [],
|
||||
"compilerPath": "${userHome}/.pico-sdk/toolchain/14_2_Rel1/bin/arm-none-eabi-gcc.exe",
|
||||
"compileCommands": "${workspaceFolder}/build/compile_commands.json",
|
||||
"cStandard": "c17",
|
||||
"cppStandard": "c++14",
|
||||
"intelliSenseMode": "linux-gcc-arm"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
[
|
||||
{
|
||||
"name": "Pico",
|
||||
"compilers": {
|
||||
"C": "${command:raspberry-pi-pico.getCompilerPath}",
|
||||
"CXX": "${command:raspberry-pi-pico.getCxxCompilerPath}"
|
||||
},
|
||||
"environmentVariables": {
|
||||
"PATH": "${command:raspberry-pi-pico.getEnvPath};${env:PATH}"
|
||||
},
|
||||
"cmakeSettings": {
|
||||
"Python3_EXECUTABLE": "${command:raspberry-pi-pico.getPythonPath}"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"marus25.cortex-debug",
|
||||
"ms-vscode.cpptools",
|
||||
"ms-vscode.cpptools-extension-pack",
|
||||
"ms-vscode.vscode-serial-monitor",
|
||||
"raspberry-pi.raspberry-pi-pico"
|
||||
]
|
||||
}
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Pico Debug (Cortex-Debug)",
|
||||
"cwd": "${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"executable": "${command:raspberry-pi-pico.launchTargetPath}",
|
||||
"request": "launch",
|
||||
"type": "cortex-debug",
|
||||
"servertype": "openocd",
|
||||
"serverpath": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"gdbPath": "${command:raspberry-pi-pico.getGDBPath}",
|
||||
"device": "${command:raspberry-pi-pico.getChipUppercase}",
|
||||
"configFiles": [
|
||||
"interface/cmsis-dap.cfg",
|
||||
"target/${command:raspberry-pi-pico.getTarget}.cfg"
|
||||
],
|
||||
"svdFile": "${userHome}/.pico-sdk/sdk/2.2.0/src/${command:raspberry-pi-pico.getChip}/hardware_regs/${command:raspberry-pi-pico.getChipUppercase}.svd",
|
||||
"runToEntryPoint": "main",
|
||||
// Fix for no_flash binaries, where monitor reset halt doesn't do what is expected
|
||||
// Also works fine for flash binaries
|
||||
"overrideLaunchCommands": [
|
||||
"monitor reset init",
|
||||
"load \"${command:raspberry-pi-pico.launchTargetPath}\""
|
||||
],
|
||||
"openOCDLaunchCommands": [
|
||||
"adapter speed 5000"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Pico Debug (Cortex-Debug with external OpenOCD)",
|
||||
"cwd": "${workspaceRoot}",
|
||||
"executable": "${command:raspberry-pi-pico.launchTargetPath}",
|
||||
"request": "launch",
|
||||
"type": "cortex-debug",
|
||||
"servertype": "external",
|
||||
"gdbTarget": "localhost:3333",
|
||||
"gdbPath": "${command:raspberry-pi-pico.getGDBPath}",
|
||||
"device": "${command:raspberry-pi-pico.getChipUppercase}",
|
||||
"svdFile": "${userHome}/.pico-sdk/sdk/2.2.0/src/${command:raspberry-pi-pico.getChip}/hardware_regs/${command:raspberry-pi-pico.getChipUppercase}.svd",
|
||||
"runToEntryPoint": "main",
|
||||
// Fix for no_flash binaries, where monitor reset halt doesn't do what is expected
|
||||
// Also works fine for flash binaries
|
||||
"overrideLaunchCommands": [
|
||||
"monitor reset init",
|
||||
"load \"${command:raspberry-pi-pico.launchTargetPath}\""
|
||||
]
|
||||
},
|
||||
]
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"cmake.showSystemKits": false,
|
||||
"cmake.options.statusBarVisibility": "hidden",
|
||||
"cmake.options.advanced": {
|
||||
"build": {
|
||||
"statusBarVisibility": "hidden"
|
||||
},
|
||||
"launch": {
|
||||
"statusBarVisibility": "hidden"
|
||||
},
|
||||
"debug": {
|
||||
"statusBarVisibility": "hidden"
|
||||
}
|
||||
},
|
||||
"cmake.configureOnEdit": false,
|
||||
"cmake.automaticReconfigure": false,
|
||||
"cmake.configureOnOpen": false,
|
||||
"cmake.generator": "Ninja",
|
||||
"cmake.cmakePath": "${userHome}/.pico-sdk/cmake/v3.31.5/bin/cmake",
|
||||
"C_Cpp.debugShortcut": false,
|
||||
"terminal.integrated.env.windows": {
|
||||
"PICO_SDK_PATH": "${env:USERPROFILE}/.pico-sdk/sdk/2.2.0",
|
||||
"PICO_TOOLCHAIN_PATH": "${env:USERPROFILE}/.pico-sdk/toolchain/14_2_Rel1",
|
||||
"Path": "${env:USERPROFILE}/.pico-sdk/toolchain/14_2_Rel1/bin;${env:USERPROFILE}/.pico-sdk/picotool/2.2.0/picotool;${env:USERPROFILE}/.pico-sdk/cmake/v3.31.5/bin;${env:USERPROFILE}/.pico-sdk/ninja/v1.12.1;${env:PATH}"
|
||||
},
|
||||
"terminal.integrated.env.osx": {
|
||||
"PICO_SDK_PATH": "${env:HOME}/.pico-sdk/sdk/2.2.0",
|
||||
"PICO_TOOLCHAIN_PATH": "${env:HOME}/.pico-sdk/toolchain/14_2_Rel1",
|
||||
"PATH": "${env:HOME}/.pico-sdk/toolchain/14_2_Rel1/bin:${env:HOME}/.pico-sdk/picotool/2.2.0/picotool:${env:HOME}/.pico-sdk/cmake/v3.31.5/bin:${env:HOME}/.pico-sdk/ninja/v1.12.1:${env:PATH}"
|
||||
},
|
||||
"terminal.integrated.env.linux": {
|
||||
"PICO_SDK_PATH": "${env:HOME}/.pico-sdk/sdk/2.2.0",
|
||||
"PICO_TOOLCHAIN_PATH": "${env:HOME}/.pico-sdk/toolchain/14_2_Rel1",
|
||||
"PATH": "${env:HOME}/.pico-sdk/toolchain/14_2_Rel1/bin:${env:HOME}/.pico-sdk/picotool/2.2.0/picotool:${env:HOME}/.pico-sdk/cmake/v3.31.5/bin:${env:HOME}/.pico-sdk/ninja/v1.12.1:${env:PATH}"
|
||||
},
|
||||
"raspberry-pi-pico.cmakeAutoConfigure": true,
|
||||
"raspberry-pi-pico.useCmakeTools": false,
|
||||
"raspberry-pi-pico.cmakePath": "${HOME}/.pico-sdk/cmake/v3.31.5/bin/cmake",
|
||||
"raspberry-pi-pico.ninjaPath": "${HOME}/.pico-sdk/ninja/v1.12.1/ninja",
|
||||
"files.associations": {
|
||||
"stdlib.h": "c"
|
||||
}
|
||||
}
|
||||
+102
@@ -0,0 +1,102 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Compile Project",
|
||||
"type": "process",
|
||||
"isBuildCommand": true,
|
||||
"command": "${userHome}/.pico-sdk/ninja/v1.12.1/ninja",
|
||||
"args": ["-C", "${workspaceFolder}/build"],
|
||||
"group": "build",
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"panel": "dedicated"
|
||||
},
|
||||
"problemMatcher": "$gcc",
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/ninja/v1.12.1/ninja.exe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Run Project",
|
||||
"type": "process",
|
||||
"command": "${env:HOME}/.pico-sdk/picotool/2.2.0/picotool/picotool",
|
||||
"args": [
|
||||
"load",
|
||||
"${command:raspberry-pi-pico.launchTargetPath}",
|
||||
"-fx"
|
||||
],
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"panel": "dedicated"
|
||||
},
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/picotool/2.2.0/picotool/picotool.exe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Flash",
|
||||
"type": "process",
|
||||
"command": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"args": [
|
||||
"-s",
|
||||
"${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"-f",
|
||||
"interface/cmsis-dap.cfg",
|
||||
"-f",
|
||||
"target/${command:raspberry-pi-pico.getTarget}.cfg",
|
||||
"-c",
|
||||
"adapter speed 5000; program \"${command:raspberry-pi-pico.launchTargetPath}\" verify reset exit"
|
||||
],
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Rescue Reset",
|
||||
"type": "process",
|
||||
"command": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"args": [
|
||||
"-s",
|
||||
"${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"-f",
|
||||
"interface/cmsis-dap.cfg",
|
||||
"-f",
|
||||
"target/${command:raspberry-pi-pico.getChip}-rescue.cfg",
|
||||
"-c",
|
||||
"adapter speed 5000; reset halt; exit"
|
||||
],
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Risc-V Reset (RP2350)",
|
||||
"type": "process",
|
||||
"command": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"args": [
|
||||
"-s",
|
||||
"${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"-c",
|
||||
"set USE_CORE { rv0 rv1 cm0 cm1 }",
|
||||
"-f",
|
||||
"interface/cmsis-dap.cfg",
|
||||
"-f",
|
||||
"target/rp2350.cfg",
|
||||
"-c",
|
||||
"adapter speed 5000; init;",
|
||||
"-c",
|
||||
"write_memory 0x40120158 8 { 0x3 }; echo [format \"Info : ARCHSEL 0x%02x\" [read_memory 0x40120158 8 1]];",
|
||||
"-c",
|
||||
"reset halt; targets rp2350.rv0; echo [format \"Info : ARCHSEL_STATUS 0x%02x\" [read_memory 0x4012015C 8 1]]; exit"
|
||||
],
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/**
|
||||
* @file 0x0001_hello-world.c
|
||||
* @brief Hello World: print a greeting over UART in an infinite loop
|
||||
* @author Kevin Thomas
|
||||
* @date 2025
|
||||
*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2025 Kevin Thomas
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
* -----------------------------------------------------------------------------
|
||||
*
|
||||
* Demonstrates the minimal "hello, world" program on the Raspberry Pi Pico 2.
|
||||
* Initializes stdio over UART and prints a greeting in an infinite loop.
|
||||
*
|
||||
* Wiring:
|
||||
* No external wiring required (USB serial).
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "pico/stdlib.h"
|
||||
|
||||
int main(void) {
|
||||
stdio_init_all();
|
||||
while (true) {
|
||||
printf("hello, world\r\n");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
# Generated Cmake Pico project file
|
||||
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
# Initialise pico_sdk from installed location
|
||||
# (note this can come from environment, CMake cache etc)
|
||||
|
||||
# == DO NOT EDIT THE FOLLOWING LINES for the Raspberry Pi Pico VS Code Extension to work ==
|
||||
if(WIN32)
|
||||
set(USERHOME $ENV{USERPROFILE})
|
||||
else()
|
||||
set(USERHOME $ENV{HOME})
|
||||
endif()
|
||||
set(sdkVersion 2.2.0)
|
||||
set(toolchainVersion 14_2_Rel1)
|
||||
set(picotoolVersion 2.2.0)
|
||||
set(picoVscode ${USERHOME}/.pico-sdk/cmake/pico-vscode.cmake)
|
||||
if (EXISTS ${picoVscode})
|
||||
include(${picoVscode})
|
||||
endif()
|
||||
# ====================================================================================
|
||||
set(PICO_BOARD pico2 CACHE STRING "Board type")
|
||||
|
||||
# Pull in Raspberry Pi Pico SDK (must be before project)
|
||||
include(pico_sdk_import.cmake)
|
||||
|
||||
project(0x0001_hello-world C CXX ASM)
|
||||
|
||||
# Initialise the Raspberry Pi Pico SDK
|
||||
pico_sdk_init()
|
||||
|
||||
# Add executable. Default name is the project name, version 0.1
|
||||
|
||||
add_executable(0x0001_hello-world 0x0001_hello-world.c )
|
||||
|
||||
pico_set_program_name(0x0001_hello-world "0x0001_hello-world")
|
||||
pico_set_program_version(0x0001_hello-world "0.1")
|
||||
|
||||
# Modify the below lines to enable/disable output over UART/USB
|
||||
pico_enable_stdio_uart(0x0001_hello-world 1)
|
||||
pico_enable_stdio_usb(0x0001_hello-world 0)
|
||||
|
||||
# Add the standard library to the build
|
||||
target_link_libraries(0x0001_hello-world
|
||||
pico_stdlib)
|
||||
|
||||
# Add the standard include files to the build
|
||||
target_include_directories(0x0001_hello-world PRIVATE
|
||||
${CMAKE_CURRENT_LIST_DIR}
|
||||
)
|
||||
|
||||
pico_add_extra_outputs(0x0001_hello-world)
|
||||
|
||||
BIN
Binary file not shown.
File diff suppressed because it is too large.
Load diff
BIN
Binary file not shown.
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,469 @@
|
||||
:020000041000EA
|
||||
:10000000002008205D0100101B0100101D010010E0
|
||||
:100010001101001011010010110100101101001058
|
||||
:100020001901001019010010190100101F01001022
|
||||
:10003000110100101901001021010010230100100E
|
||||
:100040001101001011010010110100101101001028
|
||||
:100050001101001011010010110100101101001018
|
||||
:100060001101001011010010110100101101001008
|
||||
:1000700011010010110100101101001011010010F8
|
||||
:1000800011010010110100101101001011010010E8
|
||||
:1000900011010010110100101101001011010010D8
|
||||
:1000A00011010010110100101101001011010010C8
|
||||
:1000B00011010010110100101101001011010010B8
|
||||
:1000C00011010010110100101101001011010010A8
|
||||
:1000D0001101001011010010110100101101001098
|
||||
:1000E0001101001011010010110100101101001088
|
||||
:1000F0001101001011010010110100101101001078
|
||||
:100100001101001011010010110100101101001067
|
||||
:10011000EFF30580103800BE00BE00BE00BE00BE7A
|
||||
:1001200000BE00BEF2EB8871201B00104C1B0010BB
|
||||
:10013000A001001090A31AE7D3DEFFFF42012110B7
|
||||
:10014000FF010000B01B0000793512AB4FF000003A
|
||||
:100150001E49086006C881F3088810474FF05040D8
|
||||
:10016000006810B14FF00000F2E70DA40ECC00299A
|
||||
:1001700002D000F012F8F9E71549164A002000E015
|
||||
:1001800001C19142FCD11449884714498847144958
|
||||
:10019000884700BEFDE701C901C29A42FBD3704700
|
||||
:1001A0004C1B001010010020AC020020E81C0010C5
|
||||
:1001B0000000082000000820E81C001000100820A3
|
||||
:1001C00000100820000000007047000008ED00E06B
|
||||
:1001D000AC020020D80400207D130010350200106E
|
||||
:1001E00075130010F8B500BF064B0749C91A8910EE
|
||||
:1001F00048BF0131491003D0044B0BB101481847E7
|
||||
:10020000704700BFAC020020AC02002000000000DC
|
||||
:1002100008B5054B1BB105490548AFF30080BDE8A3
|
||||
:100220000840FFF7E1BF00BF00000000900400207D
|
||||
:10023000CC19001008B501F099F9024801F0DEF977
|
||||
:10024000FBE700BFCC19001010B44FF480740C4BC6
|
||||
:1002500053F8202003EB8003C00082F0400200F13D
|
||||
:10026000804003F5805C02F0C00200F5203003F509
|
||||
:100270004053CCF8002041601C605DF8044B70478F
|
||||
:10028000048003400FB400B583B0049C074801F01C
|
||||
:10029000B5F93CB105A92046019101F051F8044897
|
||||
:1002A00001F0ACF9012001F063F800BFDC19001087
|
||||
:1002B000EC19001070B58646EFF3108572B6124C3B
|
||||
:1002C000D4E8CF6F0120002EFAD1C4E8460F002EEB
|
||||
:1002D000F6D1BFF35F8F4FF0010CC80801F00703A0
|
||||
:1002E0000CFA03F31EF800C01CEA030608D14CEA1E
|
||||
:1002F000030C0EF800C0C4E88F6F85F3108870BD42
|
||||
:100300001046FFF7BFFF00BF3B040020044A1078EF
|
||||
:10031000431CDBB2182B28BF10231370704700BF9B
|
||||
:10032000280200204FF0E022936843F000539360CE
|
||||
:10033000704700BF0021044B03F12002C3E88F1F68
|
||||
:1003400001339342FAD17047300400204FF0E0238C
|
||||
:100350004FF08032C3F80024C3F80424C3F8082403
|
||||
:10036000C3F80C24C3F81024C3F81424C3F81824C9
|
||||
:10037000C3F81C24C3F82024C3F82424C3F8282479
|
||||
:10038000C3F82C24C3F8302462B67047012300F070
|
||||
:100390001F029340400941B1800000F1604000F528
|
||||
:1003A0006140C0F8803103607047024A203042F853
|
||||
:1003B0002030704700E100E0F8B50D46EFF31087FC
|
||||
:1003C00072B6124ED6E8CF2F0123002AFAD1C6E822
|
||||
:1003D000423F002AF6D1BFF35F8F0D4B00F11004AE
|
||||
:1003E0009B680C4A53F82430934203D0994201D0C1
|
||||
:1003F00000F08EFE064B9B6843F82450BFF35F8FDE
|
||||
:100400000023C6E88F3F87F31088F8BD3904002029
|
||||
:1004100000ED00E0110100102DE9F04F83B0EFF383
|
||||
:10042000108A72B6714ED6E8CF2F0123002AFAD176
|
||||
:10043000C6E8423F002AF6D1BFF35F8F6C4B00F154
|
||||
:1004400010089B686B4A53F82850954245D08D425E
|
||||
:100450000C4650D0684FEB1B2F2B3ED801214FEAA2
|
||||
:1004600050194FEA890909F1604909F5614900F01D
|
||||
:100470001F0301FA03F0D9F80030C9F8800000EA40
|
||||
:10048000030BBFF35F8FEFF30581C9B2002934D0AE
|
||||
:10049000884505D0CDE9001000F03AFEDDE90010F6
|
||||
:1004A00025F0010EDEF808C0644505D189E0D3F8D7
|
||||
:1004B00008C0644531D09E469EF9062002EB4203F7
|
||||
:1004C000002A07EB8303F2DA644561D0BBF1000F29
|
||||
:1004D00020D0C9F88001C9F80000454B9B6843F85B
|
||||
:1004E0002850BFF35F8F0023C6E88F3F8AF3108840
|
||||
:1004F00003B0BDE8F08F1546EFE725F0010EDEF8FA
|
||||
:1005000008C06445D8D19EF906407346002C08DA2D
|
||||
:10051000154646E0C9F88000DFE793F90640002C55
|
||||
:1005200037DB04EB440C07EB8C0C9CF80710DCF871
|
||||
:100530000820D9719A609CF906206100002A9A71FE
|
||||
:100540003DDBBCF804E05FEA4E5E05D50EF5FF1E0C
|
||||
:100550000EF5FF5E0EF11F0E6FF0070C0A194FEA41
|
||||
:100560006E5E920002EB4E0208323A44ACEB030C92
|
||||
:100570006244C2F34A026FEAC2426FEAD2429A80F0
|
||||
:100580001E4B21441A7807EB81011C708A719DE78C
|
||||
:100590007346D9B9FF228EF806204BF60152AEF809
|
||||
:1005A0000420164C4AF6AA2294F800C01946C91B2A
|
||||
:1005B00049414A43120D83F806C0227086E7104A6B
|
||||
:1005C000DDE79EF906407346002CAADA0D4A0E4C70
|
||||
:1005D000D21A083AC2F30A316FEA01516FEA115197
|
||||
:1005E00044EA5202DA80998070E700BF39040020A3
|
||||
:1005F00000ED00E0110100102C020020D4040020C6
|
||||
:1006000001BDFFFF6602002000F8FFFFF0B5EFF329
|
||||
:100610000585EDB2EFF3108C72B62649D1E8CF2FE5
|
||||
:100620000123002AFAD1C1E8423F002AF6D1BFF3E4
|
||||
:100630005F8F214E40F0010EB4684AF6AA2354F8A9
|
||||
:1006400025701E4A0446A41A644163431B0D774576
|
||||
:100650005BB21BD092F906409C421CD092F912402A
|
||||
:100660009C4223D092F91E409C4221D092F92A400C
|
||||
:100670009C4208BF03240FD0114A00241578137040
|
||||
:100680008571C1E88F4F8CF31088F0BDB2680D4CB6
|
||||
:1006900042F82540F0E7002404EB440402EB840216
|
||||
:1006A000FF2494714BF601549480E5E70124F3E7AD
|
||||
:1006B0000224F1E73904002000ED00E02C020020C4
|
||||
:1006C000D404002011010010014B0B44036070475B
|
||||
:1006D0003004002070B5104C104DAC420ED2FF26F5
|
||||
:1006E000236863B1FFF712FE01462046FFF7ECFFD7
|
||||
:1006F000A680BFF35F8F0834AC42F1D370BDFFF723
|
||||
:1007000005FE01462046FFF7DFFF2671BFF35F8F2E
|
||||
:100710000834AC42E4D370BDA4020020AC02002037
|
||||
:100720000D4B1A68EFF3108172B6D2E8CFCF0120DB
|
||||
:10073000BCF1000FF9D1C2E84C0FBCF1000FF4D1AD
|
||||
:10074000BFF35F8F00221B68C3E88F2F81F31088EF
|
||||
:1007500040BF002000217047C804002000000000B6
|
||||
:100760002DE9F04F2DED028B85B0EFF30583DBB261
|
||||
:10077000103B9A0818BF01224FF0010103F0030B50
|
||||
:1007800018BFAF4DAF4B08BFAF4D0BEB820253F814
|
||||
:10079000226001FA0BF205F541539FEDA78B019200
|
||||
:1007A0005A602FE0B3881C0440F19380B379002B8A
|
||||
:1007B00040F0DD80B6F90820002AC0F21E8173697E
|
||||
:1007C00002EB420203EBC203D3E90247B7F1FF3F5A
|
||||
:1007D00008BFB4F1FF3F0ED005EB8B01AB6A0A698D
|
||||
:1007E000D21AE31A934205D301232A6A03FA0BF3C0
|
||||
:1007F000134200D10C61284600F0CAFAA042B94168
|
||||
:10080000C0F2FB80B6F90830019A002B0093EA632E
|
||||
:10081000C8DBD6F8148003EB4309284608EBC90768
|
||||
:10082000D7E9024A00F0B4FAA04271EB0A01B9DB41
|
||||
:10083000BAF1000FC0F2C380D7E90431834A934272
|
||||
:1008400000F0ED807A88B6F9080092B242EA0040E2
|
||||
:10085000984702460B4652EA030100F0B080002B95
|
||||
:1008600080F2D180B4EB020E6AEB030A38F939301A
|
||||
:10087000C7E902EA002B95DB716903EB430201EB48
|
||||
:10088000C202D2E90270BE457AEB000C4FEA430285
|
||||
:1008900088DBB4462CF8083F06E003EB430001EB8D
|
||||
:1008A000C0005A00D0E90270BE451A447AEB00003D
|
||||
:1008B00001EBC20404DB31F93230A446002BECDA40
|
||||
:1008C00028F83930009BACF80030B3881C043FF5A1
|
||||
:1008D0006DAF3369EFF3108272B6D3E8CF0F012109
|
||||
:1008E0000028FAD1C3E8401F0028F6D1BFF35F8F7C
|
||||
:1008F0004FF6FF74B0880023316900B2B480C1E8BC
|
||||
:100900008F3F82F310889842FFF650AF0746A94602
|
||||
:10091000746906F1080807EB470E04EBCE03D3E930
|
||||
:100920000250B6F90830C446002B13DBB2460097DC
|
||||
:1009300004E034F936309446002B09DB03EB430620
|
||||
:1009400004EBC602D2E90271BD4270EB0101F0DA9C
|
||||
:100950005646009FACF8007034F93E7024F83E30E3
|
||||
:10096000002FD8DAB3794D46002B3FF423AF002394
|
||||
:10097000B371B6F9083006F10808581C3DD01A4684
|
||||
:10098000776903E08046591C3FF416AF03EB43013F
|
||||
:1009900007EBC100B0F802C01C461CF4004F9E4695
|
||||
:1009A00037F93130EED0944280ED028B05D0A8F8B3
|
||||
:1009B0000030328927F8312034817246E3E738F875
|
||||
:1009C000393033813369EFF3108272B6D3E8CF0F39
|
||||
:1009D00001210028FAD1C3E8401F0028F6D1BFF357
|
||||
:1009E0005F8F7388316928F83930009B738000234A
|
||||
:1009F000C1E88F3F82F31088D4E640BF05B0BDEC5C
|
||||
:100A0000028BBDE8F08F2846CDE9022300F0C0F943
|
||||
:100A1000029A039B10EB020E43EB010A26E70846FD
|
||||
:100A20000B69029198470028C9D00299D1E90023A7
|
||||
:100A300011E700BFAFF30080FFFFFFFFFFFFFFFFE5
|
||||
:100A400000800B40A804002000000B40610700104C
|
||||
:100A50002DE9F84F364C25692DB1BDE8F84F0A2134
|
||||
:100A60003448FFF731BEDFF8E4800321404600F050
|
||||
:100A70007DF90326C4F80C80FFF748FC4FF0504C7A
|
||||
:100A80002D4B267003442361DCF800300F21637086
|
||||
:100A9000636961801D834FF00405A3F878504FF01F
|
||||
:100AA0000505A3F890504FF00605A3F8A8504FF0A5
|
||||
:100AB00007050E214FF6FF7208274FF00A0EA3F824
|
||||
:100AC000C0504FF001094FF00C0C4FF0020B4FF0EB
|
||||
:100AD000090A0D204FF00B05A3F868111749A280F1
|
||||
:100AE000A3F808E1A160A3F848B0A3F8F0A0A3F828
|
||||
:100AF0002051A3F838C1A3F85001A3F83090A3F80F
|
||||
:100B00006060A3F8D8701A800D4B3046C8F820708A
|
||||
:100B10000C49DC60FFF750FC49463046FFF736FCD5
|
||||
:100B2000094B0A211F640348BDE8F84FFFF7CCBD0D
|
||||
:100B300074020020C804002030040020FFFF1000D1
|
||||
:100B4000A80400206107001000200B4000000B40AB
|
||||
:100B50000146F0B50069EFF3108772B6D0E8CF5FB9
|
||||
:100B60000124002DFAD1C0E8454F002DF6D1BFF386
|
||||
:100B70005F8FB1F902E04C690EEB4E0CBEF1000F35
|
||||
:100B80004FEACC05086904EBCC0C3CDB665B4E807D
|
||||
:100B90000026C0E88F6F87F31088BCF80200CCE90C
|
||||
:100BA00002230130C0F30E00012838BF0120059B4D
|
||||
:100BB000ACF80200CCF81030069B40EA0E40CCF8AE
|
||||
:100BC00014300B69EFF3108272B6D3E8CFCF012750
|
||||
:100BD000BCF1000FF9D1C3E84C7FBCF1000FF4D198
|
||||
:100BE000BFF35F8F8B886353A1F804E00B69C3E800
|
||||
:100BF0008F6F82F310880122CB68097803F50153C7
|
||||
:100C00008A405A60F0BD0023C0E88F3F87F3108808
|
||||
:100C10004FF0FF30F0BD00BF03464089B0EB214FDD
|
||||
:100C200037DD58690A1402EB420210B500EBC2002E
|
||||
:100C30001C69EFF3108C72B6D4E8CFEF0122BEF13D
|
||||
:100C4000000FF9D1C4E84E2FBEF1000FF4D1BFF36D
|
||||
:100C50005F8F428889B292B28A4207D000221B6914
|
||||
:100C6000C3E88F2F8CF31088002010BD42F400429F
|
||||
:100C700042800121002218699971C0E88F2F8CF3FE
|
||||
:100C800010881C78DA68084602F50153A1405960C3
|
||||
:100C900010BD0020704700BF2DE9F04306460D4609
|
||||
:100CA00083B0EFF30584E4B23CB12D4B5A6AAA42FB
|
||||
:100CB0001CD2002003B0BDE8F0832A4FD7F80C9077
|
||||
:100CC00097F80080484600F063F808F1040859F8E6
|
||||
:100CD00028301B1A301A65EB0101984271F10001AE
|
||||
:100CE00010DB20BF1E4B5A6AAA42E2D314BF012474
|
||||
:100CF00000249B6AB34234BF204644F0010003B095
|
||||
:100D0000BDE8F08300F04CF8864265EB0101002954
|
||||
:100D100014DB154B3846CDE9003432462B46FFF73D
|
||||
:100D200017FF011E0ADD0E4B5A6AAA4216D39B6AB0
|
||||
:100D3000B34211D30B48FFF76FFFB6E7084B5C6A6D
|
||||
:100D4000AC42B6D3641B18BF01249B6AB34234BFC4
|
||||
:100D5000204644F00100ADE7AA42EBD120BFE9E70D
|
||||
:100D600000000B40740200202107001010B4054B56
|
||||
:100D7000054C064AA04214BF1846581C5DF8044BA7
|
||||
:100D8000FFF798BA5804002000800B40F0190010BB
|
||||
:100D90000346416A0A46986A596A8A42FAD17047FC
|
||||
:100DA000034B596A0A46986A596A9142FAD17047C8
|
||||
:100DB00000000B4030B4154A536A9C46946A536A4B
|
||||
:100DC0006345FAD1021959414FF0000528BF0125AA
|
||||
:100DD0000E4B5B6AB5B15A1C08BF1A4608D04FF0DB
|
||||
:100DE000FF310A460948436A8B42FCD38B4207D144
|
||||
:100DF000064902E0486A984202D1886A9042F9D3D3
|
||||
:100E000030BC70479942EDD8F0E700BF00000B40BE
|
||||
:100E1000F8B5054606200E4600F0E4F8002842D05A
|
||||
:100E2000354A3648954214BF4FF080624FF0006259
|
||||
:100E3000334B344902601A608C6832EA0404FBD1F7
|
||||
:100E40002D4B4FF48071EB1AB3FA83F32E4A5B09F2
|
||||
:100E5000062022F8131000F0C5F8C300B3FBF6F328
|
||||
:100E60000133DA0920D1402601216962AA622F6B81
|
||||
:100E7000FB0722D42B46002253F82C1F062003F533
|
||||
:100E8000805422602F6300F0ADF840F2013103225C
|
||||
:100E90008000B0FBF6F0EB6A83F0700303F07E0392
|
||||
:100EA00023602963AA64F8BD4FF6FE718A421BD9FC
|
||||
:100EB00022464FF6FF71154ED7E740F2013205F595
|
||||
:100EC00040531A636B6AAC6A062004EB831400F08B
|
||||
:100ED00089F80F4BA402A3FB0023DB0A0021B4FB1B
|
||||
:100EE000F3F0FFF767FFC5E7C3F34503114603EBD4
|
||||
:100EF00082161A46B9E700BF008007400020024072
|
||||
:100F00000030024000000240CC040020C0FF3F003F
|
||||
:100F1000757B2B8F00EB400C4FEA8C0C0CF1804C56
|
||||
:100F20000CF5803CF0B51646DCF80420051FB2F540
|
||||
:100F3000803F38BF4FF48032EDB238BFCCF8042088
|
||||
:100F4000012D2AD94FF40067254C0CF5405217604B
|
||||
:100F500054F82020B2B9DCF80020012D82EA4612B4
|
||||
:100F600002F0E0020CF5805632602AD94FF400619D
|
||||
:100F700044F820304FF480330CF500521160CCF867
|
||||
:100F80000430F0BD6769B7FBF2FE0EF1010E0EEB07
|
||||
:100F90004E0EBEF1030EFCD2DDE70129D2D10324AF
|
||||
:100FA0000CF540521460DCF80820D207FBD5DCF8C1
|
||||
:100FB00000200B4C82EA461202F0E0020CF580564B
|
||||
:100FC00032600122DCF800504D4005F00305356029
|
||||
:100FD00002FA01F1DCF808200A42FBD0C6E700BFA4
|
||||
:100FE0005C040020014B53F8200070475C04002093
|
||||
:100FF00070B4039D04682D0345EA03451B4B002C88
|
||||
:10100000B3FBF1F3B2FBF3F61FDB194A194B904225
|
||||
:1010100014BF4FF480424FF40042174C1A6003F59E
|
||||
:1010200080531A60A36832EA0303FBD1212200F542
|
||||
:1010300040530433016086601A600268002AFCDABB
|
||||
:101040000822C5601A6070BC7047036803F03F0354
|
||||
:101050008B42DAD18368C3F30B03B342D5D1C368A3
|
||||
:1010600003F4EE23AB42D0D1EDE700BF001BB70085
|
||||
:10107000008005400020024000000240012300EBF8
|
||||
:101080004000800000F1804000F584104160036062
|
||||
:10109000704700BF0023DB8A002242E800F25202C0
|
||||
:1010A00001D4102118470421184700BF034AD2F881
|
||||
:1010B0002838002BFBD0BFF35F8F704700000E4035
|
||||
:1010C0000021044B044ABFF35F8F43F8041B934293
|
||||
:1010D000F9D170470C080E402C080E4010B44FF4A4
|
||||
:1010E0008D704FF42A64064A064B07491460D0609D
|
||||
:1010F00019605368002BFCDA5DF8044B704700BFA1
|
||||
:101100000080044000A0044000B0FA00704700BF17
|
||||
:1011100008B50148FFF7B6F8141A001038B5054CA9
|
||||
:10112000054DAC4204D254F8043B9847AC42FAD384
|
||||
:1011300038BD00BF88190010C819001010B4074846
|
||||
:10114000074C084B084A094904601A608B6832EA68
|
||||
:101150000303FBD15DF8044B704700BF0020024041
|
||||
:101160007F3BEFEF00300240F6FFF3030000024048
|
||||
:10117000044BDB6CB3F5004F03D14FF48022024BDC
|
||||
:10118000DA64704700001150002011504FF0E02247
|
||||
:10119000044BD2F8881D0B43C2F8883D10EE300492
|
||||
:1011A000704700BF030330006FF06041044B054AF5
|
||||
:1011B00019609368DB4333F06043FAD1704700BF96
|
||||
:1011C000003002400000024010B545F25320FFF706
|
||||
:1011D00061FFBDE8104003460420184710B545F2F2
|
||||
:1011E0005320FFF757FFBDE8104003460120184782
|
||||
:1011F000FFF7A0B81449154B70B55C1AA610442E21
|
||||
:10120000324628BF4422124D9200284600F00EFBC1
|
||||
:10121000B4F5867F13D80F4AC6F1440012D02B19BB
|
||||
:10122000410803EBC101C3E9002208338B42FAD124
|
||||
:10123000C30704D520F00100304445F82020064BB8
|
||||
:101240009D6070BD4320F8E7000000101001001001
|
||||
:10125000000000201101001000ED00E0002370B537
|
||||
:101260002B4C82B0C4F88430FFF738FF0122294BA1
|
||||
:10127000DA63636C012BFCD10321264A244B1163F2
|
||||
:101280009C6B012CFCD10226052521460523224A10
|
||||
:1012900022480096FFF7ACFE21462B46204A214803
|
||||
:1012A0000095FFF7A5FE0022042031461E4BFFF7F4
|
||||
:1012B00031FE2146284600221C4BFFF72BFE002260
|
||||
:1012C000082011461A4BFFF725FE0022092011467F
|
||||
:1012D000174BFFF71FFE002206201146134BFFF7A6
|
||||
:1012E00019FE0022114B07201146FFF713FE0420C0
|
||||
:1012F000FFF778FE00240F4BA3FB0035AD0CE0B2E6
|
||||
:1013000029460134FFF7BAFE062CF8D102B070BDB1
|
||||
:101310000000014000300140002F685900000540E6
|
||||
:10132000008C864700800540001BB70080D1F00884
|
||||
:10133000006CDC0283DE1B4300B9704700F01CB96F
|
||||
:1013400010B5094B84B01C684CB1034600914FF0B6
|
||||
:10135000FF3203A90548A047012004B010BD00F0EA
|
||||
:101360004DF9204604B010BD8C0400203913001044
|
||||
:1013700000BEFDE708B5FFF7FBFF00BF38B5064C20
|
||||
:10138000064DFFF7CBFEAC4204D254F8043B98471D
|
||||
:10139000AC42FAD338BD00BFC8190010CC190010F8
|
||||
:1013A00003680846114618472DE9F0411546427D6D
|
||||
:1013B00007468846002A46D0002D1DDD0B780A2BF3
|
||||
:1013C00023D0012D4FF0000C18D04646012416F80A
|
||||
:1013D000012F21460A2A04F1010422D0A542F6D1A8
|
||||
:1013E00065450BDC08EB050313F8013CA3F10D0385
|
||||
:1013F000B3FA83F35B093B75BDE8F0813B68A5EB6D
|
||||
:101400000C0108EB0C009847ECE7037D002BD8D1CA
|
||||
:10141000036802210F489847012DE3D04FF0010CDB
|
||||
:10142000D3E716F8013C0D2BD8D08C4508EB0C0007
|
||||
:10143000A1EB0C0101DA3B689847022105483B68A3
|
||||
:101440009847A446CAE7294640463B68BDE8F041B4
|
||||
:10145000184700BFF81A00102DE9F04782B00D467A
|
||||
:1014600091461C460646FFF79BFC4FF0FF3C6FF091
|
||||
:1014700000472E4A821841F10003944577EB03019F
|
||||
:101480003CBF62463B462A4800F07AFA6B1C804615
|
||||
:1014900040D00CB3274F284B1C68B4B1B9F1000FF2
|
||||
:1014A0001CD1DFF89C9001E0246974B12368002B03
|
||||
:1014B000FAD0D9F800300BB19C42F5D120462A462B
|
||||
:1014C0003146B8472469002CF0D1B8F1000F26D17D
|
||||
:1014D000284602B0BDE8F087184FDCE74FF00A0A53
|
||||
:1014E000DFF85C9002E02469002CEED02368002B2A
|
||||
:1014F000F9D0D9F800300BB1A342F4D12A463146D5
|
||||
:101500002046B847012220460DF107018DF807A0BB
|
||||
:10151000B847E8E7304600F0FFF90546B9E7044868
|
||||
:1015200000F02AFA284602B0BDE8F08740420F00DA
|
||||
:10153000A4020020A913001084040020A1130010AD
|
||||
:1015400088040020084A136823B90AE003F1100256
|
||||
:101550001B6933B18342F9D129B918691060196147
|
||||
:10156000704701B1106070478404002008B500F096
|
||||
:1015700033F9012008BD00BFF0B583B006468DF8F1
|
||||
:101580000700FFF70DFC4FF0FF356FF00044174ADE
|
||||
:10159000821841F10003954274EB03013CBF2346DE
|
||||
:1015A0002A46134800F0ECF9124B07461C689CB120
|
||||
:1015B000114D01E024697CB12368002BFAD02B681F
|
||||
:1015C0000BB19C42F6D1204601220DF10701FFF735
|
||||
:1015D000EBFE2469002CEFD117B9304603B0F0BD03
|
||||
:1015E000034800F0C9F9304603B0F0BD40420F0097
|
||||
:1015F000A4020020840400208804002038B504469A
|
||||
:1016000000F08AF9012305461A4620462946FFF7CD
|
||||
:1016100023FF084B1C682CB163682BB198472469E1
|
||||
:10162000002CF9D1284638BD2469002CF4D1284675
|
||||
:1016300038BD00BF84040020B1F1000C1DDD0F4A4D
|
||||
:101640000F4B126830B5D31AB3FA83F30D240D4D46
|
||||
:101650005B09411E35F913E08C4411F8010F8645F2
|
||||
:1016600006D093699B06FCD461451060F5D130BD6E
|
||||
:1016700093699D06FCD41460F3E77047D004002002
|
||||
:1016800000800740CC040020224BB1F1000C10B4C4
|
||||
:101690001C682EDD034600201F4A591E12689369FC
|
||||
:1016A000DB0617D401309369DB06FCD4136884454C
|
||||
:1016B00001F8013FF3D14CB150211346916353F827
|
||||
:1016C000342F02F0380203F580531A6060465DF84B
|
||||
:1016D000044B70474CB150211346916353F8342F9B
|
||||
:1016E00002F0380203F580531A6078B15DF8044BBC
|
||||
:1016F00070475CB1084B50211A681346916353F848
|
||||
:10170000342F02F0380203F580531A606FF00200A4
|
||||
:10171000DDE700BF50040020D0040020054B1B680B
|
||||
:1017200033B10021044A05481268006891631847E4
|
||||
:10173000704700BF50040020D00400205404002053
|
||||
:10174000024B1A6893691B07FCD47047D004002031
|
||||
:10175000F8B51C4F1C4D3A681C4EAA4214BF2125F7
|
||||
:1017600022250446D6F800C018B1BCF1000F10D0F5
|
||||
:10177000F8BDBCF1000FFBD0014690632846FEF790
|
||||
:1017800005FE28461249FEF747FE124B34601C60E6
|
||||
:10179000F8BD0B460F4A0E49306028461360FEF72D
|
||||
:1017A0000BFE01212846FEF7F1FD3A685021134651
|
||||
:1017B000916353F8342F02F0380203F580531A6016
|
||||
:1017C000F8BD00BFD0040020008007405004002076
|
||||
:1017D0001D1700105404002010B50E490E4C0F4880
|
||||
:1017E0000F4A104B007821600020022112781B78EC
|
||||
:1017F000FEF72AFD02210120FEF726FD4FF4E1311C
|
||||
:101800002068FFF705FBBDE8104001210648FFF7FF
|
||||
:1018100099BE00BF00000740D0040020481B001004
|
||||
:10182000441B0010401B00108C020020844641EA3B
|
||||
:10183000000313F0030349D1403A23D30B6803603C
|
||||
:101840004B6843608B688360CB68C3600B6903613E
|
||||
:101850004B6943618B698361CB69C3610B6A036226
|
||||
:101860004B6A43628B6A8362CB6AC3620B6B03630E
|
||||
:101870004B6B43638B6B8363CB6BC36340304031F3
|
||||
:10188000403ADBD230320BD30B6803604B684360C5
|
||||
:101890008B688360CB68C36010301031103AF3D28C
|
||||
:1018A0000C3205D351F8043B40F8043B043AF9D21A
|
||||
:1018B000043208D0D2071CBF11F8013B00F8013BED
|
||||
:1018C00001D30B8803806046704700BF082A13D3FA
|
||||
:1018D0008B07B1D010F00303AED0C3F10403D21ACA
|
||||
:1018E000DB071CBF11F8013B00F8013BA4D331F822
|
||||
:1018F000023B20F8023B9FE7043AD9D3013A11F8A2
|
||||
:10190000013B00F8013BF9D20B7803704B78437030
|
||||
:101910008B7883706046704720F0030110F003005D
|
||||
:10192000C0F1000051F8043B00F1040C4FEACC0C6C
|
||||
:101930006FF000021CBF22FA0CF213434FF0010CAF
|
||||
:101940004CEA0C2C4CEA0C4CA3EB0C0222EA0302EE
|
||||
:1019500012EACC1204BF51F8043B0430F4D0C2F1B7
|
||||
:10196000000102EA0102B2FA82F2C2F11F0200EBA8
|
||||
:10197000D2007047F8B500BF5FF800F0E501002025
|
||||
:101980005FF800F07D010020C91100103D1100102A
|
||||
:10199000711100105D120010A9110010C11000108B
|
||||
:1019A000F1110010AD100010D5060010F511001057
|
||||
:1019B000510A00100D110010DD1100108D110010E2
|
||||
:0C19C000250300104D0300101102001060
|
||||
:1019CC0068656C6C6F2C20776F726C640D00000076
|
||||
:1019DC000A2A2A2A2050414E4943202A2A2A0A0040
|
||||
:1019EC000A000000486172647761726520616C6165
|
||||
:1019FC00726D20256420616C726561647920636C62
|
||||
:101A0C0061696D65640000004861726420617373E4
|
||||
:101A1C006572740052656C6561736500626F6F74FA
|
||||
:101A2C00325F77323571303830000000302E3100A3
|
||||
:101A3C00322E322E300000007069636F32000000CD
|
||||
:101A4C003078303030315F68656C6C6F2D776F7229
|
||||
:101A5C006C6400004F637420313720323032360012
|
||||
:101A6C005541525420737464696E000055415254B0
|
||||
:101A7C00207374646F7574005541525420737464F0
|
||||
:101A8C00696E202F207374646F75740006005250B9
|
||||
:101A9C00D3F07542201A001006005250E182887F64
|
||||
:101AAC00281A0010060052503ABCA911381A00101E
|
||||
:101ABC0006005250ABB360533C1A00100600525053
|
||||
:101ACC00BBFF3CB6441A001006005250861C0302A1
|
||||
:101ADC004C1A0010060052505422A29D601A00109D
|
||||
:101AEC0005005250DE65F468FC1C00100D0A000065
|
||||
:101AFC000600525053B4F4A1841A0010080052503E
|
||||
:0C1B0C001200000008005250921000006F
|
||||
:081B180014FDFF7F0100000035
|
||||
:101B2000981A0010A41A0010B01A0010BC1A001065
|
||||
:101B3000C81A0010D41A0010E01A0010EC1A001095
|
||||
:0C1B4000101B0010081B0010FC1A001005
|
||||
:101B4C004FF050412DE9F0410027044616461D4642
|
||||
:101B5C00D1F8008008E0C1E88F7F8CF31088304604
|
||||
:101B6C00294600F075F8E8B92168EFF3108C72B6CD
|
||||
:101B7C00D1E8CF2F0123002AFAD1C1E8423F002A35
|
||||
:101B8C00F6D1BFF35F8F94F904302168002BE2DAB1
|
||||
:101B9C00002384F80480C1E88F3F8CF31088012067
|
||||
:101BAC00BDE8F0810020BDE8F08100BF30B50468CD
|
||||
:101BBC00EFF3108C72B6D4E8CFEF0125BEF1000F15
|
||||
:101BCC00F9D1C4E84E5FBEF1000FF4D1BFF35F8FC3
|
||||
:101BDC0090F904400568002C10DB0021C5E88F1F2C
|
||||
:101BEC008CF310884FF0504595F90050A54201D167
|
||||
:101BFC00084630BDBDE83040FFF7A2BF4FF0504261
|
||||
:101C0C00126800230271C5E88F3F8CF31088012005
|
||||
:101C1C0030BD00BF0368EFF3108272B6D3E8CFCFAC
|
||||
:101C2C000121BCF1000FF9D1C3E84C1FBCF1000F2E
|
||||
:101C3C00F4D1BFF35F8F4FF0FF0C0023016880F8E5
|
||||
:101C4C0004C0C1E88F3F82F3108840BF704700BFCB
|
||||
:101C5C005FF800F0990C001010000000000000006C
|
||||
:101C6C000000010000000000000000000000020065
|
||||
:101C7C000000000000000000000003000000000055
|
||||
:101C8C00000000000000FF000000000001B54868E3
|
||||
:101C9C0001318E460047704609380149884701BD1D
|
||||
:101CAC000D06001000000000000000000000000005
|
||||
:101CBC000000000000000000B002002039160010E7
|
||||
:101CCC004117001089160010511700100000000079
|
||||
:0C1CDC00000100000000000000000000FB
|
||||
:101CE800D3DEFFFFFE010000FF01000050E4FFFF0C
|
||||
:041CF800793512AB7D
|
||||
:040000051000014D99
|
||||
:00000001FF
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
FLASH(rx) : ORIGIN = 0x10000000, LENGTH = (4 * 1024 * 1024)
|
||||
@@ -0,0 +1,121 @@
|
||||
# This is a copy of <PICO_SDK_PATH>/external/pico_sdk_import.cmake
|
||||
|
||||
# This can be dropped into an external project to help locate this SDK
|
||||
# It should be include()ed prior to project()
|
||||
|
||||
# Copyright 2020 (c) 2020 Raspberry Pi (Trading) Ltd.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
||||
# following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
|
||||
# disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
|
||||
# disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH))
|
||||
set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})
|
||||
message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')")
|
||||
endif ()
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT))
|
||||
set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT})
|
||||
message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')")
|
||||
endif ()
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH))
|
||||
set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH})
|
||||
message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')")
|
||||
endif ()
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_TAG} AND (NOT PICO_SDK_FETCH_FROM_GIT_TAG))
|
||||
set(PICO_SDK_FETCH_FROM_GIT_TAG $ENV{PICO_SDK_FETCH_FROM_GIT_TAG})
|
||||
message("Using PICO_SDK_FETCH_FROM_GIT_TAG from environment ('${PICO_SDK_FETCH_FROM_GIT_TAG}')")
|
||||
endif ()
|
||||
|
||||
if (PICO_SDK_FETCH_FROM_GIT AND NOT PICO_SDK_FETCH_FROM_GIT_TAG)
|
||||
set(PICO_SDK_FETCH_FROM_GIT_TAG "master")
|
||||
message("Using master as default value for PICO_SDK_FETCH_FROM_GIT_TAG")
|
||||
endif()
|
||||
|
||||
set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK")
|
||||
set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable")
|
||||
set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK")
|
||||
set(PICO_SDK_FETCH_FROM_GIT_TAG "${PICO_SDK_FETCH_FROM_GIT_TAG}" CACHE FILEPATH "release tag for SDK")
|
||||
|
||||
if (NOT PICO_SDK_PATH)
|
||||
if (PICO_SDK_FETCH_FROM_GIT)
|
||||
include(FetchContent)
|
||||
set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR})
|
||||
if (PICO_SDK_FETCH_FROM_GIT_PATH)
|
||||
get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
|
||||
endif ()
|
||||
FetchContent_Declare(
|
||||
pico_sdk
|
||||
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
|
||||
GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG}
|
||||
)
|
||||
|
||||
if (NOT pico_sdk)
|
||||
message("Downloading Raspberry Pi Pico SDK")
|
||||
# GIT_SUBMODULES_RECURSE was added in 3.17
|
||||
if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.17.0")
|
||||
FetchContent_Populate(
|
||||
pico_sdk
|
||||
QUIET
|
||||
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
|
||||
GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG}
|
||||
GIT_SUBMODULES_RECURSE FALSE
|
||||
|
||||
SOURCE_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-src
|
||||
BINARY_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-build
|
||||
SUBBUILD_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-subbuild
|
||||
)
|
||||
else ()
|
||||
FetchContent_Populate(
|
||||
pico_sdk
|
||||
QUIET
|
||||
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
|
||||
GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG}
|
||||
|
||||
SOURCE_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-src
|
||||
BINARY_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-build
|
||||
SUBBUILD_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-subbuild
|
||||
)
|
||||
endif ()
|
||||
|
||||
set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR})
|
||||
endif ()
|
||||
set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE})
|
||||
else ()
|
||||
message(FATAL_ERROR
|
||||
"SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git."
|
||||
)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
|
||||
if (NOT EXISTS ${PICO_SDK_PATH})
|
||||
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found")
|
||||
endif ()
|
||||
|
||||
set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake)
|
||||
if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE})
|
||||
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK")
|
||||
endif ()
|
||||
|
||||
set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)
|
||||
|
||||
include(${PICO_SDK_INIT_CMAKE_FILE})
|
||||
@@ -0,0 +1,9 @@
|
||||
build/CMakeFiles/
|
||||
build/pico_sdk/
|
||||
build/pico-sdk/
|
||||
build/generated/
|
||||
build/_deps/
|
||||
build/*.o
|
||||
build/*.d
|
||||
build/*.obj
|
||||
!.vscode/*
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Pico",
|
||||
"includePath": [
|
||||
"${workspaceFolder}/**",
|
||||
"${userHome}/.pico-sdk/sdk/2.3.0/**"
|
||||
],
|
||||
"forcedInclude": [
|
||||
"${workspaceFolder}/build/generated/pico_base/pico/config_autogen.h",
|
||||
"${userHome}/.pico-sdk/sdk/2.3.0/src/common/pico_base_headers/include/pico.h"
|
||||
],
|
||||
"defines": [],
|
||||
"compilerPath": "${userHome}/.pico-sdk/toolchain/15_2_Rel1/bin/arm-none-eabi-gcc.exe",
|
||||
"compileCommands": "${workspaceFolder}/build/compile_commands.json",
|
||||
"cStandard": "c17",
|
||||
"cppStandard": "c++14",
|
||||
"intelliSenseMode": "linux-gcc-arm"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
[
|
||||
{
|
||||
"name": "Pico",
|
||||
"compilers": {
|
||||
"C": "${command:raspberry-pi-pico.getCompilerPath}",
|
||||
"CXX": "${command:raspberry-pi-pico.getCxxCompilerPath}"
|
||||
},
|
||||
"environmentVariables": {
|
||||
"PATH": "${command:raspberry-pi-pico.getEnvPath};${env:PATH}"
|
||||
},
|
||||
"cmakeSettings": {
|
||||
"Python3_EXECUTABLE": "${command:raspberry-pi-pico.getPythonPath}"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"marus25.cortex-debug",
|
||||
"ms-vscode.cpptools",
|
||||
"ms-vscode.cpptools-extension-pack",
|
||||
"ms-vscode.vscode-serial-monitor",
|
||||
"raspberry-pi.raspberry-pi-pico"
|
||||
]
|
||||
}
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Pico Debug (Cortex-Debug)",
|
||||
"cwd": "${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"executable": "${command:raspberry-pi-pico.launchTargetPath}",
|
||||
"request": "launch",
|
||||
"type": "cortex-debug",
|
||||
"servertype": "openocd",
|
||||
"serverpath": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"gdbPath": "${command:raspberry-pi-pico.getGDBPath}",
|
||||
"debuggerArgs": ["-ex", "set debug-file-directory /debug"],
|
||||
"device": "${command:raspberry-pi-pico.getChipUppercase}",
|
||||
"configFiles": [
|
||||
"interface/cmsis-dap.cfg",
|
||||
"target/${command:raspberry-pi-pico.getTarget}.cfg"
|
||||
],
|
||||
"svdFile": "${userHome}/.pico-sdk/sdk/2.3.0/src/${command:raspberry-pi-pico.getChip}/hardware_regs/${command:raspberry-pi-pico.getChipUppercase}.svd",
|
||||
"runToEntryPoint": "main",
|
||||
// Fix for no_flash binaries, where monitor reset halt doesn't do what is expected
|
||||
// Also works fine for flash binaries
|
||||
"overrideLaunchCommands": [
|
||||
"monitor reset init",
|
||||
"load \"${command:raspberry-pi-pico.launchTargetPath}\""
|
||||
],
|
||||
"openOCDLaunchCommands": [
|
||||
"adapter speed 5000"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Pico Debug (Cortex-Debug with external OpenOCD)",
|
||||
"cwd": "${workspaceRoot}",
|
||||
"executable": "${command:raspberry-pi-pico.launchTargetPath}",
|
||||
"request": "launch",
|
||||
"type": "cortex-debug",
|
||||
"servertype": "external",
|
||||
"gdbTarget": "localhost:3333",
|
||||
"gdbPath": "${command:raspberry-pi-pico.getGDBPath}",
|
||||
"debuggerArgs": ["-ex", "set debug-file-directory /debug"],
|
||||
"device": "${command:raspberry-pi-pico.getChipUppercase}",
|
||||
"svdFile": "${userHome}/.pico-sdk/sdk/2.3.0/src/${command:raspberry-pi-pico.getChip}/hardware_regs/${command:raspberry-pi-pico.getChipUppercase}.svd",
|
||||
"runToEntryPoint": "main",
|
||||
// Fix for no_flash binaries, where monitor reset halt doesn't do what is expected
|
||||
// Also works fine for flash binaries
|
||||
"overrideLaunchCommands": [
|
||||
"monitor reset init",
|
||||
"load \"${command:raspberry-pi-pico.launchTargetPath}\""
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"cmake.showSystemKits": false,
|
||||
"cmake.options.statusBarVisibility": "hidden",
|
||||
"cmake.options.advanced": {
|
||||
"build": {
|
||||
"statusBarVisibility": "hidden"
|
||||
},
|
||||
"launch": {
|
||||
"statusBarVisibility": "hidden"
|
||||
},
|
||||
"debug": {
|
||||
"statusBarVisibility": "hidden"
|
||||
},
|
||||
"variant": {
|
||||
"statusBarVisibility": "hidden"
|
||||
},
|
||||
"buildTarget": {
|
||||
"statusBarVisibility": "hidden"
|
||||
}
|
||||
},
|
||||
"cmake.configureOnEdit": false,
|
||||
"cmake.automaticReconfigure": false,
|
||||
"cmake.configureOnOpen": false,
|
||||
"cmake.generator": "Ninja",
|
||||
"cmake.cmakePath": "${userHome}/.pico-sdk/cmake/v4.3.4/bin/cmake",
|
||||
"C_Cpp.debugShortcut": false,
|
||||
"terminal.integrated.env.windows": {
|
||||
"PICO_SDK_PATH": "${env:USERPROFILE}/.pico-sdk/sdk/2.3.0",
|
||||
"PICO_TOOLCHAIN_PATH": "${env:USERPROFILE}/.pico-sdk/toolchain/15_2_Rel1",
|
||||
"Path": "${env:USERPROFILE}/.pico-sdk/toolchain/15_2_Rel1/bin;${env:USERPROFILE}/.pico-sdk/picotool/2.3.0/picotool;${env:USERPROFILE}/.pico-sdk/cmake/v4.3.4/bin;${env:USERPROFILE}/.pico-sdk/ninja/v1.13.2;${env:PATH}"
|
||||
},
|
||||
"terminal.integrated.env.osx": {
|
||||
"PICO_SDK_PATH": "${env:HOME}/.pico-sdk/sdk/2.3.0",
|
||||
"PICO_TOOLCHAIN_PATH": "${env:HOME}/.pico-sdk/toolchain/15_2_Rel1",
|
||||
"PATH": "${env:HOME}/.pico-sdk/toolchain/15_2_Rel1/bin:${env:HOME}/.pico-sdk/picotool/2.3.0/picotool:${env:HOME}/.pico-sdk/cmake/v4.3.4/bin:${env:HOME}/.pico-sdk/ninja/v1.13.2:${env:PATH}"
|
||||
},
|
||||
"terminal.integrated.env.linux": {
|
||||
"PICO_SDK_PATH": "${env:HOME}/.pico-sdk/sdk/2.3.0",
|
||||
"PICO_TOOLCHAIN_PATH": "${env:HOME}/.pico-sdk/toolchain/15_2_Rel1",
|
||||
"PATH": "${env:HOME}/.pico-sdk/toolchain/15_2_Rel1/bin:${env:HOME}/.pico-sdk/picotool/2.3.0/picotool:${env:HOME}/.pico-sdk/cmake/v4.3.4/bin:${env:HOME}/.pico-sdk/ninja/v1.13.2:${env:PATH}"
|
||||
},
|
||||
"raspberry-pi-pico.cmakeAutoConfigure": true,
|
||||
"raspberry-pi-pico.useCmakeTools": false,
|
||||
"raspberry-pi-pico.cmakePath": "${HOME}/.pico-sdk/cmake/v4.3.4/bin/cmake",
|
||||
"raspberry-pi-pico.ninjaPath": "${HOME}/.pico-sdk/ninja/v1.13.2/ninja"
|
||||
}
|
||||
+102
@@ -0,0 +1,102 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Compile Project",
|
||||
"type": "process",
|
||||
"isBuildCommand": true,
|
||||
"command": "${userHome}/.pico-sdk/ninja/v1.13.2/ninja",
|
||||
"args": ["-C", "${workspaceFolder}/build"],
|
||||
"group": "build",
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"panel": "dedicated"
|
||||
},
|
||||
"problemMatcher": "$gcc",
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/ninja/v1.13.2/ninja.exe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Run Project",
|
||||
"type": "process",
|
||||
"command": "${env:HOME}/.pico-sdk/picotool/2.3.0/picotool/picotool",
|
||||
"args": [
|
||||
"load",
|
||||
"${command:raspberry-pi-pico.launchTargetPath}",
|
||||
"-fx"
|
||||
],
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"panel": "dedicated"
|
||||
},
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/picotool/2.3.0/picotool/picotool.exe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Flash",
|
||||
"type": "process",
|
||||
"command": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"args": [
|
||||
"-s",
|
||||
"${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"-f",
|
||||
"interface/cmsis-dap.cfg",
|
||||
"-f",
|
||||
"target/${command:raspberry-pi-pico.getTarget}.cfg",
|
||||
"-c",
|
||||
"adapter speed 5000; program \"${command:raspberry-pi-pico.launchTargetPath}\" verify reset exit"
|
||||
],
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/openocd/0.12.0+dev/openocd.exe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Rescue Reset",
|
||||
"type": "process",
|
||||
"command": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"args": [
|
||||
"-s",
|
||||
"${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"-f",
|
||||
"interface/cmsis-dap.cfg",
|
||||
"-f",
|
||||
"target/${command:raspberry-pi-pico.getChip}-rescue.cfg",
|
||||
"-c",
|
||||
"adapter speed 5000; reset halt; exit"
|
||||
],
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/openocd/0.12.0+dev/openocd.exe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "RISC-V Reset (RP2350)",
|
||||
"type": "process",
|
||||
"command": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"args": [
|
||||
"-s",
|
||||
"${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"-c",
|
||||
"set USE_CORE { rv0 rv1 cm0 cm1 }",
|
||||
"-f",
|
||||
"interface/cmsis-dap.cfg",
|
||||
"-f",
|
||||
"target/rp2350.cfg",
|
||||
"-c",
|
||||
"adapter speed 5000; init;",
|
||||
"-c",
|
||||
"write_memory 0x40120158 8 { 0x3 }; echo [format \"Info : ARCHSEL 0x%02x\" [read_memory 0x40120158 8 1]];",
|
||||
"-c",
|
||||
"reset halt; targets rp2350.rv0; echo [format \"Info : ARCHSEL_STATUS 0x%02x\" [read_memory 0x4012015C 8 1]]; exit"
|
||||
],
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/openocd/0.12.0+dev/openocd.exe"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
#include <stdio.h>
|
||||
#include "pico/stdlib.h"
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
stdio_init_all();
|
||||
|
||||
while (true) {
|
||||
__asm volatile(
|
||||
// Save a low register and the link register.
|
||||
"push {r4, lr}\n"
|
||||
// Intentionally unordered: the encoded list is still r2, r3, r6.
|
||||
"push {r3, r2, r6}\n"
|
||||
// Thumb PUSH cannot encode high registers r8-r12.
|
||||
"stmdb sp!, {r9, r10}\n"
|
||||
// Restore each group in reverse order to return SP to its start.
|
||||
"ldmia sp!, {r9, r10}\n"
|
||||
"pop {r2, r3, r6}\n"
|
||||
"pop {r4, lr}\n"
|
||||
::: "memory");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
# Generated Cmake Pico project file
|
||||
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
# Initialise pico_sdk from installed location
|
||||
# (note this can come from environment, CMake cache etc)
|
||||
|
||||
# == DO NOT EDIT THE FOLLOWING LINES for the Raspberry Pi Pico VS Code Extension to work ==
|
||||
if(WIN32)
|
||||
set(USERHOME $ENV{USERPROFILE})
|
||||
else()
|
||||
set(USERHOME $ENV{HOME})
|
||||
endif()
|
||||
set(sdkVersion 2.3.0)
|
||||
set(toolchainVersion 15_2_Rel1)
|
||||
set(picotoolVersion 2.3.0)
|
||||
set(picoVscode ${USERHOME}/.pico-sdk/cmake/pico-vscode.cmake)
|
||||
if (EXISTS ${picoVscode})
|
||||
include(${picoVscode})
|
||||
endif()
|
||||
# ====================================================================================
|
||||
set(PICO_BOARD pico2 CACHE STRING "Board type")
|
||||
|
||||
# Pull in Raspberry Pi Pico SDK (must be before project)
|
||||
include(pico_sdk_import.cmake)
|
||||
|
||||
project(0x0001a_stack C CXX ASM)
|
||||
|
||||
# Initialise the Raspberry Pi Pico SDK
|
||||
pico_sdk_init()
|
||||
|
||||
# Add executable. Default name is the project name, version 0.1
|
||||
|
||||
add_executable(0x0001a_stack 0x0001a_stack.c )
|
||||
|
||||
pico_set_program_name(0x0001a_stack "0x0001a_stack")
|
||||
pico_set_program_version(0x0001a_stack "0.1")
|
||||
|
||||
# Modify the below lines to enable/disable output over UART/USB
|
||||
pico_enable_stdio_uart(0x0001a_stack 1)
|
||||
pico_enable_stdio_usb(0x0001a_stack 0)
|
||||
|
||||
# Add the standard library to the build
|
||||
target_link_libraries(0x0001a_stack
|
||||
pico_stdlib)
|
||||
|
||||
# Add the standard include files to the build
|
||||
target_include_directories(0x0001a_stack PRIVATE
|
||||
${CMAKE_CURRENT_LIST_DIR}
|
||||
)
|
||||
|
||||
pico_add_extra_outputs(0x0001a_stack)
|
||||
|
||||
Executable
BIN
Binary file not shown.
File diff suppressed because it is too large.
Load diff
Executable
BIN
Binary file not shown.
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,478 @@
|
||||
:020000041000EA
|
||||
:10000000002008205B0100101B0100101D010010E2
|
||||
:100010001101001011010010110100101101001058
|
||||
:100020001901001019010010190100101F01001022
|
||||
:10003000110100101901001021010010230100100E
|
||||
:100040001101001011010010110100101101001028
|
||||
:100050001101001011010010110100101101001018
|
||||
:100060001101001011010010110100101101001008
|
||||
:1000700011010010110100101101001011010010F8
|
||||
:1000800011010010110100101101001011010010E8
|
||||
:1000900011010010110100101101001011010010D8
|
||||
:1000A00011010010110100101101001011010010C8
|
||||
:1000B00011010010110100101101001011010010B8
|
||||
:1000C00011010010110100101101001011010010A8
|
||||
:1000D0001101001011010010110100101101001098
|
||||
:1000E0001101001011010010110100101101001088
|
||||
:1000F0001101001011010010110100101101001078
|
||||
:100100001101001011010010110100101101001067
|
||||
:10011000EFF30580103800BE00BE00BE00BE00BE7A
|
||||
:1001200000BE00BEF2EB8871601A00108C1A00103D
|
||||
:100130009C01001090A31AE7D3DEFFFF42012110BB
|
||||
:10014000FF0100003C1C0000793512AB00201E4965
|
||||
:10015000086006C881F3088810474FF050400068D7
|
||||
:1001600008B10020F3E70DA40ECC002902D000F066
|
||||
:1001700012F8F9E71549164A002000E001C1914242
|
||||
:10018000FCD114498847144988471449884700BE60
|
||||
:10019000FDE701C901C29A42FBD370478C1A0010D7
|
||||
:1001A00010010020F8030020741D0010000008203A
|
||||
:1001B00000000820741D0010001008200010082006
|
||||
:1001C000000000007047000008ED00E0F803002088
|
||||
:1001D0000806002095130010E10100108D13001097
|
||||
:1001E00008B501F0D7F910B54CB42DE90006BDE80B
|
||||
:1001F00000064CBCBDE81040F5E700BF4FF4807C22
|
||||
:100200000C4B00B553F8202003EB8003C00082F0B4
|
||||
:10021000400200F1804003F5805E02F0C00200F56C
|
||||
:10022000203003F54053CEF800204160C3F800C0F1
|
||||
:1002300000BD00BF048003400FB400B5084883B080
|
||||
:1002400001F0F0F9049B3BB105A91846019101F0BA
|
||||
:1002500081F8044801F0E6F9012001F093F800BFAD
|
||||
:10026000201900103019001070B51646EFF31084F5
|
||||
:1002700072B6DFF848E0DEE8CF2F0123002AFAD17A
|
||||
:10028000CEE8423F002AF6D1BFF35F8F012301F091
|
||||
:10029000070CCA0803FA0CF310F802C01CEA0305A5
|
||||
:1002A00008D14CEA030C00F802C0CEE88F5F84F35B
|
||||
:1002B000108870BD3046FFF7BFFF00BF83050020E8
|
||||
:1002C000044A1078431CDBB2182B28BF102313708C
|
||||
:1002D000704700BF680300204FF0E022936843F0AE
|
||||
:1002E00000539360704700BF0021044B03F12002CC
|
||||
:1002F000C3E88F1F01339342FAD17047780500207D
|
||||
:100300004FF0E0234FF08032C3F80024C3F80424F8
|
||||
:10031000C3F80824C3F80C24C3F81024C3F8142429
|
||||
:10032000C3F81824C3F81C24C3F82024C3F82424D9
|
||||
:10033000C3F82824C3F82C24C3F8302462B67047CD
|
||||
:10034000012300F01F029340400941B1800000F1F9
|
||||
:10035000604000F56140C0F8803103607047024A98
|
||||
:10036000203042F82030704700E100E008B5EFF39C
|
||||
:10037000108E72B6134BD3E8CFCF0122BCF1000F21
|
||||
:10038000F9D1C3E84C2FBCF1000FF4D1BFF35F8F5C
|
||||
:100390000D4A10309268DFF834C052F820206245D0
|
||||
:1003A00001D091420BD1084A926842F82010BFF365
|
||||
:1003B0005F8F0022C3E88F2F8EF3108808BD00F0F6
|
||||
:1003C000B5FE00BF8105002000ED00E01101001026
|
||||
:1003D0002DE9F04782B0EFF3108572B6DFF8A8C1BF
|
||||
:1003E000DCE8CF2F0123002AFAD1CCE8423F002AD3
|
||||
:1003F000F6D1BFF35F8F5E4B00F110049B6853F89A
|
||||
:1004000024205C4B9A423DD08A4249D0DFF87CE1FF
|
||||
:10041000A2EB0E032F2B35D8012743099B0000F0D8
|
||||
:100420001F0003F1604303F5614387401E689A464D
|
||||
:10043000B946C3F88070BFF35F8FEFF30583DBB27B
|
||||
:100440001F467BBB0123834022F0010003EA06081C
|
||||
:100450008668B14208D181E003EB43030EEB8303CE
|
||||
:100460009E68B14225D0184690F90630002BF3DA89
|
||||
:10047000B1424ED05346B8F1000F17D0C3F8809167
|
||||
:10048000C3F800903A4B9B6843F82420BFF35F8F7A
|
||||
:100490000023CCE88F3F85F3108802B0BDE8F087D9
|
||||
:1004A0001A46EFE79C42CDD000F040FEC3F88090A2
|
||||
:1004B000E8E793F90660002E2CDB06EB46000EEB16
|
||||
:1004C000800180000190C8798F68D87191F9060089
|
||||
:1004D0009F60002898714FEA46072EDB89880198B3
|
||||
:1004E00041F30A0100EB41016FF00700083171444C
|
||||
:1004F000C01A0144C1F34A016FEAC1416FEAD14118
|
||||
:1005000099801D49BB1908780EEB83030E70987112
|
||||
:10051000B0E703469FB9FF2181714BF601518180FD
|
||||
:10052000154E184637784AF6AA219F717346C01AAD
|
||||
:1005300040414143090D31709CE71049E0E7104903
|
||||
:10054000104EC91A0839C1F30A306FEA00506FEA39
|
||||
:10055000105046EA5101D98098808BE790F90660E7
|
||||
:100560000346002EA9DA002FE9D1024AD8E700BFDE
|
||||
:1005700000ED00E0110100100406002001BDFFFFA6
|
||||
:10058000A603002000F8FFFF810500206C03002077
|
||||
:100590002DE9F041EFF30583DBB29E46EFF31085C2
|
||||
:1005A00072B62949D1E8CF2F0123002AFAD1C1E838
|
||||
:1005B000423F002AF6D1BFF35F8FDFF89C8040F006
|
||||
:1005C0000106D8F808704AF6AA2357F82E70044698
|
||||
:1005D0001E4AA41A644163431B0DB7425BB21ED08E
|
||||
:1005E00092F906409C4220D092F912409C4227D0BA
|
||||
:1005F00092F91E409C4225D092F92A409C4208BFA5
|
||||
:10060000032413D0124A002492F800C0137080F81B
|
||||
:1006100006C0C1E88F4F85F31088BDE8F081D8F897
|
||||
:1006200008200C4C42F82E40ECE7002404EB440474
|
||||
:1006300002EB8402FF2494714BF601549480E1E7AD
|
||||
:100640000124F3E70224F1E7810500206C03002078
|
||||
:10065000040600201101001000ED00E0014B0B44E6
|
||||
:10066000036070477805002070B5104C104DAC4207
|
||||
:100670000ED2FF26236863B1FFF722FE0146204613
|
||||
:10068000FFF7ECFFA680BFF35F8F0834AC42F1D3D5
|
||||
:1006900070BDFFF715FE01462046FFF7DFFF26710C
|
||||
:1006A000BFF35F8F0834AC42E4D370BDF003002089
|
||||
:1006B000F803002010490B68EFF3108072B6D3E8FE
|
||||
:1006C000CFCF0122BCF1000FF9D1C3E84C2FBCF110
|
||||
:1006D000000FF4D1BFF35F8F084A4FF0000C13787E
|
||||
:1006E000096801331370C1E88FCF80F3108840BFD1
|
||||
:1006F00000200021704700BFF805002005060020FB
|
||||
:100700002DE9F04F2DED028B85B0EFF30583DBB2C1
|
||||
:10071000103B9A0818BF01224FF0010103F0030BB0
|
||||
:1007200018BFA94CA94B08BFA94C0BEB820253F888
|
||||
:10073000225001FA0BF204F541539FEDA18B029276
|
||||
:100740005A602FE0AB88190440F19480AB79002BFC
|
||||
:1007500040F0DE80B5F90860002EC0F21C816B69A4
|
||||
:1007600006EB460603EBC603D3E90267B7F1FF3F8A
|
||||
:1007700008BFB6F1FF3F0ED004EB8B01A36A0A69F4
|
||||
:10078000D21AF31A934205D30123226A03FA0BF318
|
||||
:10079000134200D10E61204600F0FAFAB042B9418E
|
||||
:1007A000C0F2F980B5F90860029B002EE363C9DB53
|
||||
:1007B000D5F8149006EB460A09EBCA07BB68204639
|
||||
:1007C000D7F80C80019300F0E3FA019B984271EB9B
|
||||
:1007D0000801B7DBB8F1000FC0F2C080D7E90431DF
|
||||
:1007E0007C4A934200F0F8807A88B5F9080092B20A
|
||||
:1007F00042EA0040984702460B4652EA030100F0E5
|
||||
:10080000AD80002B80F2CD800199B1EB020E68EB38
|
||||
:10081000030839F93A30C7E902E8002B92DB68692E
|
||||
:1008200003EB430200EBC202D2E90271BE4578EB52
|
||||
:10083000010C4FEA430285DBAC462CF8083F06E08A
|
||||
:1008400003EB430100EBC1015A00D1E90271BE453F
|
||||
:1008500078EB01011A4405DB30F9323000EBC20CB1
|
||||
:10086000002BEDDA29F83A30ACF80060AB881904B7
|
||||
:100870003FF56CAF2B69EFF3108272B6D3E8CF0F60
|
||||
:1008800001210028FAD1C3E8401F0028F6D1BFF3A8
|
||||
:100890005F8F4FF6FF76A8880023296900B2AE80EB
|
||||
:1008A000C1E88F3F82F310889842FFF64FAF0746AA
|
||||
:1008B000A1466E6905F10808B5F9083007EB470E47
|
||||
:1008C000002BC44606EBCE0215DBD2E90240AA4655
|
||||
:1008D000019704E036F935309446002B09DB03EB31
|
||||
:1008E000430506EBC502D2E90271BC4270EB01017F
|
||||
:1008F000F0DA5546019FACF8007036F93E7026F8E4
|
||||
:100900003E30002FD8DAAB794C46002B3FF422AFB3
|
||||
:100910000023AB71B5F90860721C33463BD068699F
|
||||
:1009200005F1080E03E08E465A1C3FF415AF03EBA9
|
||||
:10093000430200EBC2014F889C463F0430F932303D
|
||||
:10094000F1D5664581ED028BEED0AEF800302989F5
|
||||
:10095000664620F83210A5F808C0E5E739F83A30C5
|
||||
:100960002B812B69EFF3108272B6D3E8CF0F0121F0
|
||||
:100970000028FAD1C3E8401F0028F6D1BFF35F8FEB
|
||||
:100980006B88296929F83A3000236E80C1E88F3FCF
|
||||
:1009900082F31088D6E640BF05B0BDEC028BBDE8FF
|
||||
:1009A000F08F20460393019200F0F2F9019A039B25
|
||||
:1009B00010EB020E43EB01082BE700BFAFF3008002
|
||||
:1009C000FFFFFFFFFFFFFFFF00800B40D805002067
|
||||
:1009D00000000B400107001008460B69039198477F
|
||||
:1009E0000028BBD00399D1E9002306E738B5384B7E
|
||||
:1009F0001C692CB1BDE838400A213648FFF72EBEED
|
||||
:100A00000321354800F0B2F9334D314BDD60FFF77B
|
||||
:100A100057FC324A4FF0504E024403202C4B4FF00B
|
||||
:100A20000F0C18701A61DEF800204FF6FF715A7033
|
||||
:100A30005A69A3F802C014834FF00204A2F8484098
|
||||
:100A40004FF00404A2F878404FF00504A2F890405B
|
||||
:100A50004FF00604A2F8A8404FF00704A2F8C040E7
|
||||
:100A60004FF00904A2F8F0404FF00A04A2F8084140
|
||||
:100A70004FF00B04A2F820414FF00C04A2F83841CB
|
||||
:100A80004FF0010414864FF00804A2F8D840144C2B
|
||||
:100A90004FF00D0E4FF00E0C9C6008249980A2F8C8
|
||||
:100AA00050E1A2F868C1A2F8600011800D4A2C62E2
|
||||
:100AB0000D49D360FFF75AFC01210320FFF740FCEA
|
||||
:100AC0000A4B0A211C640348BDE83840FFF7C6BD45
|
||||
:100AD000C0030020F805002000000B40780500202E
|
||||
:100AE000FFFF1000D80500200107001000200B4078
|
||||
:100AF000F0B516461F4602690346EFF3108072B642
|
||||
:100B0000D2E8CF4F0121002CFAD1C2E8441F002CBB
|
||||
:100B1000F6D1BFF35F8FB3F902101D69002945DBE1
|
||||
:100B2000D3F814E001EB41023EF832400EEBC20C68
|
||||
:100B30005C800024C5E88F4F80F310880598354607
|
||||
:100B4000CCF8100006983E46CCF81400BCF8020021
|
||||
:100B5000CCE902560130C0F30E00012838BF012055
|
||||
:100B6000ACF8020040EA0140D3F810C0EFF3108562
|
||||
:100B700072B6DCE8CF7F0126002FFAD1CCE8476FB0
|
||||
:100B8000002FF6D1BFF35F8FB3F804C02EF832C048
|
||||
:100B900099801A69C2E88F4F85F3108801211C786B
|
||||
:100BA000DA68A14002F501535960F0BD0023C5E8A1
|
||||
:100BB0008F3F80F310884FF0FF30F0BD034640892F
|
||||
:100BC000B0EB214F3ADD58690A1402EB420210B52E
|
||||
:100BD000D3F810C000EBC200EFF3108E72B6DCE861
|
||||
:100BE000CF4F0122002CFAD1CCE8442F002CF6D1B3
|
||||
:100BF000BFF35F8F428889B292B28A4207D0002247
|
||||
:100C00001B69C3E88F2F8EF31088002010BD6FEA98
|
||||
:100C100042426FEA524242800121002218699971D2
|
||||
:100C2000C0E88F2F8EF3108893F800C0DA6808466A
|
||||
:100C300002F5015301FA0CF1596010BD0020704714
|
||||
:100C4000F0B5024685B0EFF30585EDB2002D61D118
|
||||
:100C50000B46424CD4E90001994208BF90424AD069
|
||||
:100C6000CDE902233E4BDF681E78384600F090F84D
|
||||
:100C700006F1040C57F82CC0029A039BACEB000C55
|
||||
:100C8000101A63EB0101604571F1000133DACDE91F
|
||||
:100C9000022300F085F8029A039B824263EB010174
|
||||
:100CA000002949DB2F492E4800910195CDE90232F8
|
||||
:100CB000FFF71EFFDDE90232011E3DDD2A48C4E9CF
|
||||
:100CC0000023446A9C4246D3806A904241D3244820
|
||||
:100CD000CDE90232FFF772FF2349029B486A98422E
|
||||
:100CE0001CD314BF012000208B6A039A934228BFB3
|
||||
:100CF00040F001000CE020BF1B49486A98420DD328
|
||||
:100D000014BF012000208B6A934228BF40F00100ED
|
||||
:100D100005B0F0BD1448436A8B4202D2002005B0F2
|
||||
:100D2000F0BD14BF01230023816A914234BF1846ED
|
||||
:100D300043F0010005B0F0BD0B49486A9842EDD37D
|
||||
:100D4000C01A18BF01208B6A934228BF40F00100EF
|
||||
:100D5000DEE79C42BBD120BFB9E700BFB80300204B
|
||||
:100D6000C0030020B506001000000B4010B4054B76
|
||||
:100D7000054C064AA04214BF1846581C10BCFFF789
|
||||
:100D800073BA00BFA005002000800B40341900108A
|
||||
:100D90000346416A0A46986A596A8A42FAD17047FC
|
||||
:100DA000034B596A0A46986A596A9142FAD17047C8
|
||||
:100DB00000000B4000B58E46154A536A9C46916A66
|
||||
:100DC000536A6345FAD1401853EB0E034FF000020B
|
||||
:100DD00028BF0122BAB10E4B5A6A531C08BF1046F5
|
||||
:100DE00008D04FF0FF33184609494A6A9A42FCD3AB
|
||||
:100DF0009A4207D1064B02E0596A914202D1996AA0
|
||||
:100E00008142F9D300BD024A526A9342ECD8EFE71F
|
||||
:100E100000000B4070B5044682B006200E4600F07C
|
||||
:100E2000EFF8002844D0384A3848944214BF4FF0B5
|
||||
:100E300080624FF00062364B364902601A608D685E
|
||||
:100E400032EA0505FBD1304A4FF48070A21AB2FA9B
|
||||
:100E500082F23149520921F81200062000F0D0F840
|
||||
:100E6000C200B2FBF6F20132D10923D140260123A0
|
||||
:100E70006362A162256BEB0725D42346002153F85A
|
||||
:100E80002C2F062003F5805211602563019200F09B
|
||||
:100E9000B7F840F2013503218000B0FBF6F0E36AB9
|
||||
:100EA000019A83F0700303F07E0313602563A1644D
|
||||
:100EB00002B070BD4FF6FE7081421DD929464FF633
|
||||
:100EC000FF73164ED4E740F2013204F540531A6323
|
||||
:100ED000636AA26A062002EB8312019200F090F886
|
||||
:100EE0000F4B019AA3FB00139002DB0AB0FBF3F057
|
||||
:100EF0000021FFF75FFFC0E7C2F345020B4602EB9C
|
||||
:100F000081161146B4E700BF008007400020024070
|
||||
:100F10000030024000000240FC050020C0FF3F00FE
|
||||
:100F2000757B2B8F00EB400C4FEA8C0C0CF1804C46
|
||||
:100F30000CF5803C70B51E46DCF80430041FB3F598
|
||||
:100F4000803F38BF4FF48033E4B238BFCCF8043070
|
||||
:100F5000012C2ED94FF40065284B0CF5405ECEF8DD
|
||||
:100F6000005053F820E0BEF1000F17D1DCF800E08C
|
||||
:100F7000012C8EEA421202F0E0020CF5805ECEF8FF
|
||||
:100F800000202BD94FF4006143F820604FF48033E8
|
||||
:100F90000CF500521160CCF8043070BD5D69B5FBF2
|
||||
:100FA000FEFE0EF1010E0EEB4E0EBEF1030EFCD254
|
||||
:100FB000DCE70129CED103240CF540531C60DCF89A
|
||||
:100FC0000830DB07FBD5DCF800300CF5805E83EAE7
|
||||
:100FD000421303F0E003CEF80030084B0122DCF8A6
|
||||
:100FE00000404C4004F00304CEF8004002FA01F146
|
||||
:100FF000DCF808200A42FBD0C4E700BFA4050020AB
|
||||
:10100000014B53F820007047A405002010B5029C46
|
||||
:101010008E464FEA043C4CEA034C1C4BB3FBF1F305
|
||||
:101020000168B2FBF3F4002920DB194A194B904206
|
||||
:1010300014BF4FF480424FF4004217491A6003F581
|
||||
:1010400080531A608B6832EA0303FBD1212200F53A
|
||||
:1010500040530433C0F800E084601A600268002A3C
|
||||
:10106000FCDA0822C0F80CC01A6010BD036803F057
|
||||
:101070003F037345D9D18368C3F30B03A342D4D193
|
||||
:10108000C36803F4EE236345CFD110BD001BB70046
|
||||
:10109000008005400020024000000240012300EBD8
|
||||
:1010A0004000800000F1804000F584104160036042
|
||||
:1010B000704700BF0023DB8A002242E800F25202A0
|
||||
:1010C00001D4102118470421184700BF034AD2F861
|
||||
:1010D0002838002BFBD0BFF35F8F704700000E4015
|
||||
:1010E0000021044B044ABFF35F8F43F8041B934273
|
||||
:1010F000F9D170470C080E402C080E404FF42A6CB2
|
||||
:101100004FF48D70054A064B0649C2F800C0D06006
|
||||
:1011100019605368002BFCDA704700BF0080044060
|
||||
:1011200000A0044000B0FA00704700BF08B50148B5
|
||||
:10113000FFF782F85819001038B5054C054DAC4240
|
||||
:1011400004D254F8043B9847AC42FAD338BD00BFF0
|
||||
:10115000E0180010201900100648DFF828C0064BE0
|
||||
:10116000064A0749C0F800C01A608B6832EA0303D8
|
||||
:10117000FBD170470020024000300240F6FFF3032D
|
||||
:10118000000002407F3BEFEF044BDB6CB3F5004FF8
|
||||
:1011900003D14FF48022024BDA64704700001150F3
|
||||
:1011A000002011504FF0E022044BD2F8881D0B4371
|
||||
:1011B000C2F8883D10EE3004704700BF03033000D2
|
||||
:1011C0006FF06041044B054A19609368DB4333F0CC
|
||||
:1011D0006043FAD1704700BF003002400000024077
|
||||
:1011E00010B545F25320FFF765FFBDE810400346F8
|
||||
:1011F0000420184710B545F25320FFF75BFFBDE808
|
||||
:101200001040034601201847FFF76EB81349144BEE
|
||||
:1012100070B55C1AA508442D2A4628BF4422114EF9
|
||||
:101220009200304600F058FB432D13D80E4A0FD0E1
|
||||
:10123000C5F144003319410803EBC101C3E90022A1
|
||||
:1012400008338B42FAD1C30704D520F001000544CE
|
||||
:1012500046F82520054B9E6070BD00BF00000010C1
|
||||
:1012600010010010000000201101001000ED00E04E
|
||||
:10127000002370B52B4C82B0C4F88430FFF73EFFDA
|
||||
:101280000122294BDA63636C012BFCD10321264A2E
|
||||
:10129000244B11639C6B012CFCD1022605252146B1
|
||||
:1012A0000523224A22480096FFF7B0FE21462B462E
|
||||
:1012B000204A21480095FFF7A9FE0022042031466C
|
||||
:1012C0001E4BFFF72FFE2146284600221C4BFFF73E
|
||||
:1012D00029FE0022082011461A4BFFF723FE0022A8
|
||||
:1012E00009201146174BFFF71DFE0022062011466C
|
||||
:1012F000134BFFF717FE0022114B07201146FFF793
|
||||
:1013000011FE0420FFF77CFE00240F4BA3FB0035E9
|
||||
:10131000AD0CE0B229460134FFF7C0FE062CF8D12F
|
||||
:1013200002B070BD0000014000300140002F68593C
|
||||
:1013300000000540008C864700800540001BB70078
|
||||
:1013400080D1F008006CDC0283DE1B4300B97047DB
|
||||
:1013500000F026B910B5094A84B014684CB10346B0
|
||||
:1013600000914FF0FF3203A90548A047012004B0C7
|
||||
:1013700010BD00F057F9204604B010BDD405002080
|
||||
:101380004D13001000BEFDE7704700BF08B5FFF722
|
||||
:10139000F9FF00BF38B5064C064DFFF7CDFEAC4255
|
||||
:1013A00004D254F8043B9847AC42FAD338BD00BF8E
|
||||
:1013B000201900102019001003680846114618472C
|
||||
:1013C00070B505460846697D82B000294FD0002AD5
|
||||
:1013D00025DD037814460A2B064622D0012C4FF057
|
||||
:1013E000000E0DD03246012312F801CF1946BCF190
|
||||
:1013F0000A0F03F1010320D09C42F5D1744505DDAD
|
||||
:101400002B68A4EB0E0106EB0E009847311911F87A
|
||||
:10141000013CA3F10D03B3FA83F35B092B7502B012
|
||||
:1014200070BD2B7D002BD9D102212B681348984722
|
||||
:10143000012CEBD04FF0010ED4E712F8010C0D286F
|
||||
:10144000DAD08E4506EB0E00A1EB0E0105DACDE9F0
|
||||
:1014500000322B689847DDE90032CDE900320221E5
|
||||
:101460002B6806489847009B019A9E46C4E71146A0
|
||||
:101470002B6802B0BDE87040184700BF381A001052
|
||||
:101480002DE9F04782B090461C460D460746FFF70F
|
||||
:1014900087FC4FF0FF3C6FF000462E4A821841F166
|
||||
:1014A0000003944576EB03013CBF624633462A486D
|
||||
:1014B00000F00AFA6B1C824640D00CB3274E284B32
|
||||
:1014C0001C68B4B1B8F1000F1CD1DFF89C8001E0BA
|
||||
:1014D000246974B12368002BFAD0D8F800300BB11E
|
||||
:1014E0009C42F5D120462A463946B0472469002C53
|
||||
:1014F000F0D1BAF1000F26D1284602B0BDE8F0873E
|
||||
:10150000184EDCE74FF00A09DFF85C8002E024693E
|
||||
:10151000002CEED02368002BF9D0D8F800300BB1A6
|
||||
:10152000A342F4D12A4639462046B047012220463C
|
||||
:101530000DF107018DF80790B047E8E7384600F055
|
||||
:1015400095F90546B9E7044800F0C2F9284602B00B
|
||||
:10155000BDE8F08740420F00F0030020C1130010E7
|
||||
:10156000CC050020B9130010D0050020084A1368EC
|
||||
:1015700023B90AE003F110021B6933B18342F9D1A8
|
||||
:1015800029B9186910601961704701B1106070477E
|
||||
:10159000CC05002008B500F03FF9012008BD00BFD0
|
||||
:1015A000F0B583B006468DF80700FFF7F9FB4FF062
|
||||
:1015B000FF356FF00044174A821841F1000395424D
|
||||
:1015C00074EB03013CBF23462A46134800F07CF924
|
||||
:1015D000124B07461C689CB1114D01E024697CB197
|
||||
:1015E0002368002BFAD02B680BB19C42F6D1204621
|
||||
:1015F00001220DF10701FFF7E3FE2469002CEFD172
|
||||
:1016000017B9304603B0F0BD034800F061F9304629
|
||||
:1016100003B0F0BD40420F00F0030020CC050020D5
|
||||
:10162000D005002038B5044600F020F90123054616
|
||||
:101630001A4620462946FFF723FF084B1C682CB1A9
|
||||
:1016400063682BB198472469002CF9D1284638BD2E
|
||||
:101650002469002CF4D1284638BD00BFCC050020F9
|
||||
:10166000B1F1000C1EDD104A104B126810B5D31AF0
|
||||
:10167000B3FA83F30D24DFF838E05B09411E3EF92D
|
||||
:1016800013E08C4411F8010F864506D093699B0640
|
||||
:10169000FCD461451060F5D110BD93699B06FCD464
|
||||
:1016A0001460F3E7704700BF000600200080074089
|
||||
:1016B000FC050020244BB1F1000C00B5D3F800E08C
|
||||
:1016C0002FDD0021214B01381A689369DB0618D4FD
|
||||
:1016D00001319369DB06FCD413688C4500F8013FA7
|
||||
:1016E000F3D1BEF1000F09D050211346916353F896
|
||||
:1016F000342F02F0380203F580531A606146084621
|
||||
:1017000000BDBEF1000F09D050201346906353F87E
|
||||
:10171000342F02F0380203F580531A6081B1084675
|
||||
:1017200000BDBEF1000F0BD0084B50211A681346C4
|
||||
:10173000916353F8342F02F0380203F580531A6096
|
||||
:101740006FF00201DBE700BF9805002000060020D3
|
||||
:10175000054B1B6833B10021044A05481268006834
|
||||
:1017600091631847704700BF9805002000060020CD
|
||||
:101770009C050020024B1A6893691B07FCD4704734
|
||||
:101780000006002030B51F4D1F4AD5F800C01F4C81
|
||||
:101790008E46944514BF21222222216883B010B1C5
|
||||
:1017A000A9B103B030BD0029FBD0CCF83800014608
|
||||
:1017B000019010460092FEF7C3FD15490098FEF710
|
||||
:1017C00007FE019B134A2360136003B030BD114B29
|
||||
:1017D00020600F4910460092C3F800E0FEF7C6FDF6
|
||||
:1017E00001210098FEF7ACFD2A6850211346916351
|
||||
:1017F00053F8342F02F0380203F580531A6003B017
|
||||
:1018000030BD00BF00060020008007409805002082
|
||||
:10181000511700109C05002010B50E490E4C0F48C2
|
||||
:101820000F4A104B007821600020022112781B78AB
|
||||
:10183000FEF7E4FC02210120FEF7E0FC4FF4E13169
|
||||
:101840002068FFF7E7FABDE8104001210648FFF7DE
|
||||
:101850008DBE00BF0000074000060020881A00105F
|
||||
:10186000841A0010801A0010D803002020F0030111
|
||||
:1018700010F00300C0F1000051F8043B00F1040C2B
|
||||
:101880004FEACC0C6FF000021CBF22FA0CF213439B
|
||||
:101890004FF0010C4CEA0C2C4CEA0C4CA3EB0C0264
|
||||
:1018A00022EA030212EACC1204BF51F8043B0430CE
|
||||
:1018B000F4D0C2F1000102EA0102B2FA82F2C2F1EE
|
||||
:1018C0001F0200EBD20070475FF800F0F10100202A
|
||||
:1018D0005FF800F0290200205FF800F0710200209C
|
||||
:1018E000E11100105911001089110010711200103F
|
||||
:1018F000C1110010E110001009120010CD100010ED
|
||||
:10190000690600100D120010ED09001029110010D9
|
||||
:10191000F5110010A5110010D902001001030010EC
|
||||
:101920000A2A2A2A2050414E4943202A2A2A0A00FC
|
||||
:1019300000000000486172647761726520616C612B
|
||||
:10194000726D20256420616C726561647920636C1E
|
||||
:1019500061696D65640000004861726420617373A1
|
||||
:101960006572740052656C6561736500626F6F74B7
|
||||
:10197000325F77323571303830000000302E310060
|
||||
:10198000322E332E300000007069636F3200000089
|
||||
:10199000307830303031615F737461636B00000008
|
||||
:1019A0004F63742031372032303236005541525463
|
||||
:1019B00020737464696E000055415254207374643E
|
||||
:1019C0006F7574005541525420737464696E202FF2
|
||||
:1019D000207374646F75740006005250D3F0754222
|
||||
:1019E0006419001006005250E182887F6C190010C3
|
||||
:1019F000060052503ABCA9117C1900100600525042
|
||||
:101A0000ABB360538019001006005250BBFF3CB6C8
|
||||
:101A10008819001006005250861C0302901900100D
|
||||
:101A2000060052505422A29DA019001005005250E9
|
||||
:101A3000DE65F468881D00100D0A00000600525093
|
||||
:101A400053B4F4A1C4190010080052501200000051
|
||||
:081A5000080052509210000042
|
||||
:081A580018E8FF0F0100000077
|
||||
:101A6000D8190010E4190010F0190010FC1900102A
|
||||
:101A7000081A0010141A0010201A00102C1A001056
|
||||
:0C1A8000501A0010481A00103C1A001008
|
||||
:101A8C00034600B50268EFF3108C72B6D2E8CFEFC4
|
||||
:101A9C000120BEF1000FF9D1C2E84E0FBEF1000FCC
|
||||
:101AAC00F4D1BFF35F8F93F90420002A09DB01B155
|
||||
:101ABC000A60002000221B68C3E88F2F8CF310886B
|
||||
:101ACC0000BD4FF05042126801201A71F2E700BFBE
|
||||
:101ADC004FF050412DE9F8431F460B68044616465B
|
||||
:101AEC0000259946DFF874802368EFF3108272B6F4
|
||||
:101AFC00D3E8CF0F01210028FAD1C3E8401F0028FA
|
||||
:101B0C00F6D1BFF35F8F94F904302168002B1BDBF7
|
||||
:101B1C0098F80030DBB2C1E88F5F82F3108898F838
|
||||
:101B2C0000209A4208D03046394600F0D1F80028FF
|
||||
:101B3C00DAD00020BDE8F88320BF3046394600F0EB
|
||||
:101B4C00C7F80028D0D0F4E7002384F80490C1E84B
|
||||
:101B5C008F3F82F310880120BDE8F8830506002032
|
||||
:101B6C0070B582B001A9064614461D46FFF788FFE2
|
||||
:101B7C0038B94FF050439DF9042093F900309A4244
|
||||
:101B8C0001D102B070BD22462B46304602B0BDE8F2
|
||||
:101B9C007040FFF79DBF00BF0368EFF3108172B672
|
||||
:101BAC00D3E8CFCF0122BCF1000FF9D1C3E84C2F01
|
||||
:101BBC00BCF1000FF4D1BFF35F8F4FF0FF0C074A5D
|
||||
:101BCC0080F804C013780133137000230268C2E854
|
||||
:101BDC008F3F81F3108840BF704700BF050600207F
|
||||
:101BEC00844641EA000313F0030349D1403A23D35E
|
||||
:101BFC000B6803604B6843608B688360CB68C36081
|
||||
:101C0C000B6903614B6943618B698361CB69C36168
|
||||
:101C1C000B6A03624B6A43628B6A8362CB6AC36250
|
||||
:101C2C000B6B03634B6B43638B6B8363CB6BC36338
|
||||
:101C3C0040304031403ADBD230320BD30B6803607A
|
||||
:101C4C004B6843608B688360CB68C3601030103185
|
||||
:101C5C00103AF3D20C3205D351F8043B40F8043B54
|
||||
:101C6C00043AF9D2043208D0D2071CBF11F8013B58
|
||||
:101C7C0000F8013B01D30B8803806046704700BF1E
|
||||
:101C8C00082A13D38B07B1D010F00303AED0C3F1E5
|
||||
:101C9C000403D21ADB071CBF11F8013B00F8013B0F
|
||||
:101CAC00A4D331F8023B20F8023B9FE7043AD9D386
|
||||
:101CBC00013A11F8013B00F8013BF9D20B780370A3
|
||||
:101CCC004B7843708B78837060467047000000003F
|
||||
:101CDC005FF800F0410C0010100000000000000044
|
||||
:101CEC0000000100000000000000000000000200E5
|
||||
:101CFC0000000000000000000000030000000000D5
|
||||
:101D0C00000000000000FF000000000001B5486862
|
||||
:101D1C0001318E460047704609380149884701BD9C
|
||||
:101D2C009105001000000000FFFFFFFFFFFFFF7F89
|
||||
:101D3C000000000000000000000000000000000097
|
||||
:101D4C0000000000F8030020611600107517001049
|
||||
:101D5C00B5160010851700100000000000010000EF
|
||||
:081D6C0000000000000000006F
|
||||
:101D7400D3DEFFFFFE010000FF010000C4E3FFFF0C
|
||||
:041D8400793512ABF0
|
||||
:040000051000014D99
|
||||
:00000001FF
|
||||
Binary file not shown.
@@ -0,0 +1,121 @@
|
||||
# This is a copy of <PICO_SDK_PATH>/external/pico_sdk_import.cmake
|
||||
|
||||
# This can be dropped into an external project to help locate this SDK
|
||||
# It should be include()ed prior to project()
|
||||
|
||||
# Copyright 2020 (c) 2020 Raspberry Pi (Trading) Ltd.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
||||
# following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
|
||||
# disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
|
||||
# disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH))
|
||||
set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})
|
||||
message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')")
|
||||
endif ()
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT))
|
||||
set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT})
|
||||
message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')")
|
||||
endif ()
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH))
|
||||
set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH})
|
||||
message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')")
|
||||
endif ()
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_TAG} AND (NOT PICO_SDK_FETCH_FROM_GIT_TAG))
|
||||
set(PICO_SDK_FETCH_FROM_GIT_TAG $ENV{PICO_SDK_FETCH_FROM_GIT_TAG})
|
||||
message("Using PICO_SDK_FETCH_FROM_GIT_TAG from environment ('${PICO_SDK_FETCH_FROM_GIT_TAG}')")
|
||||
endif ()
|
||||
|
||||
if (PICO_SDK_FETCH_FROM_GIT AND NOT PICO_SDK_FETCH_FROM_GIT_TAG)
|
||||
set(PICO_SDK_FETCH_FROM_GIT_TAG "master")
|
||||
message("Using master as default value for PICO_SDK_FETCH_FROM_GIT_TAG")
|
||||
endif()
|
||||
|
||||
set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK")
|
||||
set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable")
|
||||
set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK")
|
||||
set(PICO_SDK_FETCH_FROM_GIT_TAG "${PICO_SDK_FETCH_FROM_GIT_TAG}" CACHE FILEPATH "release tag for SDK")
|
||||
|
||||
if (NOT PICO_SDK_PATH)
|
||||
if (PICO_SDK_FETCH_FROM_GIT)
|
||||
include(FetchContent)
|
||||
set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR})
|
||||
if (PICO_SDK_FETCH_FROM_GIT_PATH)
|
||||
get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
|
||||
endif ()
|
||||
FetchContent_Declare(
|
||||
pico_sdk
|
||||
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
|
||||
GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG}
|
||||
)
|
||||
|
||||
if (NOT pico_sdk)
|
||||
message("Downloading Raspberry Pi Pico SDK")
|
||||
# GIT_SUBMODULES_RECURSE was added in 3.17
|
||||
if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.17.0")
|
||||
FetchContent_Populate(
|
||||
pico_sdk
|
||||
QUIET
|
||||
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
|
||||
GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG}
|
||||
GIT_SUBMODULES_RECURSE FALSE
|
||||
|
||||
SOURCE_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-src
|
||||
BINARY_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-build
|
||||
SUBBUILD_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-subbuild
|
||||
)
|
||||
else ()
|
||||
FetchContent_Populate(
|
||||
pico_sdk
|
||||
QUIET
|
||||
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
|
||||
GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG}
|
||||
|
||||
SOURCE_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-src
|
||||
BINARY_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-build
|
||||
SUBBUILD_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-subbuild
|
||||
)
|
||||
endif ()
|
||||
|
||||
set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR})
|
||||
endif ()
|
||||
set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE})
|
||||
else ()
|
||||
message(FATAL_ERROR
|
||||
"SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git."
|
||||
)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
|
||||
if (NOT EXISTS ${PICO_SDK_PATH})
|
||||
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found")
|
||||
endif ()
|
||||
|
||||
set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake)
|
||||
if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE})
|
||||
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK")
|
||||
endif ()
|
||||
|
||||
set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)
|
||||
|
||||
include(${PICO_SDK_INIT_CMAKE_FILE})
|
||||
@@ -0,0 +1,9 @@
|
||||
build/CMakeFiles/
|
||||
build/pico_sdk/
|
||||
build/pico-sdk/
|
||||
build/generated/
|
||||
build/_deps/
|
||||
build/*.o
|
||||
build/*.d
|
||||
build/*.obj
|
||||
!.vscode/*
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Pico",
|
||||
"includePath": [
|
||||
"${workspaceFolder}/**",
|
||||
"${userHome}/.pico-sdk/sdk/2.2.0/**"
|
||||
],
|
||||
"forcedInclude": [
|
||||
"${userHome}/.pico-sdk/sdk/2.2.0/src/common/pico_base_headers/include/pico.h",
|
||||
"${workspaceFolder}/build/generated/pico_base/pico/config_autogen.h"
|
||||
],
|
||||
"defines": [],
|
||||
"compilerPath": "${userHome}/.pico-sdk/toolchain/14_2_Rel1/bin/arm-none-eabi-gcc.exe",
|
||||
"compileCommands": "${workspaceFolder}/build/compile_commands.json",
|
||||
"cStandard": "c17",
|
||||
"cppStandard": "c++14",
|
||||
"intelliSenseMode": "linux-gcc-arm"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
[
|
||||
{
|
||||
"name": "Pico",
|
||||
"compilers": {
|
||||
"C": "${command:raspberry-pi-pico.getCompilerPath}",
|
||||
"CXX": "${command:raspberry-pi-pico.getCxxCompilerPath}"
|
||||
},
|
||||
"environmentVariables": {
|
||||
"PATH": "${command:raspberry-pi-pico.getEnvPath};${env:PATH}"
|
||||
},
|
||||
"cmakeSettings": {
|
||||
"Python3_EXECUTABLE": "${command:raspberry-pi-pico.getPythonPath}"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"marus25.cortex-debug",
|
||||
"ms-vscode.cpptools",
|
||||
"ms-vscode.cpptools-extension-pack",
|
||||
"ms-vscode.vscode-serial-monitor",
|
||||
"raspberry-pi.raspberry-pi-pico"
|
||||
]
|
||||
}
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Pico Debug (Cortex-Debug)",
|
||||
"cwd": "${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"executable": "${command:raspberry-pi-pico.launchTargetPath}",
|
||||
"request": "launch",
|
||||
"type": "cortex-debug",
|
||||
"servertype": "openocd",
|
||||
"serverpath": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"gdbPath": "${command:raspberry-pi-pico.getGDBPath}",
|
||||
"device": "${command:raspberry-pi-pico.getChipUppercase}",
|
||||
"configFiles": [
|
||||
"interface/cmsis-dap.cfg",
|
||||
"target/${command:raspberry-pi-pico.getTarget}.cfg"
|
||||
],
|
||||
"svdFile": "${userHome}/.pico-sdk/sdk/2.2.0/src/${command:raspberry-pi-pico.getChip}/hardware_regs/${command:raspberry-pi-pico.getChipUppercase}.svd",
|
||||
"runToEntryPoint": "main",
|
||||
// Fix for no_flash binaries, where monitor reset halt doesn't do what is expected
|
||||
// Also works fine for flash binaries
|
||||
"overrideLaunchCommands": [
|
||||
"monitor reset init",
|
||||
"load \"${command:raspberry-pi-pico.launchTargetPath}\""
|
||||
],
|
||||
"openOCDLaunchCommands": [
|
||||
"adapter speed 5000"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Pico Debug (Cortex-Debug with external OpenOCD)",
|
||||
"cwd": "${workspaceRoot}",
|
||||
"executable": "${command:raspberry-pi-pico.launchTargetPath}",
|
||||
"request": "launch",
|
||||
"type": "cortex-debug",
|
||||
"servertype": "external",
|
||||
"gdbTarget": "localhost:3333",
|
||||
"gdbPath": "${command:raspberry-pi-pico.getGDBPath}",
|
||||
"device": "${command:raspberry-pi-pico.getChipUppercase}",
|
||||
"svdFile": "${userHome}/.pico-sdk/sdk/2.2.0/src/${command:raspberry-pi-pico.getChip}/hardware_regs/${command:raspberry-pi-pico.getChipUppercase}.svd",
|
||||
"runToEntryPoint": "main",
|
||||
// Fix for no_flash binaries, where monitor reset halt doesn't do what is expected
|
||||
// Also works fine for flash binaries
|
||||
"overrideLaunchCommands": [
|
||||
"monitor reset init",
|
||||
"load \"${command:raspberry-pi-pico.launchTargetPath}\""
|
||||
]
|
||||
},
|
||||
]
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"cmake.showSystemKits": false,
|
||||
"cmake.options.statusBarVisibility": "hidden",
|
||||
"cmake.options.advanced": {
|
||||
"build": {
|
||||
"statusBarVisibility": "hidden"
|
||||
},
|
||||
"launch": {
|
||||
"statusBarVisibility": "hidden"
|
||||
},
|
||||
"debug": {
|
||||
"statusBarVisibility": "hidden"
|
||||
}
|
||||
},
|
||||
"cmake.configureOnEdit": false,
|
||||
"cmake.automaticReconfigure": false,
|
||||
"cmake.configureOnOpen": false,
|
||||
"cmake.generator": "Ninja",
|
||||
"cmake.cmakePath": "${userHome}/.pico-sdk/cmake/v3.31.5/bin/cmake",
|
||||
"C_Cpp.debugShortcut": false,
|
||||
"terminal.integrated.env.windows": {
|
||||
"PICO_SDK_PATH": "${env:USERPROFILE}/.pico-sdk/sdk/2.2.0",
|
||||
"PICO_TOOLCHAIN_PATH": "${env:USERPROFILE}/.pico-sdk/toolchain/14_2_Rel1",
|
||||
"Path": "${env:USERPROFILE}/.pico-sdk/toolchain/14_2_Rel1/bin;${env:USERPROFILE}/.pico-sdk/picotool/2.2.0/picotool;${env:USERPROFILE}/.pico-sdk/cmake/v3.31.5/bin;${env:USERPROFILE}/.pico-sdk/ninja/v1.12.1;${env:PATH}"
|
||||
},
|
||||
"terminal.integrated.env.osx": {
|
||||
"PICO_SDK_PATH": "${env:HOME}/.pico-sdk/sdk/2.2.0",
|
||||
"PICO_TOOLCHAIN_PATH": "${env:HOME}/.pico-sdk/toolchain/14_2_Rel1",
|
||||
"PATH": "${env:HOME}/.pico-sdk/toolchain/14_2_Rel1/bin:${env:HOME}/.pico-sdk/picotool/2.2.0/picotool:${env:HOME}/.pico-sdk/cmake/v3.31.5/bin:${env:HOME}/.pico-sdk/ninja/v1.12.1:${env:PATH}"
|
||||
},
|
||||
"terminal.integrated.env.linux": {
|
||||
"PICO_SDK_PATH": "${env:HOME}/.pico-sdk/sdk/2.2.0",
|
||||
"PICO_TOOLCHAIN_PATH": "${env:HOME}/.pico-sdk/toolchain/14_2_Rel1",
|
||||
"PATH": "${env:HOME}/.pico-sdk/toolchain/14_2_Rel1/bin:${env:HOME}/.pico-sdk/picotool/2.2.0/picotool:${env:HOME}/.pico-sdk/cmake/v3.31.5/bin:${env:HOME}/.pico-sdk/ninja/v1.12.1:${env:PATH}"
|
||||
},
|
||||
"raspberry-pi-pico.cmakeAutoConfigure": true,
|
||||
"raspberry-pi-pico.useCmakeTools": false,
|
||||
"raspberry-pi-pico.cmakePath": "${HOME}/.pico-sdk/cmake/v3.31.5/bin/cmake",
|
||||
"raspberry-pi-pico.ninjaPath": "${HOME}/.pico-sdk/ninja/v1.12.1/ninja",
|
||||
"files.associations": {
|
||||
"stdlib.h": "c"
|
||||
}
|
||||
}
|
||||
+102
@@ -0,0 +1,102 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Compile Project",
|
||||
"type": "process",
|
||||
"isBuildCommand": true,
|
||||
"command": "${userHome}/.pico-sdk/ninja/v1.12.1/ninja",
|
||||
"args": ["-C", "${workspaceFolder}/build"],
|
||||
"group": "build",
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"panel": "dedicated"
|
||||
},
|
||||
"problemMatcher": "$gcc",
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/ninja/v1.12.1/ninja.exe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Run Project",
|
||||
"type": "process",
|
||||
"command": "${env:HOME}/.pico-sdk/picotool/2.2.0/picotool/picotool",
|
||||
"args": [
|
||||
"load",
|
||||
"${command:raspberry-pi-pico.launchTargetPath}",
|
||||
"-fx"
|
||||
],
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"panel": "dedicated"
|
||||
},
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/picotool/2.2.0/picotool/picotool.exe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Flash",
|
||||
"type": "process",
|
||||
"command": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"args": [
|
||||
"-s",
|
||||
"${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"-f",
|
||||
"interface/cmsis-dap.cfg",
|
||||
"-f",
|
||||
"target/${command:raspberry-pi-pico.getTarget}.cfg",
|
||||
"-c",
|
||||
"adapter speed 5000; program \"${command:raspberry-pi-pico.launchTargetPath}\" verify reset exit"
|
||||
],
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Rescue Reset",
|
||||
"type": "process",
|
||||
"command": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"args": [
|
||||
"-s",
|
||||
"${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"-f",
|
||||
"interface/cmsis-dap.cfg",
|
||||
"-f",
|
||||
"target/${command:raspberry-pi-pico.getChip}-rescue.cfg",
|
||||
"-c",
|
||||
"adapter speed 5000; reset halt; exit"
|
||||
],
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Risc-V Reset (RP2350)",
|
||||
"type": "process",
|
||||
"command": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"args": [
|
||||
"-s",
|
||||
"${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"-c",
|
||||
"set USE_CORE { rv0 rv1 cm0 cm1 }",
|
||||
"-f",
|
||||
"interface/cmsis-dap.cfg",
|
||||
"-f",
|
||||
"target/rp2350.cfg",
|
||||
"-c",
|
||||
"adapter speed 5000; init;",
|
||||
"-c",
|
||||
"write_memory 0x40120158 8 { 0x3 }; echo [format \"Info : ARCHSEL 0x%02x\" [read_memory 0x40120158 8 1]];",
|
||||
"-c",
|
||||
"reset halt; targets rp2350.rv0; echo [format \"Info : ARCHSEL_STATUS 0x%02x\" [read_memory 0x4012015C 8 1]]; exit"
|
||||
],
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/**
|
||||
* @file 0x0001_hello-world.c
|
||||
* @brief Hello World: print a greeting over UART in an infinite loop
|
||||
* @author Kevin Thomas
|
||||
* @date 2025
|
||||
*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2025 Kevin Thomas
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
* -----------------------------------------------------------------------------
|
||||
*
|
||||
* Demonstrates the minimal "hello, world" program on the Raspberry Pi Pico 2.
|
||||
* Initializes stdio over UART and prints a greeting in an infinite loop.
|
||||
*
|
||||
* Wiring:
|
||||
* No external wiring required (USB serial).
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "pico/stdlib.h"
|
||||
|
||||
int main(void) {
|
||||
stdio_init_all();
|
||||
while (true) {
|
||||
printf("hello, world\r\n");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
# Generated Cmake Pico project file
|
||||
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
# Initialise pico_sdk from installed location
|
||||
# (note this can come from environment, CMake cache etc)
|
||||
|
||||
# == DO NOT EDIT THE FOLLOWING LINES for the Raspberry Pi Pico VS Code Extension to work ==
|
||||
if(WIN32)
|
||||
set(USERHOME $ENV{USERPROFILE})
|
||||
else()
|
||||
set(USERHOME $ENV{HOME})
|
||||
endif()
|
||||
set(sdkVersion 2.2.0)
|
||||
set(toolchainVersion 14_2_Rel1)
|
||||
set(picotoolVersion 2.2.0)
|
||||
set(picoVscode ${USERHOME}/.pico-sdk/cmake/pico-vscode.cmake)
|
||||
if (EXISTS ${picoVscode})
|
||||
include(${picoVscode})
|
||||
endif()
|
||||
# ====================================================================================
|
||||
set(PICO_BOARD pico2 CACHE STRING "Board type")
|
||||
|
||||
# Pull in Raspberry Pi Pico SDK (must be before project)
|
||||
include(pico_sdk_import.cmake)
|
||||
|
||||
project(0x0001_hello-world C CXX ASM)
|
||||
|
||||
# Initialise the Raspberry Pi Pico SDK
|
||||
pico_sdk_init()
|
||||
|
||||
# Add executable. Default name is the project name, version 0.1
|
||||
|
||||
add_executable(0x0001_hello-world 0x0001_hello-world.c )
|
||||
|
||||
pico_set_program_name(0x0001_hello-world "0x0001_hello-world")
|
||||
pico_set_program_version(0x0001_hello-world "0.1")
|
||||
|
||||
# Modify the below lines to enable/disable output over UART/USB
|
||||
pico_enable_stdio_uart(0x0001_hello-world 1)
|
||||
pico_enable_stdio_usb(0x0001_hello-world 0)
|
||||
|
||||
# Add the standard library to the build
|
||||
target_link_libraries(0x0001_hello-world
|
||||
pico_stdlib)
|
||||
|
||||
# Add the standard include files to the build
|
||||
target_include_directories(0x0001_hello-world PRIVATE
|
||||
${CMAKE_CURRENT_LIST_DIR}
|
||||
)
|
||||
|
||||
pico_add_extra_outputs(0x0001_hello-world)
|
||||
|
||||
BIN
Binary file not shown.
File diff suppressed because it is too large.
Load diff
BIN
Binary file not shown.
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,469 @@
|
||||
:020000041000EA
|
||||
:10000000002008205D0100101B0100101D010010E0
|
||||
:100010001101001011010010110100101101001058
|
||||
:100020001901001019010010190100101F01001022
|
||||
:10003000110100101901001021010010230100100E
|
||||
:100040001101001011010010110100101101001028
|
||||
:100050001101001011010010110100101101001018
|
||||
:100060001101001011010010110100101101001008
|
||||
:1000700011010010110100101101001011010010F8
|
||||
:1000800011010010110100101101001011010010E8
|
||||
:1000900011010010110100101101001011010010D8
|
||||
:1000A00011010010110100101101001011010010C8
|
||||
:1000B00011010010110100101101001011010010B8
|
||||
:1000C00011010010110100101101001011010010A8
|
||||
:1000D0001101001011010010110100101101001098
|
||||
:1000E0001101001011010010110100101101001088
|
||||
:1000F0001101001011010010110100101101001078
|
||||
:100100001101001011010010110100101101001067
|
||||
:10011000EFF30580103800BE00BE00BE00BE00BE7A
|
||||
:1001200000BE00BEF2EB8871201B00104C1B0010BB
|
||||
:10013000A001001090A31AE7D3DEFFFF42012110B7
|
||||
:10014000FF010000B01B0000793512AB4FF000003A
|
||||
:100150001E49086006C881F3088810474FF05040D8
|
||||
:10016000006810B14FF00000F2E70DA40ECC00299A
|
||||
:1001700002D000F012F8F9E71549164A002000E015
|
||||
:1001800001C19142FCD11449884714498847144958
|
||||
:10019000884700BEFDE701C901C29A42FBD3704700
|
||||
:1001A0004C1B001010010020AC020020E81C0010C5
|
||||
:1001B0000000082000000820E81C001000100820A3
|
||||
:1001C00000100820000000007047000008ED00E06B
|
||||
:1001D000AC020020D80400207D130010350200106E
|
||||
:1001E00075130010F8B500BF064B0749C91A8910EE
|
||||
:1001F00048BF0131491003D0044B0BB101481847E7
|
||||
:10020000704700BFAC020020AC02002000000000DC
|
||||
:1002100008B5054B1BB105490548AFF30080BDE8A3
|
||||
:100220000840FFF7E1BF00BF00000000900400207D
|
||||
:10023000CC19001008B501F099F9024801F0DEF977
|
||||
:10024000FBE700BFCC19001010B44FF480740C4BC6
|
||||
:1002500053F8202003EB8003C00082F0400200F13D
|
||||
:10026000804003F5805C02F0C00200F5203003F509
|
||||
:100270004053CCF8002041601C605DF8044B70478F
|
||||
:10028000048003400FB400B583B0049C074801F01C
|
||||
:10029000B5F93CB105A92046019101F051F8044897
|
||||
:1002A00001F0ACF9012001F063F800BFDC19001087
|
||||
:1002B000EC19001070B58646EFF3108572B6124C3B
|
||||
:1002C000D4E8CF6F0120002EFAD1C4E8460F002EEB
|
||||
:1002D000F6D1BFF35F8F4FF0010CC80801F00703A0
|
||||
:1002E0000CFA03F31EF800C01CEA030608D14CEA1E
|
||||
:1002F000030C0EF800C0C4E88F6F85F3108870BD42
|
||||
:100300001046FFF7BFFF00BF3B040020044A1078EF
|
||||
:10031000431CDBB2182B28BF10231370704700BF9B
|
||||
:10032000280200204FF0E022936843F000539360CE
|
||||
:10033000704700BF0021044B03F12002C3E88F1F68
|
||||
:1003400001339342FAD17047300400204FF0E0238C
|
||||
:100350004FF08032C3F80024C3F80424C3F8082403
|
||||
:10036000C3F80C24C3F81024C3F81424C3F81824C9
|
||||
:10037000C3F81C24C3F82024C3F82424C3F8282479
|
||||
:10038000C3F82C24C3F8302462B67047012300F070
|
||||
:100390001F029340400941B1800000F1604000F528
|
||||
:1003A0006140C0F8803103607047024A203042F853
|
||||
:1003B0002030704700E100E0F8B50D46EFF31087FC
|
||||
:1003C00072B6124ED6E8CF2F0123002AFAD1C6E822
|
||||
:1003D000423F002AF6D1BFF35F8F0D4B00F11004AE
|
||||
:1003E0009B680C4A53F82430934203D0994201D0C1
|
||||
:1003F00000F08EFE064B9B6843F82450BFF35F8FDE
|
||||
:100400000023C6E88F3F87F31088F8BD3904002029
|
||||
:1004100000ED00E0110100102DE9F04F83B0EFF383
|
||||
:10042000108A72B6714ED6E8CF2F0123002AFAD176
|
||||
:10043000C6E8423F002AF6D1BFF35F8F6C4B00F154
|
||||
:1004400010089B686B4A53F82850954245D08D425E
|
||||
:100450000C4650D0684FEB1B2F2B3ED801214FEAA2
|
||||
:1004600050194FEA890909F1604909F5614900F01D
|
||||
:100470001F0301FA03F0D9F80030C9F8800000EA40
|
||||
:10048000030BBFF35F8FEFF30581C9B2002934D0AE
|
||||
:10049000884505D0CDE9001000F03AFEDDE90010F6
|
||||
:1004A00025F0010EDEF808C0644505D189E0D3F8D7
|
||||
:1004B00008C0644531D09E469EF9062002EB4203F7
|
||||
:1004C000002A07EB8303F2DA644561D0BBF1000F29
|
||||
:1004D00020D0C9F88001C9F80000454B9B6843F85B
|
||||
:1004E0002850BFF35F8F0023C6E88F3F8AF3108840
|
||||
:1004F00003B0BDE8F08F1546EFE725F0010EDEF8FA
|
||||
:1005000008C06445D8D19EF906407346002C08DA2D
|
||||
:10051000154646E0C9F88000DFE793F90640002C55
|
||||
:1005200037DB04EB440C07EB8C0C9CF80710DCF871
|
||||
:100530000820D9719A609CF906206100002A9A71FE
|
||||
:100540003DDBBCF804E05FEA4E5E05D50EF5FF1E0C
|
||||
:100550000EF5FF5E0EF11F0E6FF0070C0A194FEA41
|
||||
:100560006E5E920002EB4E0208323A44ACEB030C92
|
||||
:100570006244C2F34A026FEAC2426FEAD2429A80F0
|
||||
:100580001E4B21441A7807EB81011C708A719DE78C
|
||||
:100590007346D9B9FF228EF806204BF60152AEF809
|
||||
:1005A0000420164C4AF6AA2294F800C01946C91B2A
|
||||
:1005B00049414A43120D83F806C0227086E7104A6B
|
||||
:1005C000DDE79EF906407346002CAADA0D4A0E4C70
|
||||
:1005D000D21A083AC2F30A316FEA01516FEA115197
|
||||
:1005E00044EA5202DA80998070E700BF39040020A3
|
||||
:1005F00000ED00E0110100102C020020D4040020C6
|
||||
:1006000001BDFFFF6602002000F8FFFFF0B5EFF329
|
||||
:100610000585EDB2EFF3108C72B62649D1E8CF2FE5
|
||||
:100620000123002AFAD1C1E8423F002AF6D1BFF3E4
|
||||
:100630005F8F214E40F0010EB4684AF6AA2354F8A9
|
||||
:1006400025701E4A0446A41A644163431B0D774576
|
||||
:100650005BB21BD092F906409C421CD092F912402A
|
||||
:100660009C4223D092F91E409C4221D092F92A400C
|
||||
:100670009C4208BF03240FD0114A00241578137040
|
||||
:100680008571C1E88F4F8CF31088F0BDB2680D4CB6
|
||||
:1006900042F82540F0E7002404EB440402EB840216
|
||||
:1006A000FF2494714BF601549480E5E70124F3E7AD
|
||||
:1006B0000224F1E73904002000ED00E02C020020C4
|
||||
:1006C000D404002011010010014B0B44036070475B
|
||||
:1006D0003004002070B5104C104DAC420ED2FF26F5
|
||||
:1006E000236863B1FFF712FE01462046FFF7ECFFD7
|
||||
:1006F000A680BFF35F8F0834AC42F1D370BDFFF723
|
||||
:1007000005FE01462046FFF7DFFF2671BFF35F8F2E
|
||||
:100710000834AC42E4D370BDA4020020AC02002037
|
||||
:100720000D4B1A68EFF3108172B6D2E8CFCF0120DB
|
||||
:10073000BCF1000FF9D1C2E84C0FBCF1000FF4D1AD
|
||||
:10074000BFF35F8F00221B68C3E88F2F81F31088EF
|
||||
:1007500040BF002000217047C804002000000000B6
|
||||
:100760002DE9F04F2DED028B85B0EFF30583DBB261
|
||||
:10077000103B9A0818BF01224FF0010103F0030B50
|
||||
:1007800018BFAF4DAF4B08BFAF4D0BEB820253F814
|
||||
:10079000226001FA0BF205F541539FEDA78B019200
|
||||
:1007A0005A602FE0B3881C0440F19380B379002B8A
|
||||
:1007B00040F0DD80B6F90820002AC0F21E8173697E
|
||||
:1007C00002EB420203EBC203D3E90247B7F1FF3F5A
|
||||
:1007D00008BFB4F1FF3F0ED005EB8B01AB6A0A698D
|
||||
:1007E000D21AE31A934205D301232A6A03FA0BF3C0
|
||||
:1007F000134200D10C61284600F0CAFAA042B94168
|
||||
:10080000C0F2FB80B6F90830019A002B0093EA632E
|
||||
:10081000C8DBD6F8148003EB4309284608EBC90768
|
||||
:10082000D7E9024A00F0B4FAA04271EB0A01B9DB41
|
||||
:10083000BAF1000FC0F2C380D7E90431834A934272
|
||||
:1008400000F0ED807A88B6F9080092B242EA0040E2
|
||||
:10085000984702460B4652EA030100F0B080002B95
|
||||
:1008600080F2D180B4EB020E6AEB030A38F939301A
|
||||
:10087000C7E902EA002B95DB716903EB430201EB48
|
||||
:10088000C202D2E90270BE457AEB000C4FEA430285
|
||||
:1008900088DBB4462CF8083F06E003EB430001EB8D
|
||||
:1008A000C0005A00D0E90270BE451A447AEB00003D
|
||||
:1008B00001EBC20404DB31F93230A446002BECDA40
|
||||
:1008C00028F83930009BACF80030B3881C043FF5A1
|
||||
:1008D0006DAF3369EFF3108272B6D3E8CF0F012109
|
||||
:1008E0000028FAD1C3E8401F0028F6D1BFF35F8F7C
|
||||
:1008F0004FF6FF74B0880023316900B2B480C1E8BC
|
||||
:100900008F3F82F310889842FFF650AF0746A94602
|
||||
:10091000746906F1080807EB470E04EBCE03D3E930
|
||||
:100920000250B6F90830C446002B13DBB2460097DC
|
||||
:1009300004E034F936309446002B09DB03EB430620
|
||||
:1009400004EBC602D2E90271BD4270EB0101F0DA9C
|
||||
:100950005646009FACF8007034F93E7024F83E30E3
|
||||
:10096000002FD8DAB3794D46002B3FF423AF002394
|
||||
:10097000B371B6F9083006F10808581C3DD01A4684
|
||||
:10098000776903E08046591C3FF416AF03EB43013F
|
||||
:1009900007EBC100B0F802C01C461CF4004F9E4695
|
||||
:1009A00037F93130EED0944280ED028B05D0A8F8B3
|
||||
:1009B0000030328927F8312034817246E3E738F875
|
||||
:1009C000393033813369EFF3108272B6D3E8CF0F39
|
||||
:1009D00001210028FAD1C3E8401F0028F6D1BFF357
|
||||
:1009E0005F8F7388316928F83930009B738000234A
|
||||
:1009F000C1E88F3F82F31088D4E640BF05B0BDEC5C
|
||||
:100A0000028BBDE8F08F2846CDE9022300F0C0F943
|
||||
:100A1000029A039B10EB020E43EB010A26E70846FD
|
||||
:100A20000B69029198470028C9D00299D1E90023A7
|
||||
:100A300011E700BFAFF30080FFFFFFFFFFFFFFFFE5
|
||||
:100A400000800B40A804002000000B40610700104C
|
||||
:100A50002DE9F84F364C25692DB1BDE8F84F0A2134
|
||||
:100A60003448FFF731BEDFF8E4800321404600F050
|
||||
:100A70007DF90326C4F80C80FFF748FC4FF0504C7A
|
||||
:100A80002D4B267003442361DCF800300F21637086
|
||||
:100A9000636961801D834FF00405A3F878504FF01F
|
||||
:100AA0000505A3F890504FF00605A3F8A8504FF0A5
|
||||
:100AB00007050E214FF6FF7208274FF00A0EA3F824
|
||||
:100AC000C0504FF001094FF00C0C4FF0020B4FF0EB
|
||||
:100AD000090A0D204FF00B05A3F868111749A280F1
|
||||
:100AE000A3F808E1A160A3F848B0A3F8F0A0A3F828
|
||||
:100AF0002051A3F838C1A3F85001A3F83090A3F80F
|
||||
:100B00006060A3F8D8701A800D4B3046C8F820708A
|
||||
:100B10000C49DC60FFF750FC49463046FFF736FCD5
|
||||
:100B2000094B0A211F640348BDE8F84FFFF7CCBD0D
|
||||
:100B300074020020C804002030040020FFFF1000D1
|
||||
:100B4000A80400206107001000200B4000000B40AB
|
||||
:100B50000146F0B50069EFF3108772B6D0E8CF5FB9
|
||||
:100B60000124002DFAD1C0E8454F002DF6D1BFF386
|
||||
:100B70005F8FB1F902E04C690EEB4E0CBEF1000F35
|
||||
:100B80004FEACC05086904EBCC0C3CDB665B4E807D
|
||||
:100B90000026C0E88F6F87F31088BCF80200CCE90C
|
||||
:100BA00002230130C0F30E00012838BF0120059B4D
|
||||
:100BB000ACF80200CCF81030069B40EA0E40CCF8AE
|
||||
:100BC00014300B69EFF3108272B6D3E8CFCF012750
|
||||
:100BD000BCF1000FF9D1C3E84C7FBCF1000FF4D198
|
||||
:100BE000BFF35F8F8B886353A1F804E00B69C3E800
|
||||
:100BF0008F6F82F310880122CB68097803F50153C7
|
||||
:100C00008A405A60F0BD0023C0E88F3F87F3108808
|
||||
:100C10004FF0FF30F0BD00BF03464089B0EB214FDD
|
||||
:100C200037DD58690A1402EB420210B500EBC2002E
|
||||
:100C30001C69EFF3108C72B6D4E8CFEF0122BEF13D
|
||||
:100C4000000FF9D1C4E84E2FBEF1000FF4D1BFF36D
|
||||
:100C50005F8F428889B292B28A4207D000221B6914
|
||||
:100C6000C3E88F2F8CF31088002010BD42F400429F
|
||||
:100C700042800121002218699971C0E88F2F8CF3FE
|
||||
:100C800010881C78DA68084602F50153A1405960C3
|
||||
:100C900010BD0020704700BF2DE9F04306460D4609
|
||||
:100CA00083B0EFF30584E4B23CB12D4B5A6AAA42FB
|
||||
:100CB0001CD2002003B0BDE8F0832A4FD7F80C9077
|
||||
:100CC00097F80080484600F063F808F1040859F8E6
|
||||
:100CD00028301B1A301A65EB0101984271F10001AE
|
||||
:100CE00010DB20BF1E4B5A6AAA42E2D314BF012474
|
||||
:100CF00000249B6AB34234BF204644F0010003B095
|
||||
:100D0000BDE8F08300F04CF8864265EB0101002954
|
||||
:100D100014DB154B3846CDE9003432462B46FFF73D
|
||||
:100D200017FF011E0ADD0E4B5A6AAA4216D39B6AB0
|
||||
:100D3000B34211D30B48FFF76FFFB6E7084B5C6A6D
|
||||
:100D4000AC42B6D3641B18BF01249B6AB34234BFC4
|
||||
:100D5000204644F00100ADE7AA42EBD120BFE9E70D
|
||||
:100D600000000B40740200202107001010B4054B56
|
||||
:100D7000054C064AA04214BF1846581C5DF8044BA7
|
||||
:100D8000FFF798BA5804002000800B40F0190010BB
|
||||
:100D90000346416A0A46986A596A8A42FAD17047FC
|
||||
:100DA000034B596A0A46986A596A9142FAD17047C8
|
||||
:100DB00000000B4030B4154A536A9C46946A536A4B
|
||||
:100DC0006345FAD1021959414FF0000528BF0125AA
|
||||
:100DD0000E4B5B6AB5B15A1C08BF1A4608D04FF0DB
|
||||
:100DE000FF310A460948436A8B42FCD38B4207D144
|
||||
:100DF000064902E0486A984202D1886A9042F9D3D3
|
||||
:100E000030BC70479942EDD8F0E700BF00000B40BE
|
||||
:100E1000F8B5054606200E4600F0E4F8002842D05A
|
||||
:100E2000354A3648954214BF4FF080624FF0006259
|
||||
:100E3000334B344902601A608C6832EA0404FBD1F7
|
||||
:100E40002D4B4FF48071EB1AB3FA83F32E4A5B09F2
|
||||
:100E5000062022F8131000F0C5F8C300B3FBF6F328
|
||||
:100E60000133DA0920D1402601216962AA622F6B81
|
||||
:100E7000FB0722D42B46002253F82C1F062003F533
|
||||
:100E8000805422602F6300F0ADF840F2013103225C
|
||||
:100E90008000B0FBF6F0EB6A83F0700303F07E0392
|
||||
:100EA00023602963AA64F8BD4FF6FE718A421BD9FC
|
||||
:100EB00022464FF6FF71154ED7E740F2013205F595
|
||||
:100EC00040531A636B6AAC6A062004EB831400F08B
|
||||
:100ED00089F80F4BA402A3FB0023DB0A0021B4FB1B
|
||||
:100EE000F3F0FFF767FFC5E7C3F34503114603EBD4
|
||||
:100EF00082161A46B9E700BF008007400020024072
|
||||
:100F00000030024000000240CC040020C0FF3F003F
|
||||
:100F1000757B2B8F00EB400C4FEA8C0C0CF1804C56
|
||||
:100F20000CF5803CF0B51646DCF80420051FB2F540
|
||||
:100F3000803F38BF4FF48032EDB238BFCCF8042088
|
||||
:100F4000012D2AD94FF40067254C0CF5405217604B
|
||||
:100F500054F82020B2B9DCF80020012D82EA4612B4
|
||||
:100F600002F0E0020CF5805632602AD94FF400619D
|
||||
:100F700044F820304FF480330CF500521160CCF867
|
||||
:100F80000430F0BD6769B7FBF2FE0EF1010E0EEB07
|
||||
:100F90004E0EBEF1030EFCD2DDE70129D2D10324AF
|
||||
:100FA0000CF540521460DCF80820D207FBD5DCF8C1
|
||||
:100FB00000200B4C82EA461202F0E0020CF580564B
|
||||
:100FC00032600122DCF800504D4005F00305356029
|
||||
:100FD00002FA01F1DCF808200A42FBD0C6E700BFA4
|
||||
:100FE0005C040020014B53F8200070475C04002093
|
||||
:100FF00070B4039D04682D0345EA03451B4B002C88
|
||||
:10100000B3FBF1F3B2FBF3F61FDB194A194B904225
|
||||
:1010100014BF4FF480424FF40042174C1A6003F59E
|
||||
:1010200080531A60A36832EA0303FBD1212200F542
|
||||
:1010300040530433016086601A600268002AFCDABB
|
||||
:101040000822C5601A6070BC7047036803F03F0354
|
||||
:101050008B42DAD18368C3F30B03B342D5D1C368A3
|
||||
:1010600003F4EE23AB42D0D1EDE700BF001BB70085
|
||||
:10107000008005400020024000000240012300EBF8
|
||||
:101080004000800000F1804000F584104160036062
|
||||
:10109000704700BF0023DB8A002242E800F25202C0
|
||||
:1010A00001D4102118470421184700BF034AD2F881
|
||||
:1010B0002838002BFBD0BFF35F8F704700000E4035
|
||||
:1010C0000021044B044ABFF35F8F43F8041B934293
|
||||
:1010D000F9D170470C080E402C080E4010B44FF4A4
|
||||
:1010E0008D704FF42A64064A064B07491460D0609D
|
||||
:1010F00019605368002BFCDA5DF8044B704700BFA1
|
||||
:101100000080044000A0044000B0FA00704700BF17
|
||||
:1011100008B50148FFF7B6F8141A001038B5054CA9
|
||||
:10112000054DAC4204D254F8043B9847AC42FAD384
|
||||
:1011300038BD00BF88190010C819001010B4074846
|
||||
:10114000074C084B084A094904601A608B6832EA68
|
||||
:101150000303FBD15DF8044B704700BF0020024041
|
||||
:101160007F3BEFEF00300240F6FFF3030000024048
|
||||
:10117000044BDB6CB3F5004F03D14FF48022024BDC
|
||||
:10118000DA64704700001150002011504FF0E02247
|
||||
:10119000044BD2F8881D0B43C2F8883D10EE300492
|
||||
:1011A000704700BF030330006FF06041044B054AF5
|
||||
:1011B00019609368DB4333F06043FAD1704700BF96
|
||||
:1011C000003002400000024010B545F25320FFF706
|
||||
:1011D00061FFBDE8104003460420184710B545F2F2
|
||||
:1011E0005320FFF757FFBDE8104003460120184782
|
||||
:1011F000FFF7A0B81449154B70B55C1AA610442E21
|
||||
:10120000324628BF4422124D9200284600F00EFBC1
|
||||
:10121000B4F5867F13D80F4AC6F1440012D02B19BB
|
||||
:10122000410803EBC101C3E9002208338B42FAD124
|
||||
:10123000C30704D520F00100304445F82020064BB8
|
||||
:101240009D6070BD4320F8E7000000101001001001
|
||||
:10125000000000201101001000ED00E0002370B537
|
||||
:101260002B4C82B0C4F88430FFF738FF0122294BA1
|
||||
:10127000DA63636C012BFCD10321264A244B1163F2
|
||||
:101280009C6B012CFCD10226052521460523224A10
|
||||
:1012900022480096FFF7ACFE21462B46204A214803
|
||||
:1012A0000095FFF7A5FE0022042031461E4BFFF7F4
|
||||
:1012B00031FE2146284600221C4BFFF72BFE002260
|
||||
:1012C000082011461A4BFFF725FE0022092011467F
|
||||
:1012D000174BFFF71FFE002206201146134BFFF7A6
|
||||
:1012E00019FE0022114B07201146FFF713FE0420C0
|
||||
:1012F000FFF778FE00240F4BA3FB0035AD0CE0B2E6
|
||||
:1013000029460134FFF7BAFE062CF8D102B070BDB1
|
||||
:101310000000014000300140002F685900000540E6
|
||||
:10132000008C864700800540001BB70080D1F00884
|
||||
:10133000006CDC0283DE1B4300B9704700F01CB96F
|
||||
:1013400010B5094B84B01C684CB1034600914FF0B6
|
||||
:10135000FF3203A90548A047012004B010BD00F0EA
|
||||
:101360004DF9204604B010BD8C0400203913001044
|
||||
:1013700000BEFDE708B5FFF7FBFF00BF38B5064C20
|
||||
:10138000064DFFF7CBFEAC4204D254F8043B98471D
|
||||
:10139000AC42FAD338BD00BFC8190010CC190010F8
|
||||
:1013A00003680846114618472DE9F0411546427D6D
|
||||
:1013B00007468846002A46D0002D1DDD0B780A2BF3
|
||||
:1013C00023D0012D4FF0000C18D04646012416F80A
|
||||
:1013D000012F21460A2A04F1010422D0A542F6D1A8
|
||||
:1013E00065450BDC08EB050313F8013CA3F10D0385
|
||||
:1013F000B3FA83F35B093B75BDE8F0813B68A5EB6D
|
||||
:101400000C0108EB0C009847ECE7037D002BD8D1CA
|
||||
:10141000036802210F489847012DE3D04FF0010CDB
|
||||
:10142000D3E716F8013C0D2BD8D08C4508EB0C0007
|
||||
:10143000A1EB0C0101DA3B689847022105483B68A3
|
||||
:101440009847A446CAE7294640463B68BDE8F041B4
|
||||
:10145000184700BFF81A00102DE9F04782B00D467A
|
||||
:1014600091461C460646FFF79BFC4FF0FF3C6FF091
|
||||
:1014700000472E4A821841F10003944577EB03019F
|
||||
:101480003CBF62463B462A4800F07AFA6B1C804615
|
||||
:1014900040D00CB3274F284B1C68B4B1B9F1000FF2
|
||||
:1014A0001CD1DFF89C9001E0246974B12368002B03
|
||||
:1014B000FAD0D9F800300BB19C42F5D120462A462B
|
||||
:1014C0003146B8472469002CF0D1B8F1000F26D17D
|
||||
:1014D000284602B0BDE8F087184FDCE74FF00A0A53
|
||||
:1014E000DFF85C9002E02469002CEED02368002B2A
|
||||
:1014F000F9D0D9F800300BB1A342F4D12A463146D5
|
||||
:101500002046B847012220460DF107018DF807A0BB
|
||||
:10151000B847E8E7304600F0FFF90546B9E7044868
|
||||
:1015200000F02AFA284602B0BDE8F08740420F00DA
|
||||
:10153000A4020020A913001084040020A1130010AD
|
||||
:1015400088040020084A136823B90AE003F1100256
|
||||
:101550001B6933B18342F9D129B918691060196147
|
||||
:10156000704701B1106070478404002008B500F096
|
||||
:1015700033F9012008BD00BFF0B583B006468DF8F1
|
||||
:101580000700FFF70DFC4FF0FF356FF00044174ADE
|
||||
:10159000821841F10003954274EB03013CBF2346DE
|
||||
:1015A0002A46134800F0ECF9124B07461C689CB120
|
||||
:1015B000114D01E024697CB12368002BFAD02B681F
|
||||
:1015C0000BB19C42F6D1204601220DF10701FFF735
|
||||
:1015D000EBFE2469002CEFD117B9304603B0F0BD03
|
||||
:1015E000034800F0C9F9304603B0F0BD40420F0097
|
||||
:1015F000A4020020840400208804002038B504469A
|
||||
:1016000000F08AF9012305461A4620462946FFF7CD
|
||||
:1016100023FF084B1C682CB163682BB198472469E1
|
||||
:10162000002CF9D1284638BD2469002CF4D1284675
|
||||
:1016300038BD00BF84040020B1F1000C1DDD0F4A4D
|
||||
:101640000F4B126830B5D31AB3FA83F30D240D4D46
|
||||
:101650005B09411E35F913E08C4411F8010F8645F2
|
||||
:1016600006D093699B06FCD461451060F5D130BD6E
|
||||
:1016700093699D06FCD41460F3E77047D004002002
|
||||
:1016800000800740CC040020224BB1F1000C10B4C4
|
||||
:101690001C682EDD034600201F4A591E12689369FC
|
||||
:1016A000DB0617D401309369DB06FCD4136884454C
|
||||
:1016B00001F8013FF3D14CB150211346916353F827
|
||||
:1016C000342F02F0380203F580531A6060465DF84B
|
||||
:1016D000044B70474CB150211346916353F8342F9B
|
||||
:1016E00002F0380203F580531A6078B15DF8044BBC
|
||||
:1016F00070475CB1084B50211A681346916353F848
|
||||
:10170000342F02F0380203F580531A606FF00200A4
|
||||
:10171000DDE700BF50040020D0040020054B1B680B
|
||||
:1017200033B10021044A05481268006891631847E4
|
||||
:10173000704700BF50040020D00400205404002053
|
||||
:10174000024B1A6893691B07FCD47047D004002031
|
||||
:10175000F8B51C4F1C4D3A681C4EAA4214BF2125F7
|
||||
:1017600022250446D6F800C018B1BCF1000F10D0F5
|
||||
:10177000F8BDBCF1000FFBD0014690632846FEF790
|
||||
:1017800005FE28461249FEF747FE124B34601C60E6
|
||||
:10179000F8BD0B460F4A0E49306028461360FEF72D
|
||||
:1017A0000BFE01212846FEF7F1FD3A685021134651
|
||||
:1017B000916353F8342F02F0380203F580531A6016
|
||||
:1017C000F8BD00BFD0040020008007405004002076
|
||||
:1017D0001D1700105404002010B50E490E4C0F4880
|
||||
:1017E0000F4A104B007821600020022112781B78EC
|
||||
:1017F000FEF72AFD02210120FEF726FD4FF4E1311C
|
||||
:101800002068FFF705FBBDE8104001210648FFF7FF
|
||||
:1018100099BE00BF00000740D0040020481B001004
|
||||
:10182000441B0010401B00108C020020844641EA3B
|
||||
:10183000000313F0030349D1403A23D30B6803603C
|
||||
:101840004B6843608B688360CB68C3600B6903613E
|
||||
:101850004B6943618B698361CB69C3610B6A036226
|
||||
:101860004B6A43628B6A8362CB6AC3620B6B03630E
|
||||
:101870004B6B43638B6B8363CB6BC36340304031F3
|
||||
:10188000403ADBD230320BD30B6803604B684360C5
|
||||
:101890008B688360CB68C36010301031103AF3D28C
|
||||
:1018A0000C3205D351F8043B40F8043B043AF9D21A
|
||||
:1018B000043208D0D2071CBF11F8013B00F8013BED
|
||||
:1018C00001D30B8803806046704700BF082A13D3FA
|
||||
:1018D0008B07B1D010F00303AED0C3F10403D21ACA
|
||||
:1018E000DB071CBF11F8013B00F8013BA4D331F822
|
||||
:1018F000023B20F8023B9FE7043AD9D3013A11F8A2
|
||||
:10190000013B00F8013BF9D20B7803704B78437030
|
||||
:101910008B7883706046704720F0030110F003005D
|
||||
:10192000C0F1000051F8043B00F1040C4FEACC0C6C
|
||||
:101930006FF000021CBF22FA0CF213434FF0010CAF
|
||||
:101940004CEA0C2C4CEA0C4CA3EB0C0222EA0302EE
|
||||
:1019500012EACC1204BF51F8043B0430F4D0C2F1B7
|
||||
:10196000000102EA0102B2FA82F2C2F11F0200EBA8
|
||||
:10197000D2007047F8B500BF5FF800F0E501002025
|
||||
:101980005FF800F07D010020C91100103D1100102A
|
||||
:10199000711100105D120010A9110010C11000108B
|
||||
:1019A000F1110010AD100010D5060010F511001057
|
||||
:1019B000510A00100D110010DD1100108D110010E2
|
||||
:0C19C000250300104D0300101102001060
|
||||
:1019CC0068656C6C6F2C20776F726C640D00000076
|
||||
:1019DC000A2A2A2A2050414E4943202A2A2A0A0040
|
||||
:1019EC000A000000486172647761726520616C6165
|
||||
:1019FC00726D20256420616C726561647920636C62
|
||||
:101A0C0061696D65640000004861726420617373E4
|
||||
:101A1C006572740052656C6561736500626F6F74FA
|
||||
:101A2C00325F77323571303830000000302E3100A3
|
||||
:101A3C00322E322E300000007069636F32000000CD
|
||||
:101A4C003078303030315F68656C6C6F2D776F7229
|
||||
:101A5C006C6400004F637420313720323032360012
|
||||
:101A6C005541525420737464696E000055415254B0
|
||||
:101A7C00207374646F7574005541525420737464F0
|
||||
:101A8C00696E202F207374646F75740006005250B9
|
||||
:101A9C00D3F07542201A001006005250E182887F64
|
||||
:101AAC00281A0010060052503ABCA911381A00101E
|
||||
:101ABC0006005250ABB360533C1A00100600525053
|
||||
:101ACC00BBFF3CB6441A001006005250861C0302A1
|
||||
:101ADC004C1A0010060052505422A29D601A00109D
|
||||
:101AEC0005005250DE65F468FC1C00100D0A000065
|
||||
:101AFC000600525053B4F4A1841A0010080052503E
|
||||
:0C1B0C001200000008005250921000006F
|
||||
:081B180014FDFF7F0100000035
|
||||
:101B2000981A0010A41A0010B01A0010BC1A001065
|
||||
:101B3000C81A0010D41A0010E01A0010EC1A001095
|
||||
:0C1B4000101B0010081B0010FC1A001005
|
||||
:101B4C004FF050412DE9F0410027044616461D4642
|
||||
:101B5C00D1F8008008E0C1E88F7F8CF31088304604
|
||||
:101B6C00294600F075F8E8B92168EFF3108C72B6CD
|
||||
:101B7C00D1E8CF2F0123002AFAD1C1E8423F002A35
|
||||
:101B8C00F6D1BFF35F8F94F904302168002BE2DAB1
|
||||
:101B9C00002384F80480C1E88F3F8CF31088012067
|
||||
:101BAC00BDE8F0810020BDE8F08100BF30B50468CD
|
||||
:101BBC00EFF3108C72B6D4E8CFEF0125BEF1000F15
|
||||
:101BCC00F9D1C4E84E5FBEF1000FF4D1BFF35F8FC3
|
||||
:101BDC0090F904400568002C10DB0021C5E88F1F2C
|
||||
:101BEC008CF310884FF0504595F90050A54201D167
|
||||
:101BFC00084630BDBDE83040FFF7A2BF4FF0504261
|
||||
:101C0C00126800230271C5E88F3F8CF31088012005
|
||||
:101C1C0030BD00BF0368EFF3108272B6D3E8CFCFAC
|
||||
:101C2C000121BCF1000FF9D1C3E84C1FBCF1000F2E
|
||||
:101C3C00F4D1BFF35F8F4FF0FF0C0023016880F8E5
|
||||
:101C4C0004C0C1E88F3F82F3108840BF704700BFCB
|
||||
:101C5C005FF800F0990C001010000000000000006C
|
||||
:101C6C000000010000000000000000000000020065
|
||||
:101C7C000000000000000000000003000000000055
|
||||
:101C8C00000000000000FF000000000001B54868E3
|
||||
:101C9C0001318E460047704609380149884701BD1D
|
||||
:101CAC000D06001000000000000000000000000005
|
||||
:101CBC000000000000000000B002002039160010E7
|
||||
:101CCC004117001089160010511700100000000079
|
||||
:0C1CDC00000100000000000000000000FB
|
||||
:101CE800D3DEFFFFFE010000FF01000050E4FFFF0C
|
||||
:041CF800793512AB7D
|
||||
:040000051000014D99
|
||||
:00000001FF
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
FLASH(rx) : ORIGIN = 0x10000000, LENGTH = (4 * 1024 * 1024)
|
||||
@@ -0,0 +1,121 @@
|
||||
# This is a copy of <PICO_SDK_PATH>/external/pico_sdk_import.cmake
|
||||
|
||||
# This can be dropped into an external project to help locate this SDK
|
||||
# It should be include()ed prior to project()
|
||||
|
||||
# Copyright 2020 (c) 2020 Raspberry Pi (Trading) Ltd.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
||||
# following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
|
||||
# disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
|
||||
# disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH))
|
||||
set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})
|
||||
message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')")
|
||||
endif ()
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT))
|
||||
set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT})
|
||||
message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')")
|
||||
endif ()
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH))
|
||||
set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH})
|
||||
message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')")
|
||||
endif ()
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_TAG} AND (NOT PICO_SDK_FETCH_FROM_GIT_TAG))
|
||||
set(PICO_SDK_FETCH_FROM_GIT_TAG $ENV{PICO_SDK_FETCH_FROM_GIT_TAG})
|
||||
message("Using PICO_SDK_FETCH_FROM_GIT_TAG from environment ('${PICO_SDK_FETCH_FROM_GIT_TAG}')")
|
||||
endif ()
|
||||
|
||||
if (PICO_SDK_FETCH_FROM_GIT AND NOT PICO_SDK_FETCH_FROM_GIT_TAG)
|
||||
set(PICO_SDK_FETCH_FROM_GIT_TAG "master")
|
||||
message("Using master as default value for PICO_SDK_FETCH_FROM_GIT_TAG")
|
||||
endif()
|
||||
|
||||
set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK")
|
||||
set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable")
|
||||
set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK")
|
||||
set(PICO_SDK_FETCH_FROM_GIT_TAG "${PICO_SDK_FETCH_FROM_GIT_TAG}" CACHE FILEPATH "release tag for SDK")
|
||||
|
||||
if (NOT PICO_SDK_PATH)
|
||||
if (PICO_SDK_FETCH_FROM_GIT)
|
||||
include(FetchContent)
|
||||
set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR})
|
||||
if (PICO_SDK_FETCH_FROM_GIT_PATH)
|
||||
get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
|
||||
endif ()
|
||||
FetchContent_Declare(
|
||||
pico_sdk
|
||||
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
|
||||
GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG}
|
||||
)
|
||||
|
||||
if (NOT pico_sdk)
|
||||
message("Downloading Raspberry Pi Pico SDK")
|
||||
# GIT_SUBMODULES_RECURSE was added in 3.17
|
||||
if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.17.0")
|
||||
FetchContent_Populate(
|
||||
pico_sdk
|
||||
QUIET
|
||||
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
|
||||
GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG}
|
||||
GIT_SUBMODULES_RECURSE FALSE
|
||||
|
||||
SOURCE_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-src
|
||||
BINARY_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-build
|
||||
SUBBUILD_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-subbuild
|
||||
)
|
||||
else ()
|
||||
FetchContent_Populate(
|
||||
pico_sdk
|
||||
QUIET
|
||||
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
|
||||
GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG}
|
||||
|
||||
SOURCE_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-src
|
||||
BINARY_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-build
|
||||
SUBBUILD_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-subbuild
|
||||
)
|
||||
endif ()
|
||||
|
||||
set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR})
|
||||
endif ()
|
||||
set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE})
|
||||
else ()
|
||||
message(FATAL_ERROR
|
||||
"SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git."
|
||||
)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
|
||||
if (NOT EXISTS ${PICO_SDK_PATH})
|
||||
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found")
|
||||
endif ()
|
||||
|
||||
set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake)
|
||||
if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE})
|
||||
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK")
|
||||
endif ()
|
||||
|
||||
set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)
|
||||
|
||||
include(${PICO_SDK_INIT_CMAKE_FILE})
|
||||
@@ -0,0 +1,9 @@
|
||||
build/CMakeFiles/
|
||||
build/pico_sdk/
|
||||
build/pico-sdk/
|
||||
build/generated/
|
||||
build/_deps/
|
||||
build/*.o
|
||||
build/*.d
|
||||
build/*.obj
|
||||
!.vscode/*
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Pico",
|
||||
"includePath": [
|
||||
"${workspaceFolder}/**",
|
||||
"${userHome}/.pico-sdk/sdk/2.2.0/**"
|
||||
],
|
||||
"forcedInclude": [
|
||||
"${userHome}/.pico-sdk/sdk/2.2.0/src/common/pico_base_headers/include/pico.h",
|
||||
"${workspaceFolder}/build/generated/pico_base/pico/config_autogen.h"
|
||||
],
|
||||
"defines": [],
|
||||
"compilerPath": "${userHome}/.pico-sdk/toolchain/14_2_Rel1/bin/arm-none-eabi-gcc.exe",
|
||||
"compileCommands": "${workspaceFolder}/build/compile_commands.json",
|
||||
"cStandard": "c17",
|
||||
"cppStandard": "c++14",
|
||||
"intelliSenseMode": "linux-gcc-arm"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
[
|
||||
{
|
||||
"name": "Pico",
|
||||
"compilers": {
|
||||
"C": "${command:raspberry-pi-pico.getCompilerPath}",
|
||||
"CXX": "${command:raspberry-pi-pico.getCxxCompilerPath}"
|
||||
},
|
||||
"environmentVariables": {
|
||||
"PATH": "${command:raspberry-pi-pico.getEnvPath};${env:PATH}"
|
||||
},
|
||||
"cmakeSettings": {
|
||||
"Python3_EXECUTABLE": "${command:raspberry-pi-pico.getPythonPath}"
|
||||
}
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"marus25.cortex-debug",
|
||||
"ms-vscode.cpptools",
|
||||
"ms-vscode.cpptools-extension-pack",
|
||||
"ms-vscode.vscode-serial-monitor",
|
||||
"raspberry-pi.raspberry-pi-pico"
|
||||
]
|
||||
}
|
||||
+50
@@ -0,0 +1,50 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Pico Debug (Cortex-Debug)",
|
||||
"cwd": "${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"executable": "${command:raspberry-pi-pico.launchTargetPath}",
|
||||
"request": "launch",
|
||||
"type": "cortex-debug",
|
||||
"servertype": "openocd",
|
||||
"serverpath": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"gdbPath": "${command:raspberry-pi-pico.getGDBPath}",
|
||||
"device": "${command:raspberry-pi-pico.getChipUppercase}",
|
||||
"configFiles": [
|
||||
"interface/cmsis-dap.cfg",
|
||||
"target/${command:raspberry-pi-pico.getTarget}.cfg"
|
||||
],
|
||||
"svdFile": "${userHome}/.pico-sdk/sdk/2.2.0/src/${command:raspberry-pi-pico.getChip}/hardware_regs/${command:raspberry-pi-pico.getChipUppercase}.svd",
|
||||
"runToEntryPoint": "main",
|
||||
// Fix for no_flash binaries, where monitor reset halt doesn't do what is expected
|
||||
// Also works fine for flash binaries
|
||||
"overrideLaunchCommands": [
|
||||
"monitor reset init",
|
||||
"load \"${command:raspberry-pi-pico.launchTargetPath}\""
|
||||
],
|
||||
"openOCDLaunchCommands": [
|
||||
"adapter speed 5000"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Pico Debug (Cortex-Debug with external OpenOCD)",
|
||||
"cwd": "${workspaceRoot}",
|
||||
"executable": "${command:raspberry-pi-pico.launchTargetPath}",
|
||||
"request": "launch",
|
||||
"type": "cortex-debug",
|
||||
"servertype": "external",
|
||||
"gdbTarget": "localhost:3333",
|
||||
"gdbPath": "${command:raspberry-pi-pico.getGDBPath}",
|
||||
"device": "${command:raspberry-pi-pico.getChipUppercase}",
|
||||
"svdFile": "${userHome}/.pico-sdk/sdk/2.2.0/src/${command:raspberry-pi-pico.getChip}/hardware_regs/${command:raspberry-pi-pico.getChipUppercase}.svd",
|
||||
"runToEntryPoint": "main",
|
||||
// Fix for no_flash binaries, where monitor reset halt doesn't do what is expected
|
||||
// Also works fine for flash binaries
|
||||
"overrideLaunchCommands": [
|
||||
"monitor reset init",
|
||||
"load \"${command:raspberry-pi-pico.launchTargetPath}\""
|
||||
]
|
||||
},
|
||||
]
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"cmake.showSystemKits": false,
|
||||
"cmake.options.statusBarVisibility": "hidden",
|
||||
"cmake.options.advanced": {
|
||||
"build": {
|
||||
"statusBarVisibility": "hidden"
|
||||
},
|
||||
"launch": {
|
||||
"statusBarVisibility": "hidden"
|
||||
},
|
||||
"debug": {
|
||||
"statusBarVisibility": "hidden"
|
||||
}
|
||||
},
|
||||
"cmake.configureOnEdit": false,
|
||||
"cmake.automaticReconfigure": false,
|
||||
"cmake.configureOnOpen": false,
|
||||
"cmake.generator": "Ninja",
|
||||
"cmake.cmakePath": "${userHome}/.pico-sdk/cmake/v3.31.5/bin/cmake",
|
||||
"C_Cpp.debugShortcut": false,
|
||||
"terminal.integrated.env.windows": {
|
||||
"PICO_SDK_PATH": "${env:USERPROFILE}/.pico-sdk/sdk/2.2.0",
|
||||
"PICO_TOOLCHAIN_PATH": "${env:USERPROFILE}/.pico-sdk/toolchain/14_2_Rel1",
|
||||
"Path": "${env:USERPROFILE}/.pico-sdk/toolchain/14_2_Rel1/bin;${env:USERPROFILE}/.pico-sdk/picotool/2.2.0/picotool;${env:USERPROFILE}/.pico-sdk/cmake/v3.31.5/bin;${env:USERPROFILE}/.pico-sdk/ninja/v1.12.1;${env:PATH}"
|
||||
},
|
||||
"terminal.integrated.env.osx": {
|
||||
"PICO_SDK_PATH": "${env:HOME}/.pico-sdk/sdk/2.2.0",
|
||||
"PICO_TOOLCHAIN_PATH": "${env:HOME}/.pico-sdk/toolchain/14_2_Rel1",
|
||||
"PATH": "${env:HOME}/.pico-sdk/toolchain/14_2_Rel1/bin:${env:HOME}/.pico-sdk/picotool/2.2.0/picotool:${env:HOME}/.pico-sdk/cmake/v3.31.5/bin:${env:HOME}/.pico-sdk/ninja/v1.12.1:${env:PATH}"
|
||||
},
|
||||
"terminal.integrated.env.linux": {
|
||||
"PICO_SDK_PATH": "${env:HOME}/.pico-sdk/sdk/2.2.0",
|
||||
"PICO_TOOLCHAIN_PATH": "${env:HOME}/.pico-sdk/toolchain/14_2_Rel1",
|
||||
"PATH": "${env:HOME}/.pico-sdk/toolchain/14_2_Rel1/bin:${env:HOME}/.pico-sdk/picotool/2.2.0/picotool:${env:HOME}/.pico-sdk/cmake/v3.31.5/bin:${env:HOME}/.pico-sdk/ninja/v1.12.1:${env:PATH}"
|
||||
},
|
||||
"raspberry-pi-pico.cmakeAutoConfigure": true,
|
||||
"raspberry-pi-pico.useCmakeTools": false,
|
||||
"raspberry-pi-pico.cmakePath": "${HOME}/.pico-sdk/cmake/v3.31.5/bin/cmake",
|
||||
"raspberry-pi-pico.ninjaPath": "${HOME}/.pico-sdk/ninja/v1.12.1/ninja",
|
||||
"files.associations": {
|
||||
"stdlib.h": "c"
|
||||
}
|
||||
}
|
||||
+102
@@ -0,0 +1,102 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Compile Project",
|
||||
"type": "process",
|
||||
"isBuildCommand": true,
|
||||
"command": "${userHome}/.pico-sdk/ninja/v1.12.1/ninja",
|
||||
"args": ["-C", "${workspaceFolder}/build"],
|
||||
"group": "build",
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"panel": "dedicated"
|
||||
},
|
||||
"problemMatcher": "$gcc",
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/ninja/v1.12.1/ninja.exe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Run Project",
|
||||
"type": "process",
|
||||
"command": "${env:HOME}/.pico-sdk/picotool/2.2.0/picotool/picotool",
|
||||
"args": [
|
||||
"load",
|
||||
"${command:raspberry-pi-pico.launchTargetPath}",
|
||||
"-fx"
|
||||
],
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"panel": "dedicated"
|
||||
},
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/picotool/2.2.0/picotool/picotool.exe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Flash",
|
||||
"type": "process",
|
||||
"command": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"args": [
|
||||
"-s",
|
||||
"${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"-f",
|
||||
"interface/cmsis-dap.cfg",
|
||||
"-f",
|
||||
"target/${command:raspberry-pi-pico.getTarget}.cfg",
|
||||
"-c",
|
||||
"adapter speed 5000; program \"${command:raspberry-pi-pico.launchTargetPath}\" verify reset exit"
|
||||
],
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Rescue Reset",
|
||||
"type": "process",
|
||||
"command": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"args": [
|
||||
"-s",
|
||||
"${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"-f",
|
||||
"interface/cmsis-dap.cfg",
|
||||
"-f",
|
||||
"target/${command:raspberry-pi-pico.getChip}-rescue.cfg",
|
||||
"-c",
|
||||
"adapter speed 5000; reset halt; exit"
|
||||
],
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Risc-V Reset (RP2350)",
|
||||
"type": "process",
|
||||
"command": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"args": [
|
||||
"-s",
|
||||
"${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"-c",
|
||||
"set USE_CORE { rv0 rv1 cm0 cm1 }",
|
||||
"-f",
|
||||
"interface/cmsis-dap.cfg",
|
||||
"-f",
|
||||
"target/rp2350.cfg",
|
||||
"-c",
|
||||
"adapter speed 5000; init;",
|
||||
"-c",
|
||||
"write_memory 0x40120158 8 { 0x3 }; echo [format \"Info : ARCHSEL 0x%02x\" [read_memory 0x40120158 8 1]];",
|
||||
"-c",
|
||||
"reset halt; targets rp2350.rv0; echo [format \"Info : ARCHSEL_STATUS 0x%02x\" [read_memory 0x4012015C 8 1]]; exit"
|
||||
],
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
/**
|
||||
* @file 0x0001_hello-world.c
|
||||
* @brief Hello World: print a greeting over UART in an infinite loop
|
||||
* @author Kevin Thomas
|
||||
* @date 2025
|
||||
*
|
||||
* MIT License
|
||||
*
|
||||
* Copyright (c) 2025 Kevin Thomas
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
* -----------------------------------------------------------------------------
|
||||
*
|
||||
* Demonstrates the minimal "hello, world" program on the Raspberry Pi Pico 2.
|
||||
* Initializes stdio over UART and prints a greeting in an infinite loop.
|
||||
*
|
||||
* Wiring:
|
||||
* No external wiring required (USB serial).
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "pico/stdlib.h"
|
||||
|
||||
int main(void) {
|
||||
stdio_init_all();
|
||||
while (true) {
|
||||
printf("hello, world\r\n");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,57 @@
|
||||
# Generated Cmake Pico project file
|
||||
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
# Initialise pico_sdk from installed location
|
||||
# (note this can come from environment, CMake cache etc)
|
||||
|
||||
# == DO NOT EDIT THE FOLLOWING LINES for the Raspberry Pi Pico VS Code Extension to work ==
|
||||
if(WIN32)
|
||||
set(USERHOME $ENV{USERPROFILE})
|
||||
else()
|
||||
set(USERHOME $ENV{HOME})
|
||||
endif()
|
||||
set(sdkVersion 2.2.0)
|
||||
set(toolchainVersion 14_2_Rel1)
|
||||
set(picotoolVersion 2.2.0)
|
||||
set(picoVscode ${USERHOME}/.pico-sdk/cmake/pico-vscode.cmake)
|
||||
if (EXISTS ${picoVscode})
|
||||
include(${picoVscode})
|
||||
endif()
|
||||
# ====================================================================================
|
||||
set(PICO_BOARD pico2 CACHE STRING "Board type")
|
||||
|
||||
# Pull in Raspberry Pi Pico SDK (must be before project)
|
||||
include(pico_sdk_import.cmake)
|
||||
|
||||
project(0x0001_hello-world C CXX ASM)
|
||||
|
||||
# Initialise the Raspberry Pi Pico SDK
|
||||
pico_sdk_init()
|
||||
|
||||
# Add executable. Default name is the project name, version 0.1
|
||||
|
||||
add_executable(0x0001_hello-world 0x0001_hello-world.c )
|
||||
|
||||
pico_set_program_name(0x0001_hello-world "0x0001_hello-world")
|
||||
pico_set_program_version(0x0001_hello-world "0.1")
|
||||
|
||||
# Modify the below lines to enable/disable output over UART/USB
|
||||
pico_enable_stdio_uart(0x0001_hello-world 1)
|
||||
pico_enable_stdio_usb(0x0001_hello-world 0)
|
||||
|
||||
# Add the standard library to the build
|
||||
target_link_libraries(0x0001_hello-world
|
||||
pico_stdlib)
|
||||
|
||||
# Add the standard include files to the build
|
||||
target_include_directories(0x0001_hello-world PRIVATE
|
||||
${CMAKE_CURRENT_LIST_DIR}
|
||||
)
|
||||
|
||||
pico_add_extra_outputs(0x0001_hello-world)
|
||||
|
||||
BIN
Binary file not shown.
File diff suppressed because it is too large.
Load diff
BIN
Binary file not shown.
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,469 @@
|
||||
:020000041000EA
|
||||
:10000000002008205D0100101B0100101D010010E0
|
||||
:100010001101001011010010110100101101001058
|
||||
:100020001901001019010010190100101F01001022
|
||||
:10003000110100101901001021010010230100100E
|
||||
:100040001101001011010010110100101101001028
|
||||
:100050001101001011010010110100101101001018
|
||||
:100060001101001011010010110100101101001008
|
||||
:1000700011010010110100101101001011010010F8
|
||||
:1000800011010010110100101101001011010010E8
|
||||
:1000900011010010110100101101001011010010D8
|
||||
:1000A00011010010110100101101001011010010C8
|
||||
:1000B00011010010110100101101001011010010B8
|
||||
:1000C00011010010110100101101001011010010A8
|
||||
:1000D0001101001011010010110100101101001098
|
||||
:1000E0001101001011010010110100101101001088
|
||||
:1000F0001101001011010010110100101101001078
|
||||
:100100001101001011010010110100101101001067
|
||||
:10011000EFF30580103800BE00BE00BE00BE00BE7A
|
||||
:1001200000BE00BEF2EB8871201B00104C1B0010BB
|
||||
:10013000A001001090A31AE7D3DEFFFF42012110B7
|
||||
:10014000FF010000B01B0000793512AB4FF000003A
|
||||
:100150001E49086006C881F3088810474FF05040D8
|
||||
:10016000006810B14FF00000F2E70DA40ECC00299A
|
||||
:1001700002D000F012F8F9E71549164A002000E015
|
||||
:1001800001C19142FCD11449884714498847144958
|
||||
:10019000884700BEFDE701C901C29A42FBD3704700
|
||||
:1001A0004C1B001010010020AC020020E81C0010C5
|
||||
:1001B0000000082000000820E81C001000100820A3
|
||||
:1001C00000100820000000007047000008ED00E06B
|
||||
:1001D000AC020020D80400207D130010350200106E
|
||||
:1001E00075130010F8B500BF064B0749C91A8910EE
|
||||
:1001F00048BF0131491003D0044B0BB101481847E7
|
||||
:10020000704700BFAC020020AC02002000000000DC
|
||||
:1002100008B5054B1BB105490548AFF30080BDE8A3
|
||||
:100220000840FFF7E1BF00BF00000000900400207D
|
||||
:10023000CC19001008B501F099F9024801F0DEF977
|
||||
:10024000FBE700BFCC19001010B44FF480740C4BC6
|
||||
:1002500053F8202003EB8003C00082F0400200F13D
|
||||
:10026000804003F5805C02F0C00200F5203003F509
|
||||
:100270004053CCF8002041601C605DF8044B70478F
|
||||
:10028000048003400FB400B583B0049C074801F01C
|
||||
:10029000B5F93CB105A92046019101F051F8044897
|
||||
:1002A00001F0ACF9012001F063F800BFDC19001087
|
||||
:1002B000EC19001070B58646EFF3108572B6124C3B
|
||||
:1002C000D4E8CF6F0120002EFAD1C4E8460F002EEB
|
||||
:1002D000F6D1BFF35F8F4FF0010CC80801F00703A0
|
||||
:1002E0000CFA03F31EF800C01CEA030608D14CEA1E
|
||||
:1002F000030C0EF800C0C4E88F6F85F3108870BD42
|
||||
:100300001046FFF7BFFF00BF3B040020044A1078EF
|
||||
:10031000431CDBB2182B28BF10231370704700BF9B
|
||||
:10032000280200204FF0E022936843F000539360CE
|
||||
:10033000704700BF0021044B03F12002C3E88F1F68
|
||||
:1003400001339342FAD17047300400204FF0E0238C
|
||||
:100350004FF08032C3F80024C3F80424C3F8082403
|
||||
:10036000C3F80C24C3F81024C3F81424C3F81824C9
|
||||
:10037000C3F81C24C3F82024C3F82424C3F8282479
|
||||
:10038000C3F82C24C3F8302462B67047012300F070
|
||||
:100390001F029340400941B1800000F1604000F528
|
||||
:1003A0006140C0F8803103607047024A203042F853
|
||||
:1003B0002030704700E100E0F8B50D46EFF31087FC
|
||||
:1003C00072B6124ED6E8CF2F0123002AFAD1C6E822
|
||||
:1003D000423F002AF6D1BFF35F8F0D4B00F11004AE
|
||||
:1003E0009B680C4A53F82430934203D0994201D0C1
|
||||
:1003F00000F08EFE064B9B6843F82450BFF35F8FDE
|
||||
:100400000023C6E88F3F87F31088F8BD3904002029
|
||||
:1004100000ED00E0110100102DE9F04F83B0EFF383
|
||||
:10042000108A72B6714ED6E8CF2F0123002AFAD176
|
||||
:10043000C6E8423F002AF6D1BFF35F8F6C4B00F154
|
||||
:1004400010089B686B4A53F82850954245D08D425E
|
||||
:100450000C4650D0684FEB1B2F2B3ED801214FEAA2
|
||||
:1004600050194FEA890909F1604909F5614900F01D
|
||||
:100470001F0301FA03F0D9F80030C9F8800000EA40
|
||||
:10048000030BBFF35F8FEFF30581C9B2002934D0AE
|
||||
:10049000884505D0CDE9001000F03AFEDDE90010F6
|
||||
:1004A00025F0010EDEF808C0644505D189E0D3F8D7
|
||||
:1004B00008C0644531D09E469EF9062002EB4203F7
|
||||
:1004C000002A07EB8303F2DA644561D0BBF1000F29
|
||||
:1004D00020D0C9F88001C9F80000454B9B6843F85B
|
||||
:1004E0002850BFF35F8F0023C6E88F3F8AF3108840
|
||||
:1004F00003B0BDE8F08F1546EFE725F0010EDEF8FA
|
||||
:1005000008C06445D8D19EF906407346002C08DA2D
|
||||
:10051000154646E0C9F88000DFE793F90640002C55
|
||||
:1005200037DB04EB440C07EB8C0C9CF80710DCF871
|
||||
:100530000820D9719A609CF906206100002A9A71FE
|
||||
:100540003DDBBCF804E05FEA4E5E05D50EF5FF1E0C
|
||||
:100550000EF5FF5E0EF11F0E6FF0070C0A194FEA41
|
||||
:100560006E5E920002EB4E0208323A44ACEB030C92
|
||||
:100570006244C2F34A026FEAC2426FEAD2429A80F0
|
||||
:100580001E4B21441A7807EB81011C708A719DE78C
|
||||
:100590007346D9B9FF228EF806204BF60152AEF809
|
||||
:1005A0000420164C4AF6AA2294F800C01946C91B2A
|
||||
:1005B00049414A43120D83F806C0227086E7104A6B
|
||||
:1005C000DDE79EF906407346002CAADA0D4A0E4C70
|
||||
:1005D000D21A083AC2F30A316FEA01516FEA115197
|
||||
:1005E00044EA5202DA80998070E700BF39040020A3
|
||||
:1005F00000ED00E0110100102C020020D4040020C6
|
||||
:1006000001BDFFFF6602002000F8FFFFF0B5EFF329
|
||||
:100610000585EDB2EFF3108C72B62649D1E8CF2FE5
|
||||
:100620000123002AFAD1C1E8423F002AF6D1BFF3E4
|
||||
:100630005F8F214E40F0010EB4684AF6AA2354F8A9
|
||||
:1006400025701E4A0446A41A644163431B0D774576
|
||||
:100650005BB21BD092F906409C421CD092F912402A
|
||||
:100660009C4223D092F91E409C4221D092F92A400C
|
||||
:100670009C4208BF03240FD0114A00241578137040
|
||||
:100680008571C1E88F4F8CF31088F0BDB2680D4CB6
|
||||
:1006900042F82540F0E7002404EB440402EB840216
|
||||
:1006A000FF2494714BF601549480E5E70124F3E7AD
|
||||
:1006B0000224F1E73904002000ED00E02C020020C4
|
||||
:1006C000D404002011010010014B0B44036070475B
|
||||
:1006D0003004002070B5104C104DAC420ED2FF26F5
|
||||
:1006E000236863B1FFF712FE01462046FFF7ECFFD7
|
||||
:1006F000A680BFF35F8F0834AC42F1D370BDFFF723
|
||||
:1007000005FE01462046FFF7DFFF2671BFF35F8F2E
|
||||
:100710000834AC42E4D370BDA4020020AC02002037
|
||||
:100720000D4B1A68EFF3108172B6D2E8CFCF0120DB
|
||||
:10073000BCF1000FF9D1C2E84C0FBCF1000FF4D1AD
|
||||
:10074000BFF35F8F00221B68C3E88F2F81F31088EF
|
||||
:1007500040BF002000217047C804002000000000B6
|
||||
:100760002DE9F04F2DED028B85B0EFF30583DBB261
|
||||
:10077000103B9A0818BF01224FF0010103F0030B50
|
||||
:1007800018BFAF4DAF4B08BFAF4D0BEB820253F814
|
||||
:10079000226001FA0BF205F541539FEDA78B019200
|
||||
:1007A0005A602FE0B3881C0440F19380B379002B8A
|
||||
:1007B00040F0DD80B6F90820002AC0F21E8173697E
|
||||
:1007C00002EB420203EBC203D3E90247B7F1FF3F5A
|
||||
:1007D00008BFB4F1FF3F0ED005EB8B01AB6A0A698D
|
||||
:1007E000D21AE31A934205D301232A6A03FA0BF3C0
|
||||
:1007F000134200D10C61284600F0CAFAA042B94168
|
||||
:10080000C0F2FB80B6F90830019A002B0093EA632E
|
||||
:10081000C8DBD6F8148003EB4309284608EBC90768
|
||||
:10082000D7E9024A00F0B4FAA04271EB0A01B9DB41
|
||||
:10083000BAF1000FC0F2C380D7E90431834A934272
|
||||
:1008400000F0ED807A88B6F9080092B242EA0040E2
|
||||
:10085000984702460B4652EA030100F0B080002B95
|
||||
:1008600080F2D180B4EB020E6AEB030A38F939301A
|
||||
:10087000C7E902EA002B95DB716903EB430201EB48
|
||||
:10088000C202D2E90270BE457AEB000C4FEA430285
|
||||
:1008900088DBB4462CF8083F06E003EB430001EB8D
|
||||
:1008A000C0005A00D0E90270BE451A447AEB00003D
|
||||
:1008B00001EBC20404DB31F93230A446002BECDA40
|
||||
:1008C00028F83930009BACF80030B3881C043FF5A1
|
||||
:1008D0006DAF3369EFF3108272B6D3E8CF0F012109
|
||||
:1008E0000028FAD1C3E8401F0028F6D1BFF35F8F7C
|
||||
:1008F0004FF6FF74B0880023316900B2B480C1E8BC
|
||||
:100900008F3F82F310889842FFF650AF0746A94602
|
||||
:10091000746906F1080807EB470E04EBCE03D3E930
|
||||
:100920000250B6F90830C446002B13DBB2460097DC
|
||||
:1009300004E034F936309446002B09DB03EB430620
|
||||
:1009400004EBC602D2E90271BD4270EB0101F0DA9C
|
||||
:100950005646009FACF8007034F93E7024F83E30E3
|
||||
:10096000002FD8DAB3794D46002B3FF423AF002394
|
||||
:10097000B371B6F9083006F10808581C3DD01A4684
|
||||
:10098000776903E08046591C3FF416AF03EB43013F
|
||||
:1009900007EBC100B0F802C01C461CF4004F9E4695
|
||||
:1009A00037F93130EED0944280ED028B05D0A8F8B3
|
||||
:1009B0000030328927F8312034817246E3E738F875
|
||||
:1009C000393033813369EFF3108272B6D3E8CF0F39
|
||||
:1009D00001210028FAD1C3E8401F0028F6D1BFF357
|
||||
:1009E0005F8F7388316928F83930009B738000234A
|
||||
:1009F000C1E88F3F82F31088D4E640BF05B0BDEC5C
|
||||
:100A0000028BBDE8F08F2846CDE9022300F0C0F943
|
||||
:100A1000029A039B10EB020E43EB010A26E70846FD
|
||||
:100A20000B69029198470028C9D00299D1E90023A7
|
||||
:100A300011E700BFAFF30080FFFFFFFFFFFFFFFFE5
|
||||
:100A400000800B40A804002000000B40610700104C
|
||||
:100A50002DE9F84F364C25692DB1BDE8F84F0A2134
|
||||
:100A60003448FFF731BEDFF8E4800321404600F050
|
||||
:100A70007DF90326C4F80C80FFF748FC4FF0504C7A
|
||||
:100A80002D4B267003442361DCF800300F21637086
|
||||
:100A9000636961801D834FF00405A3F878504FF01F
|
||||
:100AA0000505A3F890504FF00605A3F8A8504FF0A5
|
||||
:100AB00007050E214FF6FF7208274FF00A0EA3F824
|
||||
:100AC000C0504FF001094FF00C0C4FF0020B4FF0EB
|
||||
:100AD000090A0D204FF00B05A3F868111749A280F1
|
||||
:100AE000A3F808E1A160A3F848B0A3F8F0A0A3F828
|
||||
:100AF0002051A3F838C1A3F85001A3F83090A3F80F
|
||||
:100B00006060A3F8D8701A800D4B3046C8F820708A
|
||||
:100B10000C49DC60FFF750FC49463046FFF736FCD5
|
||||
:100B2000094B0A211F640348BDE8F84FFFF7CCBD0D
|
||||
:100B300074020020C804002030040020FFFF1000D1
|
||||
:100B4000A80400206107001000200B4000000B40AB
|
||||
:100B50000146F0B50069EFF3108772B6D0E8CF5FB9
|
||||
:100B60000124002DFAD1C0E8454F002DF6D1BFF386
|
||||
:100B70005F8FB1F902E04C690EEB4E0CBEF1000F35
|
||||
:100B80004FEACC05086904EBCC0C3CDB665B4E807D
|
||||
:100B90000026C0E88F6F87F31088BCF80200CCE90C
|
||||
:100BA00002230130C0F30E00012838BF0120059B4D
|
||||
:100BB000ACF80200CCF81030069B40EA0E40CCF8AE
|
||||
:100BC00014300B69EFF3108272B6D3E8CFCF012750
|
||||
:100BD000BCF1000FF9D1C3E84C7FBCF1000FF4D198
|
||||
:100BE000BFF35F8F8B886353A1F804E00B69C3E800
|
||||
:100BF0008F6F82F310880122CB68097803F50153C7
|
||||
:100C00008A405A60F0BD0023C0E88F3F87F3108808
|
||||
:100C10004FF0FF30F0BD00BF03464089B0EB214FDD
|
||||
:100C200037DD58690A1402EB420210B500EBC2002E
|
||||
:100C30001C69EFF3108C72B6D4E8CFEF0122BEF13D
|
||||
:100C4000000FF9D1C4E84E2FBEF1000FF4D1BFF36D
|
||||
:100C50005F8F428889B292B28A4207D000221B6914
|
||||
:100C6000C3E88F2F8CF31088002010BD42F400429F
|
||||
:100C700042800121002218699971C0E88F2F8CF3FE
|
||||
:100C800010881C78DA68084602F50153A1405960C3
|
||||
:100C900010BD0020704700BF2DE9F04306460D4609
|
||||
:100CA00083B0EFF30584E4B23CB12D4B5A6AAA42FB
|
||||
:100CB0001CD2002003B0BDE8F0832A4FD7F80C9077
|
||||
:100CC00097F80080484600F063F808F1040859F8E6
|
||||
:100CD00028301B1A301A65EB0101984271F10001AE
|
||||
:100CE00010DB20BF1E4B5A6AAA42E2D314BF012474
|
||||
:100CF00000249B6AB34234BF204644F0010003B095
|
||||
:100D0000BDE8F08300F04CF8864265EB0101002954
|
||||
:100D100014DB154B3846CDE9003432462B46FFF73D
|
||||
:100D200017FF011E0ADD0E4B5A6AAA4216D39B6AB0
|
||||
:100D3000B34211D30B48FFF76FFFB6E7084B5C6A6D
|
||||
:100D4000AC42B6D3641B18BF01249B6AB34234BFC4
|
||||
:100D5000204644F00100ADE7AA42EBD120BFE9E70D
|
||||
:100D600000000B40740200202107001010B4054B56
|
||||
:100D7000054C064AA04214BF1846581C5DF8044BA7
|
||||
:100D8000FFF798BA5804002000800B40F0190010BB
|
||||
:100D90000346416A0A46986A596A8A42FAD17047FC
|
||||
:100DA000034B596A0A46986A596A9142FAD17047C8
|
||||
:100DB00000000B4030B4154A536A9C46946A536A4B
|
||||
:100DC0006345FAD1021959414FF0000528BF0125AA
|
||||
:100DD0000E4B5B6AB5B15A1C08BF1A4608D04FF0DB
|
||||
:100DE000FF310A460948436A8B42FCD38B4207D144
|
||||
:100DF000064902E0486A984202D1886A9042F9D3D3
|
||||
:100E000030BC70479942EDD8F0E700BF00000B40BE
|
||||
:100E1000F8B5054606200E4600F0E4F8002842D05A
|
||||
:100E2000354A3648954214BF4FF080624FF0006259
|
||||
:100E3000334B344902601A608C6832EA0404FBD1F7
|
||||
:100E40002D4B4FF48071EB1AB3FA83F32E4A5B09F2
|
||||
:100E5000062022F8131000F0C5F8C300B3FBF6F328
|
||||
:100E60000133DA0920D1402601216962AA622F6B81
|
||||
:100E7000FB0722D42B46002253F82C1F062003F533
|
||||
:100E8000805422602F6300F0ADF840F2013103225C
|
||||
:100E90008000B0FBF6F0EB6A83F0700303F07E0392
|
||||
:100EA00023602963AA64F8BD4FF6FE718A421BD9FC
|
||||
:100EB00022464FF6FF71154ED7E740F2013205F595
|
||||
:100EC00040531A636B6AAC6A062004EB831400F08B
|
||||
:100ED00089F80F4BA402A3FB0023DB0A0021B4FB1B
|
||||
:100EE000F3F0FFF767FFC5E7C3F34503114603EBD4
|
||||
:100EF00082161A46B9E700BF008007400020024072
|
||||
:100F00000030024000000240CC040020C0FF3F003F
|
||||
:100F1000757B2B8F00EB400C4FEA8C0C0CF1804C56
|
||||
:100F20000CF5803CF0B51646DCF80420051FB2F540
|
||||
:100F3000803F38BF4FF48032EDB238BFCCF8042088
|
||||
:100F4000012D2AD94FF40067254C0CF5405217604B
|
||||
:100F500054F82020B2B9DCF80020012D82EA4612B4
|
||||
:100F600002F0E0020CF5805632602AD94FF400619D
|
||||
:100F700044F820304FF480330CF500521160CCF867
|
||||
:100F80000430F0BD6769B7FBF2FE0EF1010E0EEB07
|
||||
:100F90004E0EBEF1030EFCD2DDE70129D2D10324AF
|
||||
:100FA0000CF540521460DCF80820D207FBD5DCF8C1
|
||||
:100FB00000200B4C82EA461202F0E0020CF580564B
|
||||
:100FC00032600122DCF800504D4005F00305356029
|
||||
:100FD00002FA01F1DCF808200A42FBD0C6E700BFA4
|
||||
:100FE0005C040020014B53F8200070475C04002093
|
||||
:100FF00070B4039D04682D0345EA03451B4B002C88
|
||||
:10100000B3FBF1F3B2FBF3F61FDB194A194B904225
|
||||
:1010100014BF4FF480424FF40042174C1A6003F59E
|
||||
:1010200080531A60A36832EA0303FBD1212200F542
|
||||
:1010300040530433016086601A600268002AFCDABB
|
||||
:101040000822C5601A6070BC7047036803F03F0354
|
||||
:101050008B42DAD18368C3F30B03B342D5D1C368A3
|
||||
:1010600003F4EE23AB42D0D1EDE700BF001BB70085
|
||||
:10107000008005400020024000000240012300EBF8
|
||||
:101080004000800000F1804000F584104160036062
|
||||
:10109000704700BF0023DB8A002242E800F25202C0
|
||||
:1010A00001D4102118470421184700BF034AD2F881
|
||||
:1010B0002838002BFBD0BFF35F8F704700000E4035
|
||||
:1010C0000021044B044ABFF35F8F43F8041B934293
|
||||
:1010D000F9D170470C080E402C080E4010B44FF4A4
|
||||
:1010E0008D704FF42A64064A064B07491460D0609D
|
||||
:1010F00019605368002BFCDA5DF8044B704700BFA1
|
||||
:101100000080044000A0044000B0FA00704700BF17
|
||||
:1011100008B50148FFF7B6F8141A001038B5054CA9
|
||||
:10112000054DAC4204D254F8043B9847AC42FAD384
|
||||
:1011300038BD00BF88190010C819001010B4074846
|
||||
:10114000074C084B084A094904601A608B6832EA68
|
||||
:101150000303FBD15DF8044B704700BF0020024041
|
||||
:101160007F3BEFEF00300240F6FFF3030000024048
|
||||
:10117000044BDB6CB3F5004F03D14FF48022024BDC
|
||||
:10118000DA64704700001150002011504FF0E02247
|
||||
:10119000044BD2F8881D0B43C2F8883D10EE300492
|
||||
:1011A000704700BF030330006FF06041044B054AF5
|
||||
:1011B00019609368DB4333F06043FAD1704700BF96
|
||||
:1011C000003002400000024010B545F25320FFF706
|
||||
:1011D00061FFBDE8104003460420184710B545F2F2
|
||||
:1011E0005320FFF757FFBDE8104003460120184782
|
||||
:1011F000FFF7A0B81449154B70B55C1AA610442E21
|
||||
:10120000324628BF4422124D9200284600F00EFBC1
|
||||
:10121000B4F5867F13D80F4AC6F1440012D02B19BB
|
||||
:10122000410803EBC101C3E9002208338B42FAD124
|
||||
:10123000C30704D520F00100304445F82020064BB8
|
||||
:101240009D6070BD4320F8E7000000101001001001
|
||||
:10125000000000201101001000ED00E0002370B537
|
||||
:101260002B4C82B0C4F88430FFF738FF0122294BA1
|
||||
:10127000DA63636C012BFCD10321264A244B1163F2
|
||||
:101280009C6B012CFCD10226052521460523224A10
|
||||
:1012900022480096FFF7ACFE21462B46204A214803
|
||||
:1012A0000095FFF7A5FE0022042031461E4BFFF7F4
|
||||
:1012B00031FE2146284600221C4BFFF72BFE002260
|
||||
:1012C000082011461A4BFFF725FE0022092011467F
|
||||
:1012D000174BFFF71FFE002206201146134BFFF7A6
|
||||
:1012E00019FE0022114B07201146FFF713FE0420C0
|
||||
:1012F000FFF778FE00240F4BA3FB0035AD0CE0B2E6
|
||||
:1013000029460134FFF7BAFE062CF8D102B070BDB1
|
||||
:101310000000014000300140002F685900000540E6
|
||||
:10132000008C864700800540001BB70080D1F00884
|
||||
:10133000006CDC0283DE1B4300B9704700F01CB96F
|
||||
:1013400010B5094B84B01C684CB1034600914FF0B6
|
||||
:10135000FF3203A90548A047012004B010BD00F0EA
|
||||
:101360004DF9204604B010BD8C0400203913001044
|
||||
:1013700000BEFDE708B5FFF7FBFF00BF38B5064C20
|
||||
:10138000064DFFF7CBFEAC4204D254F8043B98471D
|
||||
:10139000AC42FAD338BD00BFC8190010CC190010F8
|
||||
:1013A00003680846114618472DE9F0411546427D6D
|
||||
:1013B00007468846002A46D0002D1DDD0B780A2BF3
|
||||
:1013C00023D0012D4FF0000C18D04646012416F80A
|
||||
:1013D000012F21460A2A04F1010422D0A542F6D1A8
|
||||
:1013E00065450BDC08EB050313F8013CA3F10D0385
|
||||
:1013F000B3FA83F35B093B75BDE8F0813B68A5EB6D
|
||||
:101400000C0108EB0C009847ECE7037D002BD8D1CA
|
||||
:10141000036802210F489847012DE3D04FF0010CDB
|
||||
:10142000D3E716F8013C0D2BD8D08C4508EB0C0007
|
||||
:10143000A1EB0C0101DA3B689847022105483B68A3
|
||||
:101440009847A446CAE7294640463B68BDE8F041B4
|
||||
:10145000184700BFF81A00102DE9F04782B00D467A
|
||||
:1014600091461C460646FFF79BFC4FF0FF3C6FF091
|
||||
:1014700000472E4A821841F10003944577EB03019F
|
||||
:101480003CBF62463B462A4800F07AFA6B1C804615
|
||||
:1014900040D00CB3274F284B1C68B4B1B9F1000FF2
|
||||
:1014A0001CD1DFF89C9001E0246974B12368002B03
|
||||
:1014B000FAD0D9F800300BB19C42F5D120462A462B
|
||||
:1014C0003146B8472469002CF0D1B8F1000F26D17D
|
||||
:1014D000284602B0BDE8F087184FDCE74FF00A0A53
|
||||
:1014E000DFF85C9002E02469002CEED02368002B2A
|
||||
:1014F000F9D0D9F800300BB1A342F4D12A463146D5
|
||||
:101500002046B847012220460DF107018DF807A0BB
|
||||
:10151000B847E8E7304600F0FFF90546B9E7044868
|
||||
:1015200000F02AFA284602B0BDE8F08740420F00DA
|
||||
:10153000A4020020A913001084040020A1130010AD
|
||||
:1015400088040020084A136823B90AE003F1100256
|
||||
:101550001B6933B18342F9D129B918691060196147
|
||||
:10156000704701B1106070478404002008B500F096
|
||||
:1015700033F9012008BD00BFF0B583B006468DF8F1
|
||||
:101580000700FFF70DFC4FF0FF356FF00044174ADE
|
||||
:10159000821841F10003954274EB03013CBF2346DE
|
||||
:1015A0002A46134800F0ECF9124B07461C689CB120
|
||||
:1015B000114D01E024697CB12368002BFAD02B681F
|
||||
:1015C0000BB19C42F6D1204601220DF10701FFF735
|
||||
:1015D000EBFE2469002CEFD117B9304603B0F0BD03
|
||||
:1015E000034800F0C9F9304603B0F0BD40420F0097
|
||||
:1015F000A4020020840400208804002038B504469A
|
||||
:1016000000F08AF9012305461A4620462946FFF7CD
|
||||
:1016100023FF084B1C682CB163682BB198472469E1
|
||||
:10162000002CF9D1284638BD2469002CF4D1284675
|
||||
:1016300038BD00BF84040020B1F1000C1DDD0F4A4D
|
||||
:101640000F4B126830B5D31AB3FA83F30D240D4D46
|
||||
:101650005B09411E35F913E08C4411F8010F8645F2
|
||||
:1016600006D093699B06FCD461451060F5D130BD6E
|
||||
:1016700093699D06FCD41460F3E77047D004002002
|
||||
:1016800000800740CC040020224BB1F1000C10B4C4
|
||||
:101690001C682EDD034600201F4A591E12689369FC
|
||||
:1016A000DB0617D401309369DB06FCD4136884454C
|
||||
:1016B00001F8013FF3D14CB150211346916353F827
|
||||
:1016C000342F02F0380203F580531A6060465DF84B
|
||||
:1016D000044B70474CB150211346916353F8342F9B
|
||||
:1016E00002F0380203F580531A6078B15DF8044BBC
|
||||
:1016F00070475CB1084B50211A681346916353F848
|
||||
:10170000342F02F0380203F580531A606FF00200A4
|
||||
:10171000DDE700BF50040020D0040020054B1B680B
|
||||
:1017200033B10021044A05481268006891631847E4
|
||||
:10173000704700BF50040020D00400205404002053
|
||||
:10174000024B1A6893691B07FCD47047D004002031
|
||||
:10175000F8B51C4F1C4D3A681C4EAA4214BF2125F7
|
||||
:1017600022250446D6F800C018B1BCF1000F10D0F5
|
||||
:10177000F8BDBCF1000FFBD0014690632846FEF790
|
||||
:1017800005FE28461249FEF747FE124B34601C60E6
|
||||
:10179000F8BD0B460F4A0E49306028461360FEF72D
|
||||
:1017A0000BFE01212846FEF7F1FD3A685021134651
|
||||
:1017B000916353F8342F02F0380203F580531A6016
|
||||
:1017C000F8BD00BFD0040020008007405004002076
|
||||
:1017D0001D1700105404002010B50E490E4C0F4880
|
||||
:1017E0000F4A104B007821600020022112781B78EC
|
||||
:1017F000FEF72AFD02210120FEF726FD4FF4E1311C
|
||||
:101800002068FFF705FBBDE8104001210648FFF7FF
|
||||
:1018100099BE00BF00000740D0040020481B001004
|
||||
:10182000441B0010401B00108C020020844641EA3B
|
||||
:10183000000313F0030349D1403A23D30B6803603C
|
||||
:101840004B6843608B688360CB68C3600B6903613E
|
||||
:101850004B6943618B698361CB69C3610B6A036226
|
||||
:101860004B6A43628B6A8362CB6AC3620B6B03630E
|
||||
:101870004B6B43638B6B8363CB6BC36340304031F3
|
||||
:10188000403ADBD230320BD30B6803604B684360C5
|
||||
:101890008B688360CB68C36010301031103AF3D28C
|
||||
:1018A0000C3205D351F8043B40F8043B043AF9D21A
|
||||
:1018B000043208D0D2071CBF11F8013B00F8013BED
|
||||
:1018C00001D30B8803806046704700BF082A13D3FA
|
||||
:1018D0008B07B1D010F00303AED0C3F10403D21ACA
|
||||
:1018E000DB071CBF11F8013B00F8013BA4D331F822
|
||||
:1018F000023B20F8023B9FE7043AD9D3013A11F8A2
|
||||
:10190000013B00F8013BF9D20B7803704B78437030
|
||||
:101910008B7883706046704720F0030110F003005D
|
||||
:10192000C0F1000051F8043B00F1040C4FEACC0C6C
|
||||
:101930006FF000021CBF22FA0CF213434FF0010CAF
|
||||
:101940004CEA0C2C4CEA0C4CA3EB0C0222EA0302EE
|
||||
:1019500012EACC1204BF51F8043B0430F4D0C2F1B7
|
||||
:10196000000102EA0102B2FA82F2C2F11F0200EBA8
|
||||
:10197000D2007047F8B500BF5FF800F0E501002025
|
||||
:101980005FF800F07D010020C91100103D1100102A
|
||||
:10199000711100105D120010A9110010C11000108B
|
||||
:1019A000F1110010AD100010D5060010F511001057
|
||||
:1019B000510A00100D110010DD1100108D110010E2
|
||||
:0C19C000250300104D0300101102001060
|
||||
:1019CC0068656C6C6F2C20776F726C640D00000076
|
||||
:1019DC000A2A2A2A2050414E4943202A2A2A0A0040
|
||||
:1019EC000A000000486172647761726520616C6165
|
||||
:1019FC00726D20256420616C726561647920636C62
|
||||
:101A0C0061696D65640000004861726420617373E4
|
||||
:101A1C006572740052656C6561736500626F6F74FA
|
||||
:101A2C00325F77323571303830000000302E3100A3
|
||||
:101A3C00322E322E300000007069636F32000000CD
|
||||
:101A4C003078303030315F68656C6C6F2D776F7229
|
||||
:101A5C006C6400004F637420313720323032360012
|
||||
:101A6C005541525420737464696E000055415254B0
|
||||
:101A7C00207374646F7574005541525420737464F0
|
||||
:101A8C00696E202F207374646F75740006005250B9
|
||||
:101A9C00D3F07542201A001006005250E182887F64
|
||||
:101AAC00281A0010060052503ABCA911381A00101E
|
||||
:101ABC0006005250ABB360533C1A00100600525053
|
||||
:101ACC00BBFF3CB6441A001006005250861C0302A1
|
||||
:101ADC004C1A0010060052505422A29D601A00109D
|
||||
:101AEC0005005250DE65F468FC1C00100D0A000065
|
||||
:101AFC000600525053B4F4A1841A0010080052503E
|
||||
:0C1B0C001200000008005250921000006F
|
||||
:081B180014FDFF7F0100000035
|
||||
:101B2000981A0010A41A0010B01A0010BC1A001065
|
||||
:101B3000C81A0010D41A0010E01A0010EC1A001095
|
||||
:0C1B4000101B0010081B0010FC1A001005
|
||||
:101B4C004FF050412DE9F0410027044616461D4642
|
||||
:101B5C00D1F8008008E0C1E88F7F8CF31088304604
|
||||
:101B6C00294600F075F8E8B92168EFF3108C72B6CD
|
||||
:101B7C00D1E8CF2F0123002AFAD1C1E8423F002A35
|
||||
:101B8C00F6D1BFF35F8F94F904302168002BE2DAB1
|
||||
:101B9C00002384F80480C1E88F3F8CF31088012067
|
||||
:101BAC00BDE8F0810020BDE8F08100BF30B50468CD
|
||||
:101BBC00EFF3108C72B6D4E8CFEF0125BEF1000F15
|
||||
:101BCC00F9D1C4E84E5FBEF1000FF4D1BFF35F8FC3
|
||||
:101BDC0090F904400568002C10DB0021C5E88F1F2C
|
||||
:101BEC008CF310884FF0504595F90050A54201D167
|
||||
:101BFC00084630BDBDE83040FFF7A2BF4FF0504261
|
||||
:101C0C00126800230271C5E88F3F8CF31088012005
|
||||
:101C1C0030BD00BF0368EFF3108272B6D3E8CFCFAC
|
||||
:101C2C000121BCF1000FF9D1C3E84C1FBCF1000F2E
|
||||
:101C3C00F4D1BFF35F8F4FF0FF0C0023016880F8E5
|
||||
:101C4C0004C0C1E88F3F82F3108840BF704700BFCB
|
||||
:101C5C005FF800F0990C001010000000000000006C
|
||||
:101C6C000000010000000000000000000000020065
|
||||
:101C7C000000000000000000000003000000000055
|
||||
:101C8C00000000000000FF000000000001B54868E3
|
||||
:101C9C0001318E460047704609380149884701BD1D
|
||||
:101CAC000D06001000000000000000000000000005
|
||||
:101CBC000000000000000000B002002039160010E7
|
||||
:101CCC004117001089160010511700100000000079
|
||||
:0C1CDC00000100000000000000000000FB
|
||||
:101CE800D3DEFFFFFE010000FF01000050E4FFFF0C
|
||||
:041CF800793512AB7D
|
||||
:040000051000014D99
|
||||
:00000001FF
|
||||
Binary file not shown.
@@ -0,0 +1 @@
|
||||
FLASH(rx) : ORIGIN = 0x10000000, LENGTH = (4 * 1024 * 1024)
|
||||
@@ -0,0 +1,121 @@
|
||||
# This is a copy of <PICO_SDK_PATH>/external/pico_sdk_import.cmake
|
||||
|
||||
# This can be dropped into an external project to help locate this SDK
|
||||
# It should be include()ed prior to project()
|
||||
|
||||
# Copyright 2020 (c) 2020 Raspberry Pi (Trading) Ltd.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
||||
# following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
|
||||
# disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
|
||||
# disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH))
|
||||
set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})
|
||||
message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')")
|
||||
endif ()
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT))
|
||||
set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT})
|
||||
message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')")
|
||||
endif ()
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH))
|
||||
set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH})
|
||||
message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')")
|
||||
endif ()
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_TAG} AND (NOT PICO_SDK_FETCH_FROM_GIT_TAG))
|
||||
set(PICO_SDK_FETCH_FROM_GIT_TAG $ENV{PICO_SDK_FETCH_FROM_GIT_TAG})
|
||||
message("Using PICO_SDK_FETCH_FROM_GIT_TAG from environment ('${PICO_SDK_FETCH_FROM_GIT_TAG}')")
|
||||
endif ()
|
||||
|
||||
if (PICO_SDK_FETCH_FROM_GIT AND NOT PICO_SDK_FETCH_FROM_GIT_TAG)
|
||||
set(PICO_SDK_FETCH_FROM_GIT_TAG "master")
|
||||
message("Using master as default value for PICO_SDK_FETCH_FROM_GIT_TAG")
|
||||
endif()
|
||||
|
||||
set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK")
|
||||
set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable")
|
||||
set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK")
|
||||
set(PICO_SDK_FETCH_FROM_GIT_TAG "${PICO_SDK_FETCH_FROM_GIT_TAG}" CACHE FILEPATH "release tag for SDK")
|
||||
|
||||
if (NOT PICO_SDK_PATH)
|
||||
if (PICO_SDK_FETCH_FROM_GIT)
|
||||
include(FetchContent)
|
||||
set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR})
|
||||
if (PICO_SDK_FETCH_FROM_GIT_PATH)
|
||||
get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
|
||||
endif ()
|
||||
FetchContent_Declare(
|
||||
pico_sdk
|
||||
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
|
||||
GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG}
|
||||
)
|
||||
|
||||
if (NOT pico_sdk)
|
||||
message("Downloading Raspberry Pi Pico SDK")
|
||||
# GIT_SUBMODULES_RECURSE was added in 3.17
|
||||
if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.17.0")
|
||||
FetchContent_Populate(
|
||||
pico_sdk
|
||||
QUIET
|
||||
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
|
||||
GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG}
|
||||
GIT_SUBMODULES_RECURSE FALSE
|
||||
|
||||
SOURCE_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-src
|
||||
BINARY_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-build
|
||||
SUBBUILD_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-subbuild
|
||||
)
|
||||
else ()
|
||||
FetchContent_Populate(
|
||||
pico_sdk
|
||||
QUIET
|
||||
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
|
||||
GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG}
|
||||
|
||||
SOURCE_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-src
|
||||
BINARY_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-build
|
||||
SUBBUILD_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-subbuild
|
||||
)
|
||||
endif ()
|
||||
|
||||
set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR})
|
||||
endif ()
|
||||
set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE})
|
||||
else ()
|
||||
message(FATAL_ERROR
|
||||
"SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git."
|
||||
)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
|
||||
if (NOT EXISTS ${PICO_SDK_PATH})
|
||||
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found")
|
||||
endif ()
|
||||
|
||||
set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake)
|
||||
if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE})
|
||||
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK")
|
||||
endif ()
|
||||
|
||||
set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)
|
||||
|
||||
include(${PICO_SDK_INIT_CMAKE_FILE})
|
||||
@@ -0,0 +1,9 @@
|
||||
build/CMakeFiles/
|
||||
build/pico_sdk/
|
||||
build/pico-sdk/
|
||||
build/generated/
|
||||
build/_deps/
|
||||
build/*.o
|
||||
build/*.d
|
||||
build/*.obj
|
||||
!.vscode/*
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Pico",
|
||||
"includePath": [
|
||||
"${workspaceFolder}/**",
|
||||
"${userHome}/.pico-sdk/sdk/2.3.1/**"
|
||||
],
|
||||
"forcedInclude": [
|
||||
"${workspaceFolder}/build/generated/pico_base/pico/config_autogen.h",
|
||||
"${userHome}/.pico-sdk/sdk/2.3.1/src/common/pico_base_headers/include/pico.h"
|
||||
],
|
||||
"defines": [],
|
||||
"compilerPath": "${userHome}/.pico-sdk/toolchain/15_2_Rel1/bin/arm-none-eabi-gcc.exe",
|
||||
"compileCommands": "${workspaceFolder}/build/compile_commands.json",
|
||||
"cStandard": "c17",
|
||||
"cppStandard": "c++14",
|
||||
"intelliSenseMode": "linux-gcc-arm"
|
||||
}
|
||||
],
|
||||
"version": 4
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
[
|
||||
{
|
||||
"name": "Pico",
|
||||
"compilers": {
|
||||
"C": "${command:raspberry-pi-pico.getCompilerPath}",
|
||||
"CXX": "${command:raspberry-pi-pico.getCxxCompilerPath}"
|
||||
},
|
||||
"environmentVariables": {
|
||||
"PATH": "${command:raspberry-pi-pico.getEnvPath};${env:PATH}"
|
||||
},
|
||||
"cmakeSettings": {
|
||||
"Python3_EXECUTABLE": "${command:raspberry-pi-pico.getPythonPath}"
|
||||
}
|
||||
}
|
||||
]
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"marus25.cortex-debug",
|
||||
"ms-vscode.cpptools",
|
||||
"ms-vscode.cpptools-extension-pack",
|
||||
"ms-vscode.vscode-serial-monitor",
|
||||
"raspberry-pi.raspberry-pi-pico"
|
||||
]
|
||||
}
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Pico Debug (Cortex-Debug)",
|
||||
"cwd": "${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"executable": "${command:raspberry-pi-pico.launchTargetPath}",
|
||||
"request": "launch",
|
||||
"type": "cortex-debug",
|
||||
"servertype": "openocd",
|
||||
"serverpath": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"gdbPath": "${command:raspberry-pi-pico.getGDBPath}",
|
||||
"debuggerArgs": ["-ex", "set debug-file-directory /debug"],
|
||||
"device": "${command:raspberry-pi-pico.getChipUppercase}",
|
||||
"configFiles": [
|
||||
"interface/cmsis-dap.cfg",
|
||||
"target/${command:raspberry-pi-pico.getTarget}.cfg"
|
||||
],
|
||||
"svdFile": "${userHome}/.pico-sdk/sdk/2.3.1/src/${command:raspberry-pi-pico.getChip}/hardware_regs/${command:raspberry-pi-pico.getChipUppercase}.svd",
|
||||
"runToEntryPoint": "main",
|
||||
// Fix for no_flash binaries, where monitor reset halt doesn't do what is expected
|
||||
// Also works fine for flash binaries
|
||||
"overrideLaunchCommands": [
|
||||
"monitor reset init",
|
||||
"load \"${command:raspberry-pi-pico.launchTargetPath}\""
|
||||
],
|
||||
"openOCDLaunchCommands": [
|
||||
"adapter speed 5000"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Pico Debug (Cortex-Debug with external OpenOCD)",
|
||||
"cwd": "${workspaceRoot}",
|
||||
"executable": "${command:raspberry-pi-pico.launchTargetPath}",
|
||||
"request": "launch",
|
||||
"type": "cortex-debug",
|
||||
"servertype": "external",
|
||||
"gdbTarget": "localhost:3333",
|
||||
"gdbPath": "${command:raspberry-pi-pico.getGDBPath}",
|
||||
"debuggerArgs": ["-ex", "set debug-file-directory /debug"],
|
||||
"device": "${command:raspberry-pi-pico.getChipUppercase}",
|
||||
"svdFile": "${userHome}/.pico-sdk/sdk/2.3.1/src/${command:raspberry-pi-pico.getChip}/hardware_regs/${command:raspberry-pi-pico.getChipUppercase}.svd",
|
||||
"runToEntryPoint": "main",
|
||||
// Fix for no_flash binaries, where monitor reset halt doesn't do what is expected
|
||||
// Also works fine for flash binaries
|
||||
"overrideLaunchCommands": [
|
||||
"monitor reset init",
|
||||
"load \"${command:raspberry-pi-pico.launchTargetPath}\""
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"cmake.showSystemKits": false,
|
||||
"cmake.options.statusBarVisibility": "hidden",
|
||||
"cmake.options.advanced": {
|
||||
"build": {
|
||||
"statusBarVisibility": "hidden"
|
||||
},
|
||||
"launch": {
|
||||
"statusBarVisibility": "hidden"
|
||||
},
|
||||
"debug": {
|
||||
"statusBarVisibility": "hidden"
|
||||
},
|
||||
"variant": {
|
||||
"statusBarVisibility": "hidden"
|
||||
},
|
||||
"buildTarget": {
|
||||
"statusBarVisibility": "hidden"
|
||||
}
|
||||
},
|
||||
"cmake.configureOnEdit": false,
|
||||
"cmake.automaticReconfigure": false,
|
||||
"cmake.configureOnOpen": false,
|
||||
"cmake.generator": "Ninja",
|
||||
"cmake.cmakePath": "${userHome}/.pico-sdk/cmake/v4.3.4/bin/cmake",
|
||||
"C_Cpp.debugShortcut": false,
|
||||
"terminal.integrated.env.windows": {
|
||||
"PICO_SDK_PATH": "${env:USERPROFILE}/.pico-sdk/sdk/2.3.1",
|
||||
"PICO_TOOLCHAIN_PATH": "${env:USERPROFILE}/.pico-sdk/toolchain/15_2_Rel1",
|
||||
"Path": "${env:USERPROFILE}/.pico-sdk/toolchain/15_2_Rel1/bin;${env:USERPROFILE}/.pico-sdk/picotool/2.3.1/picotool;${env:USERPROFILE}/.pico-sdk/cmake/v4.3.4/bin;${env:USERPROFILE}/.pico-sdk/ninja/v1.13.2;${env:PATH}"
|
||||
},
|
||||
"terminal.integrated.env.osx": {
|
||||
"PICO_SDK_PATH": "${env:HOME}/.pico-sdk/sdk/2.3.1",
|
||||
"PICO_TOOLCHAIN_PATH": "${env:HOME}/.pico-sdk/toolchain/15_2_Rel1",
|
||||
"PATH": "${env:HOME}/.pico-sdk/toolchain/15_2_Rel1/bin:${env:HOME}/.pico-sdk/picotool/2.3.1/picotool:${env:HOME}/.pico-sdk/cmake/v4.3.4/bin:${env:HOME}/.pico-sdk/ninja/v1.13.2:${env:PATH}"
|
||||
},
|
||||
"terminal.integrated.env.linux": {
|
||||
"PICO_SDK_PATH": "${env:HOME}/.pico-sdk/sdk/2.3.1",
|
||||
"PICO_TOOLCHAIN_PATH": "${env:HOME}/.pico-sdk/toolchain/15_2_Rel1",
|
||||
"PATH": "${env:HOME}/.pico-sdk/toolchain/15_2_Rel1/bin:${env:HOME}/.pico-sdk/picotool/2.3.1/picotool:${env:HOME}/.pico-sdk/cmake/v4.3.4/bin:${env:HOME}/.pico-sdk/ninja/v1.13.2:${env:PATH}"
|
||||
},
|
||||
"raspberry-pi-pico.cmakeAutoConfigure": true,
|
||||
"raspberry-pi-pico.useCmakeTools": false,
|
||||
"raspberry-pi-pico.cmakePath": "${HOME}/.pico-sdk/cmake/v4.3.4/bin/cmake",
|
||||
"raspberry-pi-pico.ninjaPath": "${HOME}/.pico-sdk/ninja/v1.13.2/ninja"
|
||||
}
|
||||
+102
@@ -0,0 +1,102 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Compile Project",
|
||||
"type": "process",
|
||||
"isBuildCommand": true,
|
||||
"command": "${userHome}/.pico-sdk/ninja/v1.13.2/ninja",
|
||||
"args": ["-C", "${workspaceFolder}/build"],
|
||||
"group": "build",
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"panel": "dedicated"
|
||||
},
|
||||
"problemMatcher": "$gcc",
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/ninja/v1.13.2/ninja.exe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Run Project",
|
||||
"type": "process",
|
||||
"command": "${env:HOME}/.pico-sdk/picotool/2.3.1/picotool/picotool",
|
||||
"args": [
|
||||
"load",
|
||||
"${command:raspberry-pi-pico.launchTargetPath}",
|
||||
"-fx"
|
||||
],
|
||||
"presentation": {
|
||||
"reveal": "always",
|
||||
"panel": "dedicated"
|
||||
},
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/picotool/2.3.1/picotool/picotool.exe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Flash",
|
||||
"type": "process",
|
||||
"command": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"args": [
|
||||
"-s",
|
||||
"${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"-f",
|
||||
"interface/cmsis-dap.cfg",
|
||||
"-f",
|
||||
"target/${command:raspberry-pi-pico.getTarget}.cfg",
|
||||
"-c",
|
||||
"adapter speed 5000; program \"${command:raspberry-pi-pico.launchTargetPath}\" verify reset exit"
|
||||
],
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/openocd/0.12.0+dev/openocd.exe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Rescue Reset",
|
||||
"type": "process",
|
||||
"command": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"args": [
|
||||
"-s",
|
||||
"${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"-f",
|
||||
"interface/cmsis-dap.cfg",
|
||||
"-f",
|
||||
"target/${command:raspberry-pi-pico.getChip}-rescue.cfg",
|
||||
"-c",
|
||||
"adapter speed 5000; reset halt; exit"
|
||||
],
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/openocd/0.12.0+dev/openocd.exe"
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "RISC-V Reset (RP2350)",
|
||||
"type": "process",
|
||||
"command": "${userHome}/.pico-sdk/openocd/0.12.0+dev/openocd.exe",
|
||||
"args": [
|
||||
"-s",
|
||||
"${userHome}/.pico-sdk/openocd/0.12.0+dev/scripts",
|
||||
"-c",
|
||||
"set USE_CORE { rv0 rv1 cm0 cm1 }",
|
||||
"-f",
|
||||
"interface/cmsis-dap.cfg",
|
||||
"-f",
|
||||
"target/rp2350.cfg",
|
||||
"-c",
|
||||
"adapter speed 5000; init;",
|
||||
"-c",
|
||||
"write_memory 0x40120158 8 { 0x3 }; echo [format \"Info : ARCHSEL 0x%02x\" [read_memory 0x40120158 8 1]];",
|
||||
"-c",
|
||||
"reset halt; targets rp2350.rv0; echo [format \"Info : ARCHSEL_STATUS 0x%02x\" [read_memory 0x4012015C 8 1]]; exit"
|
||||
],
|
||||
"problemMatcher": [],
|
||||
"windows": {
|
||||
"command": "${env:USERPROFILE}/.pico-sdk/openocd/0.12.0+dev/openocd.exe"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
# MIT License
|
||||
#
|
||||
# Copyright (c) 2026 Kevin Thomas
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
#
|
||||
# Author: Kevin Thomas
|
||||
# Email: kevin@mytechnotalent.com
|
||||
# GitHub: https://github.com/mytechnotalent
|
||||
# File: CMakeLists.txt
|
||||
# Desc: Configures the RP2350 Pico SDK project for the Operation Black Start
|
||||
# CTF relay firmware.
|
||||
# Created: 2026
|
||||
|
||||
cmake_minimum_required(VERSION 3.13)
|
||||
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
# Initialise pico_sdk from installed location
|
||||
# (note this can come from environment, CMake cache etc)
|
||||
|
||||
# == DO NOT EDIT THE FOLLOWING LINES for the Raspberry Pi Pico VS Code Extension to work ==
|
||||
if(WIN32)
|
||||
set(USERHOME $ENV{USERPROFILE})
|
||||
else()
|
||||
set(USERHOME $ENV{HOME})
|
||||
endif()
|
||||
set(sdkVersion 2.3.1)
|
||||
set(toolchainVersion 15_2_Rel1)
|
||||
set(picotoolVersion 2.3.1)
|
||||
set(picoVscode ${USERHOME}/.pico-sdk/cmake/pico-vscode.cmake)
|
||||
if (EXISTS ${picoVscode})
|
||||
include(${picoVscode})
|
||||
endif()
|
||||
# ====================================================================================
|
||||
set(PICO_BOARD pico2 CACHE STRING "Board type")
|
||||
|
||||
# Pull in Raspberry Pi Pico SDK (must be before project)
|
||||
include(pico_sdk_import.cmake)
|
||||
|
||||
project(0x0001b_ctf C CXX ASM)
|
||||
|
||||
# Initialise the Raspberry Pi Pico SDK
|
||||
pico_sdk_init()
|
||||
|
||||
# Add executable with modular sources in src/
|
||||
add_executable(0x0001b_ctf
|
||||
src/main.c
|
||||
src/grid.c
|
||||
src/console.c
|
||||
)
|
||||
|
||||
pico_set_program_name(0x0001b_ctf "0x0001b_ctf")
|
||||
pico_set_program_version(0x0001b_ctf "0.1")
|
||||
|
||||
# Modify the below lines to enable/disable output over UART/USB
|
||||
pico_enable_stdio_uart(0x0001b_ctf 1)
|
||||
pico_enable_stdio_usb(0x0001b_ctf 0)
|
||||
target_compile_definitions(0x0001b_ctf PRIVATE
|
||||
PICO_DEFAULT_UART_BAUD_RATE=115200
|
||||
)
|
||||
|
||||
# Add the standard library to the build
|
||||
target_link_libraries(0x0001b_ctf
|
||||
pico_stdlib
|
||||
)
|
||||
|
||||
# Add the standard include files to the build
|
||||
target_include_directories(0x0001b_ctf PRIVATE
|
||||
${CMAKE_CURRENT_LIST_DIR}/include
|
||||
)
|
||||
|
||||
pico_add_extra_outputs(0x0001b_ctf)
|
||||
@@ -0,0 +1,442 @@
|
||||
# Operation Black Start - Student Instructions
|
||||
|
||||
**⚠ WORLDGRID EMERGENCY INCIDENT ⚠**
|
||||
|
||||
```
|
||||
+----------------------------------------------------------------------------------------+
|
||||
| |
|
||||
| ██████╗ ██╗ █████╗ ██████╗██╗ ██╗███████╗████████╗ █████╗ ██████╗ ████████╗ |
|
||||
| ██╔══██╗██║ ██╔══██╗██╔════╝██║ ██╔╝██╔════╝╚══██╔══╝██╔══██╗██╔══██╗╚══██╔══╝ |
|
||||
| ██████╔╝██║ ███████║██║ █████╔╝ ███████╗ ██║ ███████║██████╔╝ ██║ |
|
||||
| ██╔══██╗██║ ██╔══██║██║ ██╔═██╗ ╚════██║ ██║ ██╔══██║██╔══██╗ ██║ |
|
||||
| ██████╔╝███████╗██║ ██║╚██████╗██║ ██╗███████╗ ██║ ██║ ██║██║ ██║ ██║ |
|
||||
| ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═════╝██║ ██║╚══════╝ ╚═╝ ╚═╝ ╚═╝██║ ██║ ██║ |
|
||||
| |
|
||||
| |
|
||||
| O P E R A T I O N B L A C K S T A R T |
|
||||
| |
|
||||
| *** PRIORITY RED *** |
|
||||
| |
|
||||
+----------------------------------------------------------------------------------------+
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Project Overview
|
||||
|
||||
WorldGrid Compact's emergency firmware build for its GRID-7 relay fleet
|
||||
shipped a miscompiled safety threshold and a hardcoded false status string,
|
||||
so deployed relays report a false-safe "STABLE" status while the frozen
|
||||
frequency deviation reading of 0.87 Hz is nearly 50% beyond the 0.60 Hz
|
||||
engineering limit. The source was overwritten by the next build and cannot
|
||||
be recovered, so the only surviving evidence is the exact miscompiled
|
||||
training image. Students reverse engineer `CTF-01.bin` with Ghidra, locate
|
||||
and patch both defects directly in the binary, export a corrected image,
|
||||
flash it to a Pico 2, and prove the corrected behavior with GDB and a UART
|
||||
console.
|
||||
|
||||
---
|
||||
|
||||
## Scenario Briefing
|
||||
|
||||
### Background
|
||||
|
||||
**WorldGrid Compact** is the emergency interconnection standard shared by
|
||||
three allied national grid operators. When any member's primary SCADA
|
||||
network goes dark, a fleet of small embedded relay nodes - call sign
|
||||
**GRID-7** - is the only thing standing between an orderly recovery and an
|
||||
uncontrolled cascade. Each relay node watches the last known grid frequency
|
||||
deviation, decides whether conditions are safe, and either **holds** the
|
||||
automatic black-start dispatch or **authorizes** it.
|
||||
|
||||
At 03:11 UTC, a coordinated cyberattack severed the primary SCADA uplink
|
||||
across the GRID-7 corridor and the WATER-3 aqueduct pumping stations that
|
||||
depend on it. With the network coordination center offline and three
|
||||
continents' worth of hospitals, rail systems, and water treatment plants
|
||||
running on backup power, WorldGrid's engineering team did the only thing
|
||||
they could: they rushed an emergency firmware build for the relay fleet and
|
||||
pushed it within **eleven minutes** of the attack being detected.
|
||||
|
||||
### The Disaster
|
||||
|
||||
The engineer who built that emergency image, **Dr. Elias Renner**, has not
|
||||
slept in thirty-one hours. He compiled the fix, ran a five-second bench
|
||||
test, and shipped it - because the alternative was leaving the relay fleet
|
||||
completely blind. It appears to work. The relay boots. It prints a status
|
||||
report. It reports **GRID STATUS: STABLE** and **DISPATCH PATH:
|
||||
AUTHORIZED**.
|
||||
|
||||
There is a problem: the frozen frequency reading latched at the moment
|
||||
communications were cut shows a deviation of **0.87 Hz** - nearly *50%
|
||||
beyond* WorldGrid's hard engineering limit of **0.60 Hz**. A deviation this
|
||||
large, if trusted, means the grid is nowhere near stable enough for an
|
||||
automatic black-start dispatch. If the fleet authorizes dispatch on a false
|
||||
"STABLE" reading, cascading generator trips will follow within minutes,
|
||||
and GRID-7 and WATER-3 will go dark for the second time - this time with no
|
||||
backup plan.
|
||||
|
||||
**Dr. Renner's rushed build has a bug. Multiple relay nodes are already
|
||||
reporting the same false-safe status. Nobody has found where in the
|
||||
compiled firmware the error lives, because the source code used for that
|
||||
emergency compile was overwritten by the next build fifteen minutes later
|
||||
and cannot be recovered.**
|
||||
|
||||
### The Only Surviving Evidence
|
||||
|
||||
One relay node - the training/verification unit - still holds the exact
|
||||
miscompiled image that shipped to the fleet. This binary, and this binary
|
||||
alone, is the only remaining copy of the emergency build. There is no
|
||||
source code. There is no build log. There is only the compiled image, a
|
||||
UART cable, and whatever a skilled embedded reverse engineer can prove by
|
||||
reading machine code.
|
||||
|
||||
### The Human Stakes
|
||||
|
||||
| Consequence if the false "STABLE" reading is trusted | Scale |
|
||||
|---|---|
|
||||
| Hospitals on generator backup past their fuel reserve | 214 facilities |
|
||||
| Water treatment and pumping stations losing pressure | 3 aqueduct systems |
|
||||
| Rail corridors stranded mid-route | 6 national rail networks |
|
||||
| Estimated population affected by cascading failure | 40+ million people |
|
||||
|
||||
**The options are:**
|
||||
|
||||
1. ❌ **Trust the fleet's reported status** - dispatch fires on a false
|
||||
reading, cascading failure follows within the hour.
|
||||
2. ❌ **Shut the entire relay fleet down** - buys time, but leaves 40
|
||||
million people with no automated recovery path at all.
|
||||
3. **REVERSE ENGINEER THE EMERGENCY BUILD** - find the exact
|
||||
miscompiled bytes, patch them, verify the corrected image on real
|
||||
hardware, and hand the fix to the field team so the *rest of the fleet*
|
||||
can be safely repatched before the next attempt.
|
||||
|
||||
### THE SHORTAGE
|
||||
|
||||
For years, the world treated embedded systems as invisible infrastructure.
|
||||
The engineers who could read a vector table, decode a Thumb branch, or
|
||||
patch a miscompiled constant directly in a stripped binary were never
|
||||
numerous enough. Tonight almost all of them are already in the field
|
||||
chasing other failures. **You are the reserve team.**
|
||||
|
||||
You were called in because you can do something Dr. Renner's exhausted
|
||||
team cannot do right now: read what the processor is actually doing, with
|
||||
no source code, no time for a rewrite, and no room for a guess.
|
||||
|
||||
> **⏰ TIME PRESSURE:** The field team is standing by to push your verified
|
||||
> patch to the rest of the GRID-7 fleet. Every relay node still reporting
|
||||
> a false "STABLE" status is one dispatch cycle away from disaster.
|
||||
|
||||
> **AUTHORIZED LAB ONLY:** This challenge uses a supplied Pico 2 training
|
||||
> relay and its exact miscompiled firmware image. Do not connect this
|
||||
> exercise to a public network, an operational grid, a water utility, or
|
||||
> any device you do not own or have explicit written authorization to test.
|
||||
|
||||
---
|
||||
|
||||
## Learning Objectives
|
||||
|
||||
- Decode the RP2350 / ARM Cortex-M33 vector table and identify the reset
|
||||
handler and initial stack pointer.
|
||||
- Trace the bootrom-to-reset handoff and translate Thumb reset-vector
|
||||
addresses into real function entry points.
|
||||
- Locate a miscompiled boundary comparison and reason about the correct
|
||||
immediate value the compiler should have encoded.
|
||||
- Patch compare instructions and a status string directly in a raw binary
|
||||
with Ghidra.
|
||||
- Recover a hidden quarantined dispatch frame from the compiled image.
|
||||
- Export and UF2-convert a corrected image, then verify the corrected
|
||||
behavior on real hardware with GDB and a UART console.
|
||||
|
||||
---
|
||||
|
||||
## What This Project Tests
|
||||
|
||||
| Week | Concepts Tested |
|
||||
|------|-----------------|
|
||||
| 1 | RP2350 architecture, ARM Cortex-M33 registers, stack, flash/RAM, Thumb assembly, Ghidra static analysis |
|
||||
| 2 | GDB connection, breakpoints, disassembly, register and memory inspection, UART observation |
|
||||
| 3 | Bootrom handoff, vector table, reset handler, startup code, XIP, Thumb-bit addressing |
|
||||
|
||||
---
|
||||
|
||||
## Part 1: Understanding the System
|
||||
|
||||
### GRID-7 Relay Hardware
|
||||
|
||||
| Component | Connection | Purpose |
|
||||
|-----------|------------|---------|
|
||||
| Raspberry Pi Pico 2 | RP2350 | Runs the miscompiled emergency firmware |
|
||||
| UART TX | GPIO 0 | Relay telemetry output |
|
||||
| UART RX | GPIO 1 | Reserved (no command parser is implemented) |
|
||||
| SWD debug interface | Supplied probe | Authorized GDB inspection |
|
||||
|
||||
No LED, relay output, sensor, display, or other peripheral is part of this
|
||||
CTF. Every graded finding lives in flash (`.rodata`/`.text`) or SRAM, and is
|
||||
reachable with only the Weeks 1-3 toolset: Ghidra, GDB, and a UART monitor.
|
||||
|
||||
### UART Configuration
|
||||
|
||||
- Baud: `115200`
|
||||
- Data: `8 bits`
|
||||
- Parity: `none`
|
||||
- Stop: `1`
|
||||
- Logic: `3.3 V`
|
||||
|
||||
### Normal (Intended) Behavior
|
||||
|
||||
The relay should latch the frozen deviation reading, compare it against the
|
||||
**real** WorldGrid safety limit of **60** (0.60 Hz, encoded as an integer
|
||||
`x100`), and report honestly:
|
||||
|
||||
```
|
||||
+-----------------------------------------------------------------+
|
||||
| Intended Relay Behavior |
|
||||
| |
|
||||
| 1. Boot and initialize UART |
|
||||
| 2. Print the boot identity and a signal-quality banner |
|
||||
| 3. Compare the frozen 87 (0.87 Hz) reading against the 60 |
|
||||
| (0.60 Hz) safety limit |
|
||||
| 4. 87 exceeds 60, so the grid is NOT stable |
|
||||
| 5. Report GRID STATUS: CRITICAL and DISPATCH PATH: HELD |
|
||||
| 6. Repeat the report once per second until conditions change |
|
||||
+-----------------------------------------------------------------+
|
||||
```
|
||||
|
||||
### Observed (Buggy) Behavior - What You Will See When You First Flash `CTF-01.uf2`
|
||||
|
||||
```text
|
||||
GLOBAL EMBEDDED RESPONSE NETWORK
|
||||
BLACK START WINDOW: 27 MINUTES
|
||||
UART0 115200 8N1 | AUTHORIZED LAB CONSOLE
|
||||
SIGNAL: NORMAL
|
||||
RESPONSE> GRID STATUS: STABLE
|
||||
DISPATCH PATH: AUTHORIZED
|
||||
LAST FRAME: QUARANTINED
|
||||
RESPONSE>
|
||||
```
|
||||
|
||||
> **Terminal Timing Note:** The first four lines (`GLOBAL EMBEDDED...` through
|
||||
> `SIGNAL: NORMAL`) represent the **initial boot banner**, emitted once during
|
||||
> startup. If your serial terminal (PuTTY) connects after the board has
|
||||
> booted, you will observe the continuous 1-second status stream (`GRID
|
||||
> STATUS...` and `DISPATCH PATH...`). To view the boot banner in your terminal,
|
||||
> reset the Pico (pulse `RUN` to `GND`) while PuTTY is actively connected.
|
||||
|
||||
This is exactly what Dr. Renner's team is seeing on the deployed fleet. It
|
||||
is wrong, and it is wrong in **two independent ways** inside the compiled
|
||||
binary. Do not assume the first readable sentence is the full truth -
|
||||
treat every printed line as evidence to be checked against the machine
|
||||
code, not as a fact on its own.
|
||||
|
||||
---
|
||||
|
||||
## Part 2: The Firmware
|
||||
|
||||
You do not have the source code. It was overwritten fifteen minutes after
|
||||
the emergency build shipped. You have only the compiled image. Your job is
|
||||
to reverse engineer it with Ghidra, locate the defects, and patch the
|
||||
binary directly - exactly the way Dr. Renner's field team will need to
|
||||
patch the rest of the deployed fleet.
|
||||
|
||||
### What The Firmware Does
|
||||
|
||||
1. Initializes UART0 and stdio.
|
||||
2. Reads a frozen grid-frequency-deviation reading that was latched in
|
||||
memory before communications were severed.
|
||||
3. Compares that reading against a compiled-in safety threshold - **twice**,
|
||||
once for each independent status line it reports.
|
||||
4. Prints a boot banner containing an unconditional signal-quality line.
|
||||
5. Enters an infinite loop printing the grid classification and dispatch
|
||||
decision once per second.
|
||||
|
||||
### Bug Summary - What You Are Graded On
|
||||
|
||||
| Bug # | Category | Severity | Description | Hint |
|
||||
|-------|----------|----------|--------------|------|
|
||||
| **Bug #1** | Miscompiled safety constant | **CRITICAL** | The safety threshold used to classify the frozen reading was compiled far too permissive. It is used **twice** - once for the operator-facing status and once for the automated dispatch decision - and **both** copies must be corrected. | The real WorldGrid safety limit is 60 (0.60 Hz). Search for the wrong immediate value used in the comparison. |
|
||||
| **Bug #2** | Hardcoded string literal | **HIGH** | The boot banner unconditionally prints a signal-quality word that does not reflect the actual reading, regardless of what the relay later reports. | The correct word describes the true state of a 0.87 Hz deviation against a 0.60 Hz limit - not "NORMAL". |
|
||||
|
||||
**Important:** The replacement text for Bug #2 **must be the same length**
|
||||
as the original - patching a shorter or longer string will corrupt
|
||||
adjacent flash data.
|
||||
|
||||
### A Third Finding - Not a Bug, a Recovery Task
|
||||
|
||||
Somewhere in this image is the **quarantined black-start authorization
|
||||
frame** - the exact frame the relay is supposed to transmit to the
|
||||
regional dispatcher once a human operator confirms it is safe to proceed.
|
||||
It is never printed by the firmware. Recovering it (without patching
|
||||
anything) is required evidence for your final report.
|
||||
|
||||
---
|
||||
|
||||
## Part 3: Your Assignment
|
||||
|
||||
Whenever a task asks you to **Document** or **answer**, write your answers
|
||||
in a single file named `CTF-01-Answers.md`.
|
||||
|
||||
### Task 1: Setup and Initial Analysis
|
||||
|
||||
1. Create a new Ghidra project named `Black_Start_Investigation`.
|
||||
2. Import `CTF-01.bin`.
|
||||
3. Configure the language as **ARM Cortex 32-bit, little endian**.
|
||||
4. Set the base address to `0x10000000`.
|
||||
5. Run auto-analysis.
|
||||
|
||||
**Document:**
|
||||
- A screenshot of the Ghidra **Import Results** or **Program Information**
|
||||
window showing the project name, processor settings, and base address.
|
||||
- The address of `main()`.
|
||||
- The address of the recurring status loop (the branch target that repeats
|
||||
once per second).
|
||||
- The vector-table base, the initial stack pointer, and the reset-handler
|
||||
pointer as stored (note its Thumb bit) versus the actual instruction
|
||||
address.
|
||||
|
||||
### Task 2: Find and Patch Bug #1 - The Miscalibrated Safety Threshold
|
||||
|
||||
1. Find **both** locations where the frozen reading is compared against
|
||||
the miscompiled safety constant.
|
||||
2. Document the exact address, the original instruction, and the original
|
||||
immediate value at each location.
|
||||
3. Determine the correct immediate value. **Caution:** the compiler may
|
||||
not have encoded the raw threshold you expect - a strict "less than"
|
||||
comparison against an unsigned value is often optimized into a
|
||||
"less-or-equal" comparison against one less than the threshold. Show
|
||||
your reasoning.
|
||||
4. Patch **both** locations in Ghidra using the **Bytes Window** workflow:
|
||||
> **Critical ARM Thumb-2 Patching Note:** In ARM Cortex-M, compare instructions that directly precede conditional execution blocks (`ite hi`) must **not** be patched using the right-click *Patch Instruction* dialog. Ghidra's automatic re-disassembler encounters an internal context conflict with the subsequent `ite hi` instruction, which collapses Thumb decoding and swallows Compare Site B (`0x1000020A`).
|
||||
>
|
||||
> To patch cleanly without breaking downstream disassembly, use the **Bytes Window**:
|
||||
> 1. Ensure the Bytes window is open (**Window** -> **Bytes: CTF-01.bin**).
|
||||
> 2. In the Bytes window toolbar, click the **pencil icon** (**Toggle Edit Mode**).
|
||||
> 3. In the Listing window, click on address `0x100001FC` (Compare Site A) and press **`C`** (**Clear Code Bytes**). The instruction temporarily clears into raw bytes (`5E 2B`).
|
||||
> 4. In the Bytes window, locate offset `100001fc`, click on `5E`, and change it to **`3B`**.
|
||||
> 5. Click back in the Listing window on address `0x100001FC` and press **`D`** (**Disassemble**). The instruction immediately disassembles cleanly as `cmp r3, #0x3b`.
|
||||
> 6. Notice that Compare Site B at `0x1000020A` remains completely intact and visible! Repeat the exact same steps at `0x1000020A`: click `0x1000020A` in the Listing, press **`C`**, change `5E` to **`3B`** in the Bytes window, click back in the Listing, and press **`D`**.
|
||||
|
||||
**Questions to answer:**
|
||||
- Why must both locations be patched? What happens if you only patch one?
|
||||
- Why is a false "STABLE" classification on an 0.87 Hz reading dangerous
|
||||
for an automated black-start dispatch?
|
||||
|
||||
### Task 3: Find and Patch Bug #2 - The False Signal Banner
|
||||
|
||||
1. Find the boot-banner string that unconditionally reports the wrong
|
||||
signal quality.
|
||||
2. Document its address and the exact bytes that must change.
|
||||
3. Patch the string, preserving its exact length.
|
||||
|
||||
**Questions to answer:**
|
||||
- Document the original vs. patched bytes, character by character.
|
||||
- Why is a hardcoded, unconditional status word more dangerous than one
|
||||
that is at least computed from a (miscalibrated) reading?
|
||||
|
||||
### Task 4: Recover the Quarantined Dispatch Frame
|
||||
|
||||
1. Use Ghidra's Defined Strings (or a raw string search) to locate the
|
||||
hidden black-start authorization frame.
|
||||
2. Document its address and explain why it is never transmitted by the
|
||||
current firmware.
|
||||
3. Do **not** attempt to patch this value - it is evidence, not a bug.
|
||||
|
||||
### Task 5: Export and Verify
|
||||
|
||||
1. Export your patched binary as `CTF-01_fixed.bin`.
|
||||
2. Convert it to UF2 format for the RP2350:
|
||||
```bash
|
||||
python uf2conv.py CTF-01_fixed.bin --base 0x10000000 --family 0xe48bff59 --output CTF-01_fixed.uf2
|
||||
```
|
||||
3. Flash `CTF-01_fixed.uf2` to your Pico 2 and capture the corrected UART
|
||||
output.
|
||||
4. Confirm that the corrected image now reports **GRID STATUS: CRITICAL**,
|
||||
**DISPATCH PATH: HELD**, and the corrected signal-quality word - an
|
||||
honest, safe report instead of a false "all clear."
|
||||
5. Build a summary table of every patch: address, original bytes, patched
|
||||
bytes, and a one-line description.
|
||||
|
||||
### Task 6: Written Reflection (short answers, 150 words or less each)
|
||||
|
||||
1. Why is "the build was rushed under emergency pressure" not an
|
||||
acceptable excuse for shipping a firmware defect that could trigger a
|
||||
cascading grid failure?
|
||||
2. Name one concrete engineering practice (code review, static analysis,
|
||||
hardware-in-the-loop test, etc.) that would have caught **each** of the
|
||||
two graded bugs before this image ever reached the fleet.
|
||||
|
||||
---
|
||||
|
||||
## How To Breadboard
|
||||
|
||||
- Pico 2 **GPIO 0 / UART TX** -> USB-UART adapter **RX**
|
||||
- Pico 2 **GPIO 1 / UART RX** -> USB-UART adapter **TX**
|
||||
- Pico 2 **GND** -> USB-UART adapter **GND**
|
||||
- Use **3.3 V logic only**. Never connect a 5 V line to a Pico GPIO.
|
||||
- Connect the supplied SWD probe according to its documented pinout.
|
||||
|
||||
The supplied image is `CTF-01.bin` (for Ghidra analysis) and `CTF-01.uf2`
|
||||
(for flashing). If your instructor supplies different filenames, record the
|
||||
actual filenames in your report.
|
||||
|
||||
---
|
||||
|
||||
## Memory Map Reference
|
||||
|
||||
| Region | Address | Purpose |
|
||||
|--------|---------|---------|
|
||||
| Bootrom | `0x00000000` | Immutable boot code |
|
||||
| Flash/XIP | `0x10000000` | Vector table, code, constants, strings |
|
||||
| SRAM | `0x20000000` | Stack and writable state |
|
||||
|
||||
---
|
||||
|
||||
## Submission Format
|
||||
|
||||
Submit a folder containing:
|
||||
|
||||
- `CTF-01-Answers.md`;
|
||||
- screenshots or terminal transcripts;
|
||||
- `CTF-01_fixed.bin` and `CTF-01_fixed.uf2`;
|
||||
- the original image hash.
|
||||
|
||||
---
|
||||
|
||||
## Success Criteria
|
||||
|
||||
You complete the challenge when you can prove all of the following:
|
||||
|
||||
- You can explain how the RP2350 reaches the relay's code from reset.
|
||||
- You can locate and patch both copies of the miscalibrated threshold.
|
||||
- You can locate and patch the false signal-quality string without
|
||||
corrupting adjacent data.
|
||||
- You can export, convert, and flash a corrected image.
|
||||
- You can prove on real hardware that the corrected image reports the
|
||||
true, dangerous state instead of the false "all clear."
|
||||
- You can recover the quarantined dispatch frame as evidence.
|
||||
|
||||
---
|
||||
|
||||
## Academic Integrity
|
||||
|
||||
By submitting this CTF work, you certify that:
|
||||
|
||||
1. You used only the supplied training relay, image, and lab interface.
|
||||
2. You did not connect the challenge to a public network, an operational
|
||||
grid, a water utility, or any third-party device.
|
||||
3. You understand that embedded reverse engineering and binary patching
|
||||
require explicit authorization in any real-world context.
|
||||
4. You will report any discovered weakness responsibly to the course
|
||||
instructor.
|
||||
|
||||
The world is short on people who can do this work. Treat that
|
||||
responsibility seriously: verify before you patch, patch before you trust,
|
||||
and never confuse a clean-looking status line with a safe system.
|
||||
|
||||
---
|
||||
|
||||
## Reference Material
|
||||
|
||||
- ARM Cortex-M33 Technical Reference Manual
|
||||
- RP2350 datasheet
|
||||
- GDB documentation
|
||||
- Ghidra documentation: [https://ghidra-sre.org/](https://ghidra-sre.org/)
|
||||
Binary file not shown.
@@ -0,0 +1,237 @@
|
||||
# Operation Black Start - Requirements & Grading Criteria
|
||||
|
||||
```
|
||||
+----------------------------------------------------------------------------------------+
|
||||
| |
|
||||
| ██████╗ ██╗ █████╗ ██████╗██╗ ██╗███████╗████████╗ █████╗ ██████╗ ████████╗ |
|
||||
| ██╔══██╗██║ ██╔══██╗██╔════╝██║ ██╔╝██╔════╝╚══██╔══╝██╔══██╗██╔══██╗╚══██╔══╝ |
|
||||
| ██████╔╝██║ ███████║██║ █████╔╝ ███████╗ ██║ ███████║██████╔╝ ██║ |
|
||||
| ██╔══██╗██║ ██╔══██║██║ ██╔═██╗ ╚════██║ ██║ ██╔══██║██╔══██╗ ██║ |
|
||||
| ██████╔╝███████╗██║ ██║╚██████╗██║ ██╗███████╗ ██║ ██║ ██║██║ ██║ ██║ |
|
||||
| ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═════╝██║ ██║╚══════╝ ╚═╝ ╚═╝ ╚═╝██║ ██║ ██║ |
|
||||
| |
|
||||
| |
|
||||
| O P E R A T I O N B L A C K S T A R T |
|
||||
| |
|
||||
| REQUIREMENTS & GRADING CRITERIA |
|
||||
| |
|
||||
+----------------------------------------------------------------------------------------+
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Project Overview
|
||||
|
||||
Students are the reverse-engineering reserve team called in after WorldGrid
|
||||
Compact's emergency firmware build shipped a miscompiled safety threshold and
|
||||
a false status string to its GRID-7 relay fleet. Students reverse engineer
|
||||
`CTF-01.bin` with Ghidra, locate two real defects, patch them in the binary,
|
||||
export a corrected image, flash it to real hardware, and prove the corrected
|
||||
behavior with the debugger and the console.
|
||||
|
||||
The challenge is separate from all FINAL projects and contains no FINAL-project
|
||||
answer, constant, address, bug, or patch.
|
||||
|
||||
---
|
||||
|
||||
## Learning Objectives
|
||||
|
||||
- Decode an ARM Cortex-M33 vector table and identify the reset handler and
|
||||
initial stack pointer.
|
||||
- Translate Thumb reset-vector addresses into real function entry points.
|
||||
- Locate a miscompiled boundary comparison and reason about its immediate
|
||||
value.
|
||||
- Patch compare instructions and a status string in a raw binary with Ghidra.
|
||||
- Export and UF2-convert a corrected image, then verify it on real hardware.
|
||||
- Capture derived state with GDB and read UART console output.
|
||||
|
||||
Students must use only Weeks 1-3 concepts: ARM registers and stack behavior,
|
||||
UART output, GDB, Ghidra static analysis and binary patching, vector tables,
|
||||
reset startup, XIP, and Thumb addressing.
|
||||
|
||||
---
|
||||
|
||||
## Deliverables Checklist
|
||||
|
||||
| # | Deliverable | Format | Criterion |
|
||||
|---|-------------|--------|-----------|
|
||||
| 1 | Ghidra project screenshot (project name, processor, base address) | PNG/JPG | 1.1 |
|
||||
| 2 | `main()` and status-loop addresses | Inside `CTF-01-Answers.md` | 1.2 |
|
||||
| 3 | Vector table base, initial SP, reset pointer | Inside `CTF-01-Answers.md` | 1.3 |
|
||||
| 4 | Thumb bit explanation | Inside `CTF-01-Answers.md` | 1.4 |
|
||||
| 5 | Bug #1 evidence and patches (both compare sites) | Inside `CTF-01-Answers.md` | 2.1-2.6 |
|
||||
| 6 | Bug #2 evidence and patch (six characters) | Inside `CTF-01-Answers.md` | 3.1-3.4 |
|
||||
| 7 | Recovered dispatch frame and address | Inside `CTF-01-Answers.md` | 4.1-4.2 |
|
||||
| 8 | `CTF-01_fixed.bin` | BIN file | 5.1 |
|
||||
| 9 | `CTF-01_fixed.uf2` | UF2 file | 5.2 |
|
||||
| 10 | Corrected console transcript | Inside `CTF-01-Answers.md` | 5.3 |
|
||||
| 11 | Summary table of all patches | Inside `CTF-01-Answers.md` | 5.4 |
|
||||
| 12 | Written reflection | Inside `CTF-01-Answers.md` | 6.1-6.2 |
|
||||
|
||||
---
|
||||
|
||||
## Required Tools and Equipment
|
||||
|
||||
| Tool | Purpose |
|
||||
|------|---------|
|
||||
| Raspberry Pi Pico 2 | Isolated target |
|
||||
| 3.3 V USB-UART adapter | UART capture on GPIO 0 (TX) / GPIO 1 (RX) |
|
||||
| Serial monitor | Observe output |
|
||||
| Ghidra | Static analysis and binary patching |
|
||||
| Python (`uf2conv.py`) | UF2 conversion |
|
||||
| `CTF-01.bin` and `CTF-01.uf2` | Supplied artifacts |
|
||||
|
||||
UART settings: **115200 baud, 8 data bits, no parity, 1 stop bit**.
|
||||
|
||||
---
|
||||
|
||||
## Artifact Identity
|
||||
|
||||
The instructor-issued artifact hashes are:
|
||||
|
||||
```text
|
||||
CTF-01.bin 425591AC17FF4C22206286EE6F40B06A89523483804850A41854A9B6F89D7B70
|
||||
CTF-01.uf2 B1552EE3BB5763D96C65D8DF1C86984EE842EF1A823FDF5D94132B1E10FF9D16
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Grading Rubric - Detailed Breakdown
|
||||
|
||||
### Task 1: Setup and Initial Analysis (15 points)
|
||||
|
||||
| Criterion | Points | Full credit | Partial credit | No credit |
|
||||
|-----------|--------|-------------|----------------|-----------|
|
||||
| Criterion 1.1: Ghidra Project Setup | 3 | Correct project name, `ARM:LE:32:Cortex` (ARM Cortex 32-bit little endian), base `0x10000000` | One item off | Not set up |
|
||||
| Criterion 1.2: main() and Status-Loop Addresses | 4 | Both addresses correct | One correct | Neither found |
|
||||
| Criterion 1.3: Vector Table Decoding | 4 | Correct base, initial SP, reset pointer | One missing | Not found |
|
||||
| Criterion 1.4: Thumb Addressing | 4 | Correctly clears bit 0 and identifies `main()` | General explanation | Incorrect |
|
||||
|
||||
### Task 2: Find and Patch Bug #1: The Miscalibrated Safety Threshold (30 points)
|
||||
|
||||
| Criterion | Points | Full credit | Partial credit | No credit |
|
||||
|-----------|--------|-------------|----------------|-----------|
|
||||
| Criterion 2.1: Locate Compare Site A | 5 | Correct address and original bytes | Address off | Not found |
|
||||
| Criterion 2.2: Locate Compare Site B | 5 | Correct address and original bytes | Address off | Not found |
|
||||
| Criterion 2.3: Correct Immediate-Value Reasoning | 8 | Explains the `<` to `<=` transform and gives `0x3B` | Correct value, no reasoning | Wrong value |
|
||||
| Criterion 2.4: Patch Compare Site A | 4 | Byte change verified | Wrong byte | Not patched |
|
||||
| Criterion 2.5: Patch Compare Site B | 4 | Byte change verified | Wrong byte | Not patched |
|
||||
| Criterion 2.6: Explain Why Both Sites Must Be Patched | 4 | Clear explanation of the two independent comparisons | Vague | Missing |
|
||||
|
||||
### Task 3: Find and Patch Bug #2: The False Signal Banner (20 points)
|
||||
|
||||
| Criterion | Points | Full credit | Partial credit | No credit |
|
||||
|-----------|--------|-------------|----------------|-----------|
|
||||
| Criterion 3.1: Locate the Banner String | 5 | Correct address | Approximate | Not found |
|
||||
| Criterion 3.2: Patch Six Characters | 8 | All six bytes changed, length preserved | Correct text, wrong bytes documented | Wrong length |
|
||||
| Criterion 3.3: Character-by-Character Documentation | 4 | Original vs patched byte for all six characters | Partial | Missing |
|
||||
| Criterion 3.4: Explain the Danger of a Hardcoded Status Word | 3 | Clear, specific reasoning | Generic | Missing |
|
||||
|
||||
### Task 4: Recover the Quarantined Dispatch Frame (10 points)
|
||||
|
||||
| Criterion | Points | Full credit | Partial credit | No credit |
|
||||
|-----------|--------|-------------|----------------|-----------|
|
||||
| Criterion 4.1: Recover the Dispatch Frame | 6 | Correct address and full text | Partial text | Not found |
|
||||
| Criterion 4.2: Explain Why It Is Never Transmitted | 4 | Clear static-analysis explanation | Vague | Missing |
|
||||
|
||||
### Task 5: Export and Verify (20 points)
|
||||
|
||||
| Criterion | Points | Full credit | Partial credit | No credit |
|
||||
|-----------|--------|-------------|----------------|-----------|
|
||||
| Criterion 5.1: Export CTF-01_fixed.bin | 4 | Valid patched binary | Corrupted | Not submitted |
|
||||
| Criterion 5.2: Convert to CTF-01_fixed.uf2 | 4 | Correct base and family flags | Wrong flags | Not submitted |
|
||||
| Criterion 5.3: Hardware Verification | 8 | Corrected console output confirmed (CRITICAL/HELD in 1s stream; DANGER at boot/Ghidra) | Some lines corrected | No verification |
|
||||
| Criterion 5.4: Summary Table of All Patches | 4 | Complete address and before/after table | Missing entries | No table |
|
||||
|
||||
### Task 6: Written Reflection (5 points)
|
||||
|
||||
| Criterion | Points | Full credit | Partial credit | No credit |
|
||||
|-----------|--------|-------------|----------------|-----------|
|
||||
| Criterion 6.1: "Rushed Build" Is Not an Excuse | 2 | Specific, grounded reasoning | Generic | Missing |
|
||||
| Criterion 6.2: One Engineering Practice per Bug | 3 | Concrete practice for each bug | One bug only | Missing |
|
||||
|
||||
---
|
||||
|
||||
## Common Pitfalls
|
||||
|
||||
| Pitfall | Consequence | Avoidance |
|
||||
|---------|-------------|-----------|
|
||||
| Patching only one threshold site | One status line still lies | Patch both `0x100001FC` and `0x1000020A` |
|
||||
| Assuming the immediate equals the limit | Off-by-one, wrong boundary | Use `0x3B` (59), not `0x3C` (60) |
|
||||
| Using Patch Instruction before IT block | Re-disassembler context conflict swallows Site B | In Listing press `C` -> edit byte in Bytes window (pencil) -> press `D` |
|
||||
| Missing boot banner in serial terminal | PuTTY misses one-time 5ms boot banner | Pulse RUN to GND while connected to capture |
|
||||
| Replacing a string with a different length | Corrupts adjacent flash | `NORMAL` and `DANGER` are both 6 bytes |
|
||||
| Treating an odd vector address as invalid | Thumb analysis fails | Clear bit 0 |
|
||||
| Modifying the quarantined dispatch frame | Destroys evidence | Recover it, do not patch it |
|
||||
|
||||
---
|
||||
|
||||
## How To Breadboard
|
||||
|
||||
- **Raspberry Pi Pico 2** powered over USB.
|
||||
- **3.3 V USB-UART adapter**:
|
||||
- Adapter RX to Pico GP0 (UART0 TX)
|
||||
- Adapter TX to Pico GP1 (UART0 RX)
|
||||
- Adapter GND to Pico GND
|
||||
- Do not connect the adapter VCC while the Pico is USB powered.
|
||||
- **Serial monitor:** 115200 baud, 8 data bits, no parity, 1 stop bit.
|
||||
- No other peripherals are required; all evidence is obtained from the console.
|
||||
|
||||
---
|
||||
|
||||
## Memory Map Reference
|
||||
|
||||
| Region | Address | Purpose |
|
||||
|--------|---------|---------|
|
||||
| Bootrom | `0x00000000` | Immutable boot code |
|
||||
| Flash/XIP | `0x10000000` | Vector table, code, constants, strings |
|
||||
| SRAM | `0x20000000` | Stack and writable state |
|
||||
|
||||
---
|
||||
|
||||
## Deadline & Submission
|
||||
|
||||
- Create a folder containing the Ghidra screenshot, `CTF-01_fixed.bin`, and
|
||||
`CTF-01_fixed.uf2`.
|
||||
- Write all written answers in a single file named `CTF-01-Answers.md` inside that
|
||||
folder.
|
||||
- ZIP the folder as `lastname-firstname-CTF-01.zip`.
|
||||
- Submit the ZIP before the posted deadline; late submissions lose 10 percent
|
||||
per day.
|
||||
|
||||
---
|
||||
|
||||
## Grade Scale
|
||||
|
||||
| Grade | Percentage | Points |
|
||||
|-------|------------|--------|
|
||||
| A+ | 97-100% | 97-100 |
|
||||
| A | 93-96% | 93-96 |
|
||||
| A- | 90-92% | 90-92 |
|
||||
| B+ | 87-89% | 87-89 |
|
||||
| B | 84-86% | 84-86 |
|
||||
| B- | 80-83% | 80-83 |
|
||||
| C | 70-79% | 70-79 |
|
||||
| F | 0-69% | 0-69 |
|
||||
|
||||
---
|
||||
|
||||
## Academic Integrity
|
||||
|
||||
Use only the supplied Pico 2 and firmware. Do not connect the exercise to an
|
||||
operational grid, water plant, public network, military system, or third-party
|
||||
device. This is a controlled, isolated educational exercise. All analysis and
|
||||
patches must be your own work; sharing binaries, addresses, or answers is a
|
||||
violation of the academic integrity policy.
|
||||
|
||||
---
|
||||
|
||||
## Reference Material
|
||||
|
||||
| Topic | Reference |
|
||||
|-------|-----------|
|
||||
| ARM Cortex-M33 registers and stack | Week 1 |
|
||||
| UART output and console capture | Week 2 |
|
||||
| Vector tables, reset startup, and XIP | Week 2 |
|
||||
| Ghidra static analysis and binary patching | Week 3 |
|
||||
| Thumb addressing | Week 3 |
|
||||
Binary file not shown.
@@ -0,0 +1,467 @@
|
||||
# Operation Black Start - Instructor Solution Key
|
||||
|
||||
```
|
||||
+----------------------------------------------------------------------------------------+
|
||||
| |
|
||||
| ██████╗ ██╗ █████╗ ██████╗██╗ ██╗███████╗████████╗ █████╗ ██████╗ ████████╗ |
|
||||
| ██╔══██╗██║ ██╔══██╗██╔════╝██║ ██╔╝██╔════╝╚══██╔══╝██╔══██╗██╔══██╗╚══██╔══╝ |
|
||||
| ██████╔╝██║ ███████║██║ █████╔╝ ███████╗ ██║ ███████║██████╔╝ ██║ |
|
||||
| ██╔══██╗██║ ██╔══██║██║ ██╔═██╗ ╚════██║ ██║ ██╔══██║██╔══██╗ ██║ |
|
||||
| ██████╔╝███████╗██║ ██║╚██████╗██║ ██╗███████╗ ██║ ██║ ██║██║ ██║ ██║ |
|
||||
| ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═════╝██║ ██║╚══════╝ ╚═╝ ╚═╝ ╚═╝██║ ██║ ██║ |
|
||||
| |
|
||||
| |
|
||||
| O P E R A T I O N B L A C K S T A R T |
|
||||
| |
|
||||
| *** INSTRUCTOR SOLUTION KEY - RESTRICTED *** |
|
||||
| |
|
||||
+----------------------------------------------------------------------------------------+
|
||||
```
|
||||
|
||||
> The task and criterion headings in this key are word-for-word identical to
|
||||
> `CTF-01-R.md`, so a student can match each criterion one-to-one.
|
||||
|
||||
---
|
||||
|
||||
## Artifact Identity
|
||||
|
||||
| Artifact | Value |
|
||||
|----------|-------|
|
||||
| Student image | `CTF-01.bin` |
|
||||
| Flash image | `CTF-01.uf2` |
|
||||
| Target | Raspberry Pi Pico 2 / RP2350 ARM Cortex-M33 |
|
||||
| Image base | `0x10000000` |
|
||||
| Console | UART0, GPIO 0 TX / GPIO 1 RX, 115200 8N1 |
|
||||
|
||||
```text
|
||||
CTF-01.bin 425591AC17FF4C22206286EE6F40B06A89523483804850A41854A9B6F89D7B70
|
||||
CTF-01.uf2 B1552EE3BB5763D96C65D8DF1C86984EE842EF1A823FDF5D94132B1E10FF9D16
|
||||
```
|
||||
|
||||
Proof tool: `python3 scripts/verify_ctf.py` returns `11/11 checks passed` against
|
||||
`CTF-01.bin`.
|
||||
|
||||
---
|
||||
|
||||
## Task 1: Setup and Initial Analysis (15 points)
|
||||
|
||||
### Solution
|
||||
|
||||
**Criterion 1.1: Ghidra Project Setup (3 points).** Import `CTF-01.bin` as
|
||||
`Raw Binary`, language `ARM:LE:32:Cortex`, base address `0x10000000`, then run
|
||||
auto-analysis.
|
||||
|
||||
**Criterion 1.2: main() and Status-Loop Addresses (4 points).**
|
||||
|
||||
| Element | Address |
|
||||
|---------|---------|
|
||||
| `main()` | `0x100001E0` |
|
||||
| Recurring status loop start | `0x10000234` |
|
||||
| Loop back-edge (`b.n 0x10000234`) | `0x10000266` |
|
||||
|
||||
The back-edge instruction at `0x10000266` is `b.n 0x10000234`, encoded as bytes
|
||||
`E5 E7`.
|
||||
|
||||
**Criterion 1.3: Vector Table Decoding (4 points).**
|
||||
First 32 bytes of `CTF-01.bin`:
|
||||
|
||||
```text
|
||||
00 20 08 20 5B 01 00 10 1B 01 00 10 1D 01 00 10
|
||||
11 01 00 10 11 01 00 10 11 01 00 10 11 01 00 10
|
||||
```
|
||||
|
||||
| Evidence | Answer |
|
||||
|----------|--------|
|
||||
| Vector table base | `0x10000000` |
|
||||
| Initial SP | `0x20082000` |
|
||||
| Reset pointer (as stored) | `0x1000015B` |
|
||||
| Reset instruction address | `0x1000015A` |
|
||||
|
||||
**Criterion 1.4: Thumb Addressing (4 points).**
|
||||
The stored reset pointer `0x1000015B` has bit 0 set to 1, which selects Thumb
|
||||
mode. Clearing bit 0 (`0x1000015B & ~1`) gives the real instruction address
|
||||
`0x1000015A`. The equally odd interrupt vectors (`0x1000011B`, `0x1000011D`,
|
||||
`0x10000111`) are handled the same way.
|
||||
|
||||
### Grading Rubric (1-to-1 Mapping)
|
||||
|
||||
| Criterion | Points | Full Credit (Answer Key) | Partial Credit | No Credit |
|
||||
|-----------|--------|--------------------------|----------------|-----------|
|
||||
| Criterion 1.1: Ghidra Project Setup | 3 | Correct project name, `ARM:LE:32:Cortex` (ARM Cortex 32-bit little endian), base `0x10000000` | One item off | Not set up |
|
||||
| Criterion 1.2: main() and Status-Loop Addresses | 4 | Both addresses correct | One correct | Neither found |
|
||||
| Criterion 1.3: Vector Table Decoding | 4 | Correct base, initial SP, reset pointer | One missing | Not found |
|
||||
| Criterion 1.4: Thumb Addressing | 4 | Correctly clears bit 0 and identifies `main()` | General explanation | Incorrect |
|
||||
|
||||
### Instructor Notes & Assembly
|
||||
|
||||
- Confirm the Ghidra import used `Raw Binary`, `ARM:LE:32:Cortex`, base
|
||||
`0x10000000`, and that auto-analysis completed before any address was read.
|
||||
- Verify `main()` is `0x100001E0`, the loop head is `0x10000234`, and the
|
||||
back-edge bytes `E5 E7` sit at `0x10000266`.
|
||||
- The reset vector is stored as `0x1000015B`; the real Thumb entry is
|
||||
`0x1000015A`. Do not accept the un-cleared `0x1000015B` as an instruction
|
||||
address.
|
||||
|
||||
---
|
||||
|
||||
## Task 2: Find and Patch Bug #1: The Miscalibrated Safety Threshold (30 points)
|
||||
|
||||
### Solution
|
||||
|
||||
`grid_deviation` is `volatile`, so the compiler emits two independent compares:
|
||||
one for the operator status and one for the automated dispatch decision.
|
||||
|
||||
**Criterion 2.1: Locate Compare Site A (5 points).**
|
||||
|
||||
```text
|
||||
100001fc: 2b5e cmp r3, #94 @ 0x5e
|
||||
```
|
||||
|
||||
| Item | Value |
|
||||
|------|-------|
|
||||
| Address | `0x100001FC` |
|
||||
| File offset | `0x1FC` |
|
||||
| Original bytes | `5E 2B` |
|
||||
| Original instruction | `cmp r3, #94` |
|
||||
|
||||
**Criterion 2.2: Locate Compare Site B (5 points).**
|
||||
|
||||
```text
|
||||
1000020a: 2b5e cmp r3, #94 @ 0x5e
|
||||
```
|
||||
|
||||
| Item | Value |
|
||||
|------|-------|
|
||||
| Address | `0x1000020A` |
|
||||
| File offset | `0x20A` |
|
||||
| Original bytes | `5E 2B` |
|
||||
| Original instruction | `cmp r3, #94` |
|
||||
|
||||
**Criterion 2.3: Correct Immediate-Value Reasoning (8 points).**
|
||||
The source constant is `SAFE_THRESHOLD = 95` and the test is `x < 95`. For an
|
||||
unsigned value, `x < 95` is exactly `x <= 94`, which the compiler emits as
|
||||
`cmp r3, #94` plus `ite hi`. The correct engineering limit is `60`, so the test
|
||||
is `x < 60`, which is `x <= 59`. The correct patched immediate is therefore
|
||||
**`0x3B` (59)**, not `0x3C` (60). Patching to `0x3C` would wrongly accept a
|
||||
reading of exactly 60.
|
||||
|
||||
**Criterion 2.4: Patch Compare Site A (4 points).**
|
||||
|
||||
| Address | File Offset | Original | Patched | Before | After |
|
||||
|---------|-------------|----------|---------|--------|-------|
|
||||
| `0x100001FC` | `0x1FC` | `5E 2B` | `3B 2B` | `cmp r3, #94` | `cmp r3, #59` |
|
||||
|
||||
**Criterion 2.5: Patch Compare Site B (4 points).**
|
||||
|
||||
| Address | File Offset | Original | Patched | Before | After |
|
||||
|---------|-------------|----------|---------|--------|-------|
|
||||
| `0x1000020A` | `0x20A` | `5E 2B` | `3B 2B` | `cmp r3, #94` | `cmp r3, #59` |
|
||||
|
||||
**Criterion 2.6: Explain Why Both Sites Must Be Patched (4 points).**
|
||||
`operator_state` (`0x20000844`) and `dispatch_state` (`0x20000834`) are each
|
||||
computed from their own read of `grid_deviation`. Patching only site A fixes the
|
||||
displayed text while the automated dispatch at site B still authorizes on the
|
||||
dangerous reading. Frozen reading `87`: `87 <= 94` is true (STABLE/AUTHORIZED,
|
||||
wrong); `87 <= 59` is false (CRITICAL/HELD, correct).
|
||||
|
||||
### Grading Rubric (1-to-1 Mapping)
|
||||
|
||||
| Criterion | Points | Full Credit (Answer Key) | Partial Credit | No Credit |
|
||||
|-----------|--------|--------------------------|----------------|-----------|
|
||||
| Criterion 2.1: Locate Compare Site A | 5 | Correct address and original bytes | Address off | Not found |
|
||||
| Criterion 2.2: Locate Compare Site B | 5 | Correct address and original bytes | Address off | Not found |
|
||||
| Criterion 2.3: Correct Immediate-Value Reasoning | 8 | Explains the `<` to `<=` transform and gives `0x3B` | Correct value, no reasoning | Wrong value |
|
||||
| Criterion 2.4: Patch Compare Site A | 4 | Byte change verified | Wrong byte | Not patched |
|
||||
| Criterion 2.5: Patch Compare Site B | 4 | Byte change verified | Wrong byte | Not patched |
|
||||
| Criterion 2.6: Explain Why Both Sites Must Be Patched | 4 | Clear explanation of the two independent comparisons | Vague | Missing |
|
||||
|
||||
### Instructor Notes & Assembly
|
||||
|
||||
- Both sites must be patched: `0x100001FC` for operator status and
|
||||
`0x1000020A` for the automated dispatch decision.
|
||||
- The correct immediate is `0x3B` (59), not `0x3C` (60); the source test is a
|
||||
strict `<`, compiled as `<= 94`.
|
||||
- Verify the byte changes on hardware: after patching, `operator_state`
|
||||
(`0x20000844`) and `dispatch_state` (`0x20000834`) read `0` and `0`.
|
||||
- **Ghidra ARM/Thumb Context Note:** In raw `.bin` files, patching an instruction
|
||||
that precedes an `IT` block (`ite hi`) using the GUI *Patch Instruction* action
|
||||
triggers Ghidra's `ReDisassembleCommand`. The re-disassembler encounters an
|
||||
internal context register conflict when trying to re-declare the `ITBlock`
|
||||
context over existing instructions, collapsing Thumb decoding into 32-bit ARM
|
||||
mode and swallowing Site B (`0x1000020A`). Students must patch using the Bytes
|
||||
window workflow (Clear `C` -> edit byte `5E` -> `3B` in Bytes window with pencil
|
||||
icon -> Disassemble `D`) to keep Site B visible and cleanly aligned.
|
||||
|
||||
---
|
||||
|
||||
## Task 3: Find and Patch Bug #2: The False Signal Banner (20 points)
|
||||
|
||||
### Solution
|
||||
|
||||
**Criterion 3.1: Locate the Banner String (5 points).**
|
||||
|
||||
| String | Address |
|
||||
|--------|---------|
|
||||
| `"SIGNAL: NORMAL\r"` | `0x10003678` |
|
||||
| `"NORMAL"` substring to patch | `0x10003680` |
|
||||
|
||||
The string is loaded at call site `0x10000224` (`ldr r0, [pc, #92]` ->
|
||||
`0x10003678`) and printed by `bl __wrap_puts` at `0x10000226`. It is printed
|
||||
once at boot and never recomputed.
|
||||
|
||||
**Criterion 3.2: Patch Six Characters (8 points).**
|
||||
`NORMAL` and `DANGER` are both six ASCII characters, so the patch preserves the
|
||||
string length.
|
||||
|
||||
| Address Range | Original Bytes | Patched Bytes |
|
||||
|---------------|----------------|---------------|
|
||||
| `0x10003680` - `0x10003685` | `4E 4F 52 4D 41 4C` | `44 41 4E 47 45 52` |
|
||||
|
||||
**Criterion 3.3: Character-by-Character Documentation (4 points).**
|
||||
|
||||
| Address | Original Char | Original Byte | Patched Char | Patched Byte |
|
||||
|---------|---------------|---------------|--------------|--------------|
|
||||
| `0x10003680` | N | `4E` | D | `44` |
|
||||
| `0x10003681` | O | `4F` | A | `41` |
|
||||
| `0x10003682` | R | `52` | N | `4E` |
|
||||
| `0x10003683` | M | `4D` | G | `47` |
|
||||
| `0x10003684` | A | `41` | E | `45` |
|
||||
| `0x10003685` | L | `4C` | R | `52` |
|
||||
|
||||
**Criterion 3.4: Explain the Danger of a Hardcoded Status Word (3 points).**
|
||||
The banner never consults the reading, so it reports a healthy line even while
|
||||
the frozen reading is dangerous. Operators trust supervisory banners, so a
|
||||
hardcoded `NORMAL` masks the hazard and prevents manual intervention.
|
||||
|
||||
### Grading Rubric (1-to-1 Mapping)
|
||||
|
||||
| Criterion | Points | Full Credit (Answer Key) | Partial Credit | No Credit |
|
||||
|-----------|--------|--------------------------|----------------|-----------|
|
||||
| Criterion 3.1: Locate the Banner String | 5 | Correct address | Approximate | Not found |
|
||||
| Criterion 3.2: Patch Six Characters | 8 | All six bytes changed, length preserved | Correct text, wrong bytes documented | Wrong length |
|
||||
| Criterion 3.3: Character-by-Character Documentation | 4 | Original vs patched byte for all six characters | Partial | Missing |
|
||||
| Criterion 3.4: Explain the Danger of a Hardcoded Status Word | 3 | Clear, specific reasoning | Generic | Missing |
|
||||
|
||||
### Instructor Notes & Assembly
|
||||
|
||||
- `NORMAL` and `DANGER` are both six characters; the patch must not change the
|
||||
string length or overwrite adjacent flash.
|
||||
- The banner is printed once at boot and never recomputed, so it is a separate
|
||||
defect from the threshold and must be graded independently.
|
||||
- Confirm the patch covers `0x10003680` through `0x10003685` exactly.
|
||||
|
||||
---
|
||||
|
||||
## Task 4: Recover the Quarantined Dispatch Frame (10 points)
|
||||
|
||||
### Solution
|
||||
|
||||
**Criterion 4.1: Recover the Dispatch Frame (6 points).**
|
||||
Address `0x100037A0` in flash `.rodata`:
|
||||
|
||||
```text
|
||||
WORLDGRID:BLACKSTART:GRID-7:WATER-3
|
||||
```
|
||||
|
||||
**Criterion 4.2: Explain Why It Is Never Transmitted (4 points).**
|
||||
`retain_dispatch_frame()` reads only the first character into a `volatile` local
|
||||
so the linker keeps the string, but the pointer is never passed to any print or
|
||||
UART routine. The frame is evidence only and must not be patched.
|
||||
|
||||
### Grading Rubric (1-to-1 Mapping)
|
||||
|
||||
| Criterion | Points | Full Credit (Answer Key) | Partial Credit | No Credit |
|
||||
|-----------|--------|--------------------------|----------------|-----------|
|
||||
| Criterion 4.1: Recover the Dispatch Frame | 6 | Correct address and full text | Partial text | Not found |
|
||||
| Criterion 4.2: Explain Why It Is Never Transmitted | 4 | Clear static-analysis explanation | Vague | Missing |
|
||||
|
||||
### Instructor Notes & Assembly
|
||||
|
||||
- Accept the full string `WORLDGRID:BLACKSTART:GRID-7:WATER-3` at `0x100037A0`
|
||||
in flash `.rodata`.
|
||||
- The frame is evidence only. Penalize any submission that patches or rewrites
|
||||
it instead of recovering it.
|
||||
|
||||
---
|
||||
|
||||
## Task 5: Export and Verify (20 points)
|
||||
|
||||
### Solution
|
||||
|
||||
**Criterion 5.1: Export CTF-01_fixed.bin (4 points).**
|
||||
Export the patched program from Ghidra (`File -> Export Program...`, `Binary
|
||||
Format`) as `CTF-01_fixed.bin`.
|
||||
|
||||
**Criterion 5.2: Convert to CTF-01_fixed.uf2 (4 points).**
|
||||
|
||||
```bash
|
||||
python uf2conv.py CTF-01_fixed.bin --base 0x10000000 --family 0xe48bff59 --output CTF-01_fixed.uf2
|
||||
```
|
||||
|
||||
**Criterion 5.3: Hardware Verification (8 points).**
|
||||
|
||||
Before patching:
|
||||
|
||||
```text
|
||||
GLOBAL EMBEDDED RESPONSE NETWORK
|
||||
BLACK START WINDOW: 27 MINUTES
|
||||
UART0 115200 8N1 | AUTHORIZED LAB CONSOLE
|
||||
SIGNAL: NORMAL
|
||||
RESPONSE> GRID STATUS: STABLE
|
||||
DISPATCH PATH: AUTHORIZED
|
||||
LAST FRAME: QUARANTINED
|
||||
RESPONSE>
|
||||
```
|
||||
|
||||
After all three patches:
|
||||
|
||||
```text
|
||||
GLOBAL EMBEDDED RESPONSE NETWORK
|
||||
BLACK START WINDOW: 27 MINUTES
|
||||
UART0 115200 8N1 | AUTHORIZED LAB CONSOLE
|
||||
SIGNAL: DANGER
|
||||
RESPONSE> GRID STATUS: CRITICAL
|
||||
DISPATCH PATH: HELD
|
||||
LAST FRAME: QUARANTINED
|
||||
RESPONSE>
|
||||
```
|
||||
|
||||
If the console is not wired, the same proof is read over SWD: after reset,
|
||||
`operator_state` (`0x20000844`) and `dispatch_state` (`0x20000834`) are `1` and
|
||||
`1` for the shipped image, and `0` and `0` for the patched image. This has been
|
||||
confirmed on real hardware.
|
||||
|
||||
**Criterion 5.4: Summary Table of All Patches (4 points).**
|
||||
|
||||
| # | What | Address(es) | Original | Patched |
|
||||
|---|------|-------------|----------|---------|
|
||||
| 1a | Operator threshold | `0x100001FC` | `5E 2B` | `3B 2B` |
|
||||
| 1b | Dispatch threshold | `0x1000020A` | `5E 2B` | `3B 2B` |
|
||||
| 2 | Signal banner | `0x10003680`-`0x10003685` | `4E 4F 52 4D 41 4C` | `44 41 4E 47 45 52` |
|
||||
|
||||
Total: **8 bytes actually change** (one immediate byte at each compare site and
|
||||
six string bytes).
|
||||
|
||||
### Grading Rubric (1-to-1 Mapping)
|
||||
|
||||
| Criterion | Points | Full Credit (Answer Key) | Partial Credit | No Credit |
|
||||
|-----------|--------|--------------------------|----------------|-----------|
|
||||
| Criterion 5.1: Export CTF-01_fixed.bin | 4 | Valid patched binary | Corrupted | Not submitted |
|
||||
| Criterion 5.2: Convert to CTF-01_fixed.uf2 | 4 | Correct base and family flags | Wrong flags | Not submitted |
|
||||
| Criterion 5.3: Hardware Verification | 8 | Corrected console output confirmed on hardware | Some lines corrected | No verification |
|
||||
| Criterion 5.4: Summary Table of All Patches | 4 | Complete address and before/after table | Missing entries | No table |
|
||||
|
||||
### Instructor Notes & Assembly
|
||||
|
||||
- Verify the exported image with `python3 scripts/verify_ctf.py`; the shipped
|
||||
check expects `11/11 checks passed` against `CTF-01.bin`.
|
||||
- Confirm the UF2 conversion used base `0x10000000` and family `0xe48bff59`.
|
||||
- **Serial Terminal Timing:** Note that `print_boot_banner()` (`SIGNAL: DANGER`)
|
||||
fires within the first 5 milliseconds of boot. In normal lab usage, PuTTY
|
||||
attaches after boot and will display the continuous 1-second status loop
|
||||
(`GRID STATUS: CRITICAL`, `DISPATCH PATH: HELD`). To see `SIGNAL: DANGER`,
|
||||
the student must pulse `RUN` to `GND` while PuTTY is open, or demonstrate
|
||||
the string change at `0x10003680` via Ghidra static analysis.
|
||||
- If no console is available, accept the SWD capture showing `operator_state`
|
||||
and `dispatch_state` at `0` and `0` on the patched image.
|
||||
|
||||
---
|
||||
|
||||
## Task 6: Written Reflection (5 points)
|
||||
|
||||
### Solution
|
||||
|
||||
**Criterion 6.1: "Rushed Build" Is Not an Excuse (2 points).**
|
||||
The missed review step is exactly what shipped the false-safe report; pressure
|
||||
explains why the safeguard was skipped, not why it should be skipped.
|
||||
|
||||
**Criterion 6.2: One Engineering Practice per Bug (3 points).**
|
||||
- Bug #1 (duplicated threshold): a unit test or static-analysis rule that
|
||||
requires every comparison against `SAFE_THRESHOLD` to use one shared source of
|
||||
truth.
|
||||
- Bug #2 (hardcoded banner): a hardware-in-the-loop smoke test that checks the
|
||||
boot banner against the latched reading.
|
||||
|
||||
### Grading Rubric (1-to-1 Mapping)
|
||||
|
||||
| Criterion | Points | Full Credit (Answer Key) | Partial Credit | No Credit |
|
||||
|-----------|--------|--------------------------|----------------|-----------|
|
||||
| Criterion 6.1: "Rushed Build" Is Not an Excuse | 2 | Specific, grounded reasoning | Generic | Missing |
|
||||
| Criterion 6.2: One Engineering Practice per Bug | 3 | Concrete practice for each bug | One bug only | Missing |
|
||||
|
||||
### Instructor Notes & Assembly
|
||||
|
||||
- Grade the specificity of the reasoning, not the length of the prose.
|
||||
- Require one concrete engineering practice for each of the two bugs.
|
||||
|
||||
---
|
||||
|
||||
## How To Breadboard
|
||||
|
||||
- **Raspberry Pi Pico 2** powered over USB.
|
||||
- **3.3 V USB-UART adapter**:
|
||||
- Adapter RX to Pico GP0 (UART0 TX)
|
||||
- Adapter TX to Pico GP1 (UART0 RX)
|
||||
- Adapter GND to Pico GND
|
||||
- Do not connect the adapter VCC while the Pico is USB powered.
|
||||
- **Serial monitor:** 115200 baud, 8 data bits, no parity, 1 stop bit.
|
||||
- No other peripherals are required; all evidence is obtained from the console.
|
||||
|
||||
---
|
||||
|
||||
## Complete Grading Summary
|
||||
|
||||
| Task | Title | Points |
|
||||
|------|-------|--------|
|
||||
| Task 1 | Setup and Initial Analysis | 15 |
|
||||
| Task 2 | Find and Patch Bug #1: The Miscalibrated Safety Threshold | 30 |
|
||||
| Task 3 | Find and Patch Bug #2: The False Signal Banner | 20 |
|
||||
| Task 4 | Recover the Quarantined Dispatch Frame | 10 |
|
||||
| Task 5 | Export and Verify | 20 |
|
||||
| Task 6 | Written Reflection | 5 |
|
||||
| **TOTAL** | | **100** |
|
||||
|
||||
---
|
||||
|
||||
## Instructor Notes
|
||||
|
||||
Safety: Use only the supplied Pico 2, 3.3 V UART adapter, and firmware. Never
|
||||
connect the exercise to an operational grid, water plant, public network,
|
||||
military system, or third-party device.
|
||||
|
||||
### Common Student Mistakes
|
||||
|
||||
- Patching only one threshold site (`0x100001FC` or `0x1000020A`), which leaves
|
||||
one status line lying.
|
||||
- Assuming the immediate equals the limit, producing an off-by-one boundary;
|
||||
the correct byte is `0x3B` (59), not `0x3C` (60).
|
||||
- Replacing the banner string with a different length, corrupting adjacent
|
||||
flash; `NORMAL` and `DANGER` are both 6 bytes.
|
||||
- Treating the odd vector address `0x1000015B` as invalid instead of clearing
|
||||
bit 0 to get `0x1000015A`.
|
||||
- Modifying the quarantined dispatch frame at `0x100037A0`, which destroys
|
||||
evidence.
|
||||
|
||||
### Partial Credit Guidelines
|
||||
|
||||
- Award partial credit for one correct threshold site out of two, or for a
|
||||
correct immediate value without the `<` to `<=` reasoning.
|
||||
- Award partial credit for a correct banner text with incorrectly documented
|
||||
bytes, or for partial character-by-character documentation.
|
||||
- Accept an SWD read of `operator_state` and `dispatch_state` as equivalent
|
||||
proof when no UART console is available.
|
||||
- Award no credit for patches that change string length or overwrite adjacent
|
||||
flash.
|
||||
|
||||
---
|
||||
|
||||
## Appendix: Expected Binary Diff
|
||||
|
||||
| # | What | File Offset(s) | Address(es) | Original Bytes | Patched Bytes |
|
||||
|---|------|----------------|-------------|----------------|---------------|
|
||||
| 1a | Operator threshold | `0x1FC` | `0x100001FC` | `5E 2B` | `3B 2B` |
|
||||
| 1b | Dispatch threshold | `0x20A` | `0x1000020A` | `5E 2B` | `3B 2B` |
|
||||
| 2 | Signal banner | `0x3680` - `0x3685` | `0x10003680` - `0x10003685` | `4E 4F 52 4D 41 4C` | `44 41 4E 47 45 52` |
|
||||
|
||||
Total: **8 bytes actually change** (one immediate byte at each compare site and
|
||||
six string bytes).
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Executable
BIN
Binary file not shown.
File diff suppressed because it is too large.
Load diff
Executable
BIN
Binary file not shown.
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
Binary file not shown.
@@ -0,0 +1,72 @@
|
||||
// MIT License
|
||||
//
|
||||
// Copyright (c) 2026 Kevin Thomas
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
//
|
||||
// Author: Kevin Thomas
|
||||
// Email: kevin@mytechnotalent.com
|
||||
// GitHub: https://github.com/mytechnotalent
|
||||
// File: console.h
|
||||
// Desc: Declares the UART console banner and status reporting interface
|
||||
// for Operation Black Start.
|
||||
// Created: 2026
|
||||
|
||||
#ifndef CONSOLE_H
|
||||
#define CONSOLE_H
|
||||
|
||||
#include "grid.h"
|
||||
#include <stdio.h>
|
||||
|
||||
/**
|
||||
* @brief Print the response controller's boot identity and unconditional signal line.
|
||||
*
|
||||
* Emits the boot banner, operation window, serial configuration banner,
|
||||
* unconditional signal quality line, and the interactive command prompt.
|
||||
*
|
||||
* @param None.
|
||||
* @return None.
|
||||
*/
|
||||
static inline void print_boot_banner(void)
|
||||
{
|
||||
printf("GLOBAL EMBEDDED RESPONSE NETWORK\r\n");
|
||||
printf("BLACK START WINDOW: 27 MINUTES\r\n");
|
||||
printf("UART0 115200 8N1 | AUTHORIZED LAB CONSOLE\r\n");
|
||||
printf("SIGNAL: NORMAL\r\n");
|
||||
printf("RESPONSE> ");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Print the recurring grid classification and dispatch authorization report.
|
||||
*
|
||||
* Evaluates the current operator state and dispatch state flags and transmits
|
||||
* the formatted status report over UART0 with the quarantined frame notification.
|
||||
*
|
||||
* @param None.
|
||||
* @return None.
|
||||
*/
|
||||
static inline void print_status(void)
|
||||
{
|
||||
printf("GRID STATUS: %s\r\n", operator_state ? "STABLE" : "CRITICAL");
|
||||
printf("DISPATCH PATH: %s\r\n", dispatch_state ? "AUTHORIZED" : "HELD");
|
||||
printf("LAST FRAME: QUARANTINED\r\n");
|
||||
printf("RESPONSE> ");
|
||||
}
|
||||
|
||||
#endif // CONSOLE_H
|
||||
@@ -0,0 +1,85 @@
|
||||
// MIT License
|
||||
//
|
||||
// Copyright (c) 2026 Kevin Thomas
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
//
|
||||
// Author: Kevin Thomas
|
||||
// Email: kevin@mytechnotalent.com
|
||||
// GitHub: https://github.com/mytechnotalent
|
||||
// File: grid.h
|
||||
// Desc: Declares the grid telemetry and safety evaluation interface for
|
||||
// Operation Black Start.
|
||||
// Created: 2026
|
||||
|
||||
#ifndef GRID_H
|
||||
#define GRID_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
// Safety margin (Hz deviation x100) below which grid frequency is tolerable.
|
||||
// BUG: emergency build miscompiled this far too permissive; correct value is 60.
|
||||
#define SAFE_THRESHOLD 95
|
||||
|
||||
// Frozen grid frequency deviation reading latched when comms were severed.
|
||||
extern volatile uint32_t grid_deviation;
|
||||
|
||||
// Operator-facing classification of the frozen reading (drives GRID STATUS).
|
||||
extern volatile uint32_t operator_state;
|
||||
|
||||
// Automated dispatch authorization decision (drives DISPATCH PATH).
|
||||
extern volatile uint32_t dispatch_state;
|
||||
|
||||
// Quarantined black-start authorization frame, retained in flash, never sent.
|
||||
static volatile const char dispatch_frame[] =
|
||||
"WORLDGRID:BLACKSTART:GRID-7:WATER-3";
|
||||
|
||||
static inline void retain_dispatch_frame(void)
|
||||
{
|
||||
volatile char frame_marker = dispatch_frame[0];
|
||||
(void)frame_marker;
|
||||
}
|
||||
|
||||
static inline void evaluate_grid(void)
|
||||
{
|
||||
operator_state = (grid_deviation < SAFE_THRESHOLD) ? 1 : 0;
|
||||
dispatch_state = (grid_deviation < SAFE_THRESHOLD) ? 1 : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Anchor the hidden dispatch frame in flash without transmitting it.
|
||||
*
|
||||
* Reads the first character of the quarantined black-start authorization
|
||||
* frame into a volatile local marker to prevent the compiler from optimizing
|
||||
* out the string literal from .rodata flash storage.
|
||||
*
|
||||
* @param None.
|
||||
* @return None.
|
||||
*/
|
||||
/**
|
||||
* @brief Classify the frozen telemetry reading against the compiled threshold.
|
||||
*
|
||||
* Evaluates the frozen grid deviation reading against SAFE_THRESHOLD twice,
|
||||
* once for the operator-facing status line and once for the automated
|
||||
* dispatch decision, mirroring the duplicated immediate comparison site.
|
||||
*
|
||||
* @param None.
|
||||
* @return None.
|
||||
*/
|
||||
#endif // GRID_H
|
||||
@@ -0,0 +1,121 @@
|
||||
# This is a copy of <PICO_SDK_PATH>/external/pico_sdk_import.cmake
|
||||
|
||||
# This can be dropped into an external project to help locate this SDK
|
||||
# It should be include()ed prior to project()
|
||||
|
||||
# Copyright 2020 (c) 2020 Raspberry Pi (Trading) Ltd.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
||||
# following conditions are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
|
||||
# disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
|
||||
# disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products
|
||||
# derived from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH))
|
||||
set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})
|
||||
message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')")
|
||||
endif ()
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT))
|
||||
set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT})
|
||||
message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')")
|
||||
endif ()
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH))
|
||||
set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH})
|
||||
message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')")
|
||||
endif ()
|
||||
|
||||
if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_TAG} AND (NOT PICO_SDK_FETCH_FROM_GIT_TAG))
|
||||
set(PICO_SDK_FETCH_FROM_GIT_TAG $ENV{PICO_SDK_FETCH_FROM_GIT_TAG})
|
||||
message("Using PICO_SDK_FETCH_FROM_GIT_TAG from environment ('${PICO_SDK_FETCH_FROM_GIT_TAG}')")
|
||||
endif ()
|
||||
|
||||
if (PICO_SDK_FETCH_FROM_GIT AND NOT PICO_SDK_FETCH_FROM_GIT_TAG)
|
||||
set(PICO_SDK_FETCH_FROM_GIT_TAG "master")
|
||||
message("Using master as default value for PICO_SDK_FETCH_FROM_GIT_TAG")
|
||||
endif()
|
||||
|
||||
set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK")
|
||||
set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable")
|
||||
set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK")
|
||||
set(PICO_SDK_FETCH_FROM_GIT_TAG "${PICO_SDK_FETCH_FROM_GIT_TAG}" CACHE FILEPATH "release tag for SDK")
|
||||
|
||||
if (NOT PICO_SDK_PATH)
|
||||
if (PICO_SDK_FETCH_FROM_GIT)
|
||||
include(FetchContent)
|
||||
set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR})
|
||||
if (PICO_SDK_FETCH_FROM_GIT_PATH)
|
||||
get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
|
||||
endif ()
|
||||
FetchContent_Declare(
|
||||
pico_sdk
|
||||
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
|
||||
GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG}
|
||||
)
|
||||
|
||||
if (NOT pico_sdk)
|
||||
message("Downloading Raspberry Pi Pico SDK")
|
||||
# GIT_SUBMODULES_RECURSE was added in 3.17
|
||||
if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.17.0")
|
||||
FetchContent_Populate(
|
||||
pico_sdk
|
||||
QUIET
|
||||
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
|
||||
GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG}
|
||||
GIT_SUBMODULES_RECURSE FALSE
|
||||
|
||||
SOURCE_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-src
|
||||
BINARY_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-build
|
||||
SUBBUILD_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-subbuild
|
||||
)
|
||||
else ()
|
||||
FetchContent_Populate(
|
||||
pico_sdk
|
||||
QUIET
|
||||
GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
|
||||
GIT_TAG ${PICO_SDK_FETCH_FROM_GIT_TAG}
|
||||
|
||||
SOURCE_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-src
|
||||
BINARY_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-build
|
||||
SUBBUILD_DIR ${FETCHCONTENT_BASE_DIR}/pico_sdk-subbuild
|
||||
)
|
||||
endif ()
|
||||
|
||||
set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR})
|
||||
endif ()
|
||||
set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE})
|
||||
else ()
|
||||
message(FATAL_ERROR
|
||||
"SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git."
|
||||
)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
|
||||
if (NOT EXISTS ${PICO_SDK_PATH})
|
||||
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found")
|
||||
endif ()
|
||||
|
||||
set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake)
|
||||
if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE})
|
||||
message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK")
|
||||
endif ()
|
||||
|
||||
set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)
|
||||
|
||||
include(${PICO_SDK_INIT_CMAKE_FILE})
|
||||
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Verify every technical claim of Operation Black Start against CTF-01.bin.
|
||||
|
||||
Exits 0 only when every address, byte, and hash in CTF-R.md and CTF-S.md
|
||||
matches the shipped image.
|
||||
"""
|
||||
import hashlib
|
||||
import struct
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
BASE = 0x10000000
|
||||
ROOT = Path(__file__).resolve().parent.parent
|
||||
BIN = ROOT / "CTF-01.bin"
|
||||
UF2 = ROOT / "CTF-01.uf2"
|
||||
|
||||
EXPECTED_BIN_SHA = "425591ac17ff4c22206286ee6f40b06a89523483804850a41854a9b6f89d7b70"
|
||||
EXPECTED_UF2_SHA = "b1552ee3bb5763d96c65d8df1c86984ee842ef1a823fdf5d94132b1e10ff9d16"
|
||||
|
||||
CMP_A = 0x100001FC
|
||||
CMP_B = 0x1000020A
|
||||
STRING_SIGNAL = 0x10003678
|
||||
STRING_FRAME = 0x100037A0
|
||||
LOOP_BACK = 0x10000266
|
||||
|
||||
RESULTS = []
|
||||
|
||||
|
||||
def check(label, ok, detail=""):
|
||||
"""Record one verification result.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
label : str
|
||||
Human-readable check name.
|
||||
ok : bool
|
||||
Whether the check passed.
|
||||
detail : str
|
||||
Extra context printed with the result.
|
||||
|
||||
Returns
|
||||
-------
|
||||
None
|
||||
"""
|
||||
RESULTS.append(ok)
|
||||
print(f"[{'PASS' if ok else 'FAIL'}] {label} {detail}")
|
||||
|
||||
|
||||
def main():
|
||||
"""Run all verification checks.
|
||||
|
||||
Returns
|
||||
-------
|
||||
int
|
||||
Zero when every check passes, else one.
|
||||
"""
|
||||
data = BIN.read_bytes()
|
||||
check("CTF-01.bin SHA-256", hashlib.sha256(data).hexdigest() == EXPECTED_BIN_SHA)
|
||||
check("CTF-01.uf2 SHA-256",
|
||||
hashlib.sha256(UF2.read_bytes()).hexdigest() == EXPECTED_UF2_SHA)
|
||||
check("vector table", data[0:32].hex() ==
|
||||
"002008205b0100101b0100101d01001011010010110100101101001011010010")
|
||||
check("initial SP", struct.unpack("<I", data[0:4])[0] == 0x20082000)
|
||||
check("reset vector", struct.unpack("<I", data[4:8])[0] == 0x1000015B)
|
||||
check("compare site A", data[CMP_A - BASE:CMP_A - BASE + 2]
|
||||
== bytes.fromhex("5E2B"), "(cmp r3,#94)")
|
||||
check("compare site B", data[CMP_B - BASE:CMP_B - BASE + 2]
|
||||
== bytes.fromhex("5E2B"), "(cmp r3,#94)")
|
||||
check("loop back-edge", data[LOOP_BACK - BASE:LOOP_BACK - BASE + 2]
|
||||
== bytes.fromhex("E5E7"), "(b.n 0x10000234)")
|
||||
check("SIGNAL banner", data[STRING_SIGNAL - BASE:STRING_SIGNAL - BASE + 15]
|
||||
== b"SIGNAL: NORMAL\r")
|
||||
check("dispatch frame", data[STRING_FRAME - BASE:STRING_FRAME - BASE + 36]
|
||||
== b"WORLDGRID:BLACKSTART:GRID-7:WATER-3\x00")
|
||||
check("grid_deviation init", data[0x3D94:0x3D98] == struct.pack("<I", 87))
|
||||
total = sum(RESULTS)
|
||||
print(f"\n{total}/{len(RESULTS)} checks passed")
|
||||
return 0 if total == len(RESULTS) else 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
@@ -0,0 +1 @@
|
||||
#include "console.h"
|
||||
@@ -0,0 +1,6 @@
|
||||
#include "grid.h"
|
||||
#include <stdint.h>
|
||||
|
||||
volatile uint32_t grid_deviation = 87;
|
||||
volatile uint32_t operator_state = 0;
|
||||
volatile uint32_t dispatch_state = 0;
|
||||
@@ -0,0 +1,56 @@
|
||||
// MIT License
|
||||
//
|
||||
// Copyright (c) 2026 Kevin Thomas
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
// of this software and associated documentation files (the "Software"), to deal
|
||||
// in the Software without restriction, including without limitation the rights
|
||||
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
// copies of the Software, and to permit persons to whom the Software is
|
||||
// furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in all
|
||||
// copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
// SOFTWARE.
|
||||
//
|
||||
// Author: Kevin Thomas
|
||||
// Email: kevin@mytechnotalent.com
|
||||
// GitHub: https://github.com/mytechnotalent
|
||||
// File: main.c
|
||||
// Desc: Main entry point for the Operation Black Start CTF relay firmware.
|
||||
// Created: 2026
|
||||
|
||||
#include "console.h"
|
||||
#include "grid.h"
|
||||
#include "pico/stdlib.h"
|
||||
|
||||
/**
|
||||
* @brief Run the recurring UART evidence stream for the isolated CTF image.
|
||||
*
|
||||
* Initializes the standard I/O subsystems, anchors the quarantined dispatch
|
||||
* frame in flash memory, evaluates the frozen telemetry against the compiled
|
||||
* safety threshold, prints the startup banner, and repeatedly emits the
|
||||
* system status report every second.
|
||||
*
|
||||
* @param None.
|
||||
* @return int Standard exit code (never reached in normal firmware execution).
|
||||
*/
|
||||
int main(void)
|
||||
{
|
||||
stdio_init_all();
|
||||
retain_dispatch_frame();
|
||||
evaluate_grid();
|
||||
print_boot_banner();
|
||||
while (true) {
|
||||
print_status();
|
||||
sleep_ms(1000);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
[
|
||||
{
|
||||
"short_name": "RP2040",
|
||||
"id": "0xe48bff56",
|
||||
"description": "Raspberry Pi RP2040"
|
||||
},
|
||||
{
|
||||
"short_name": "RP2350-ARM-S",
|
||||
"id": "0xe48bff59",
|
||||
"description": "Raspberry Pi RP2350, ARM, Secure"
|
||||
},
|
||||
{
|
||||
"short_name": "RP2350-ARM-NS",
|
||||
"id": "0xe48bff5a",
|
||||
"description": "Raspberry Pi RP2350, ARM, Non-Secure"
|
||||
},
|
||||
{
|
||||
"short_name": "RP2350-RISCV",
|
||||
"id": "0xe48bff5b",
|
||||
"description": "Raspberry Pi RP2350, RISC-V"
|
||||
}
|
||||
]
|
||||
Loaded 100 of 648 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user