Merge pull request #3269 from embassy-rs/rp-binary-info

rp: use the rp-binary-info crate for binary info.
This commit is contained in:
Dario Nieuwenhuis 2024-08-17 20:18:06 +00:00 committed by GitHub
commit cd4e199065
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
50 changed files with 178 additions and 750 deletions

1
ci.sh
View File

@ -88,6 +88,7 @@ cargo batch \
--- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features time-driver,qspi-as-gpio,rp2040 \ --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv6m-none-eabi --features time-driver,qspi-as-gpio,rp2040 \
--- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv8m.main-none-eabihf --features time-driver,defmt,rp235xa \ --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv8m.main-none-eabihf --features time-driver,defmt,rp235xa \
--- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv8m.main-none-eabihf --features time-driver,log,rp235xa \ --- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv8m.main-none-eabihf --features time-driver,log,rp235xa \
--- build --release --manifest-path embassy-rp/Cargo.toml --target thumbv8m.main-none-eabihf --features time-driver,rp235xa,binary-info \
--- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti,time-driver-any,time \ --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti,time-driver-any,time \
--- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,time-driver-any,time \ --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,time-driver-any,time \
--- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti,time \ --- build --release --manifest-path embassy-stm32/Cargo.toml --target thumbv8m.main-none-eabihf --features stm32l552ze,defmt,exti,time \

View File

@ -105,7 +105,7 @@ _test = []
## ##
## Takes up a little flash space, but picotool can then report the name of your ## Takes up a little flash space, but picotool can then report the name of your
## program and other details. ## program and other details.
binary-info = [ "rt" ] binary-info = ["rt", "dep:rp-binary-info", "rp-binary-info?/binary-info"]
[dependencies] [dependencies]
embassy-sync = { version = "0.6.0", path = "../embassy-sync" } embassy-sync = { version = "0.6.0", path = "../embassy-sync" }
@ -143,6 +143,7 @@ pio = {version= "0.2.1" }
rp2040-boot2 = "0.3" rp2040-boot2 = "0.3"
document-features = "0.2.7" document-features = "0.2.7"
sha2-const-stable = "0.1" sha2-const-stable = "0.1"
rp-binary-info = { version = "0.1.0", optional = true }
[dev-dependencies] [dev-dependencies]
embassy-executor = { version = "0.6.0", path = "../embassy-executor", features = ["arch-std", "executor-thread"] } embassy-executor = { version = "0.6.0", path = "../embassy-executor", features = ["arch-std", "executor-thread"] }

View File

@ -1,34 +0,0 @@
//! Constants for binary info
// Credit: Taken from https://github.com/thejpster/rp-hal-rp2350-public (also licensed Apache 2.0 + MIT).
// Copyright (c) rp-rs organization
/// All Raspberry Pi specified IDs have this tag.
///
/// You can create your own for custom fields.
pub const TAG_RASPBERRY_PI: u16 = super::make_tag(b"RP");
/// Used to note the program name - use with StringEntry
pub const ID_RP_PROGRAM_NAME: u32 = 0x02031c86;
/// Used to note the program version - use with StringEntry
pub const ID_RP_PROGRAM_VERSION_STRING: u32 = 0x11a9bc3a;
/// Used to note the program build date - use with StringEntry
pub const ID_RP_PROGRAM_BUILD_DATE_STRING: u32 = 0x9da22254;
/// Used to note the size of the binary - use with IntegerEntry
pub const ID_RP_BINARY_END: u32 = 0x68f465de;
/// Used to note a URL for the program - use with StringEntry
pub const ID_RP_PROGRAM_URL: u32 = 0x1856239a;
/// Used to note a description of the program - use with StringEntry
pub const ID_RP_PROGRAM_DESCRIPTION: u32 = 0xb6a07c19;
/// Used to note some feature of the program - use with StringEntry
pub const ID_RP_PROGRAM_FEATURE: u32 = 0xa1f4b453;
/// Used to note some whether this was a Debug or Release build - use with StringEntry
pub const ID_RP_PROGRAM_BUILD_ATTRIBUTE: u32 = 0x4275f0d3;
/// Used to note the Pico SDK version used - use with StringEntry
pub const ID_RP_SDK_VERSION: u32 = 0x5360b3ab;
/// Used to note which board this program targets - use with StringEntry
pub const ID_RP_PICO_BOARD: u32 = 0xb63cffbb;
/// Used to note which `boot2` image this program uses - use with StringEntry
pub const ID_RP_BOOT2_NAME: u32 = 0x7f8882e1;
// End of file

View File

@ -1,171 +0,0 @@
//! Handy macros for making Binary Info entries
// Credit: Taken from https://github.com/thejpster/rp-hal-rp2350-public (also licensed Apache 2.0 + MIT).
// Copyright (c) rp-rs organization
/// Generate a static item containing the given environment variable,
/// and return its [`EntryAddr`](super::EntryAddr).
#[macro_export]
macro_rules! binary_info_env {
($tag:expr, $id:expr, $env_var_name:expr) => {
$crate::binary_info_str!($tag, $id, {
let value = concat!(env!($env_var_name), "\0");
// # Safety
//
// We used `concat!` to null-terminate on the line above.
let value_cstr = unsafe { core::ffi::CStr::from_bytes_with_nul_unchecked(value.as_bytes()) };
value_cstr
})
};
}
/// Generate a static item containing the given string, and return its
/// [`EntryAddr`](super::EntryAddr).
///
/// You must pass a numeric tag, a numeric ID, and `&CStr` (which is always
/// null-terminated).
#[macro_export]
macro_rules! binary_info_str {
($tag:expr, $id:expr, $str:expr) => {{
static ENTRY: $crate::binary_info::StringEntry = $crate::binary_info::StringEntry::new($tag, $id, $str);
ENTRY.addr()
}};
}
/// Generate a static item containing the given string, and return its
/// [`EntryAddr`](super::EntryAddr).
///
/// You must pass a numeric tag, a numeric ID, and `&CStr` (which is always
/// null-terminated).
#[macro_export]
macro_rules! binary_info_int {
($tag:expr, $id:expr, $int:expr) => {{
static ENTRY: $crate::binary_info::IntegerEntry = $crate::binary_info::IntegerEntry::new($tag, $id, $int);
ENTRY.addr()
}};
}
/// Generate a static item containing the program name, and return its
/// [`EntryAddr`](super::EntryAddr).
#[macro_export]
macro_rules! binary_info_rp_program_name {
($name:expr) => {
$crate::binary_info_str!(
$crate::binary_info::consts::TAG_RASPBERRY_PI,
$crate::binary_info::consts::ID_RP_PROGRAM_NAME,
$name
)
};
}
/// Generate a static item containing the `CARGO_BIN_NAME` as the program name,
/// and return its [`EntryAddr`](super::EntryAddr).
#[macro_export]
macro_rules! binary_info_rp_cargo_bin_name {
() => {
$crate::binary_info_env!(
$crate::binary_info::consts::TAG_RASPBERRY_PI,
$crate::binary_info::consts::ID_RP_PROGRAM_NAME,
"CARGO_BIN_NAME"
)
};
}
/// Generate a static item containing the program version, and return its
/// [`EntryAddr`](super::EntryAddr).
#[macro_export]
macro_rules! binary_info_rp_program_version {
($version:expr) => {{
$crate::binary_info_str!(
$crate::binary_info::consts::TAG_RASPBERRY_PI,
$crate::binary_info::consts::ID_RP_PROGRAM_VERSION,
$version
)
}};
}
/// Generate a static item containing the `CARGO_PKG_VERSION` as the program
/// version, and return its [`EntryAddr`](super::EntryAddr).
#[macro_export]
macro_rules! binary_info_rp_cargo_version {
() => {
$crate::binary_info_env!(
$crate::binary_info::consts::TAG_RASPBERRY_PI,
$crate::binary_info::consts::ID_RP_PROGRAM_VERSION_STRING,
"CARGO_PKG_VERSION"
)
};
}
/// Generate a static item containing the program URL, and return its
/// [`EntryAddr`](super::EntryAddr).
#[macro_export]
macro_rules! binary_info_rp_program_url {
($url:expr) => {
$crate::binary_info_str!(
$crate::binary_info::consts::TAG_RASPBERRY_PI,
$crate::binary_info::consts::ID_RP_PROGRAM_URL,
$url
)
};
}
/// Generate a static item containing the `CARGO_PKG_HOMEPAGE` as the program URL,
/// and return its [`EntryAddr`](super::EntryAddr).
#[macro_export]
macro_rules! binary_info_rp_cargo_homepage_url {
() => {
$crate::binary_info_env!(
$crate::binary_info::consts::TAG_RASPBERRY_PI,
$crate::binary_info::consts::ID_RP_PROGRAM_URL,
"CARGO_PKG_HOMEPAGE"
)
};
}
/// Generate a static item containing the program description, and return its
/// [`EntryAddr`](super::EntryAddr).
#[macro_export]
macro_rules! binary_info_rp_program_description {
($description:expr) => {
$crate::binary_info_str!(
$crate::binary_info::consts::TAG_RASPBERRY_PI,
$crate::binary_info::consts::ID_RP_PROGRAM_DESCRIPTION,
$description
)
};
}
/// Generate a static item containing whether this is a debug or a release
/// build, and return its [`EntryAddr`](super::EntryAddr).
#[macro_export]
macro_rules! binary_info_rp_program_build_attribute {
() => {
$crate::binary_info_str!(
$crate::binary_info::consts::TAG_RASPBERRY_PI,
$crate::binary_info::consts::ID_RP_PROGRAM_BUILD_ATTRIBUTE,
{
if cfg!(debug_assertions) {
c"debug"
} else {
c"release"
}
}
)
};
}
/// Generate a static item containing the specific board this program runs on,
/// and return its [`EntryAddr`](super::EntryAddr).
#[macro_export]
macro_rules! binary_info_rp_pico_board {
($board:expr) => {
$crate::binary_info_str!(
$crate::binary_info::consts::TAG_RASPBERRY_PI,
$crate::binary_info::consts::ID_RP_PICO_BOARD,
$board
)
};
}
// End of file

View File

@ -1,175 +0,0 @@
//! Code and types for creating Picotool compatible "Binary Info" metadata
//!
//! Add something like this to your program, and compile with the "binary-info"
//! and "rt" features:
//!
//! ```
//! #[link_section = ".bi_entries"]
//! #[used]
//! pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 3] = [
//! embassy_rp::binary_info_rp_program_name!(c"Program Name Here"),
//! embassy_rp::binary_info_rp_cargo_version!(),
//! embassy_rp::binary_info_int!(embassy_rp::binary_info::make_tag(b"JP"), 0x0000_0001, 0x12345678),
//! ];
//! ```
// Credit: Taken from https://github.com/thejpster/rp-hal-rp2350-public (also licensed Apache 2.0 + MIT).
// Copyright (c) rp-rs organization
pub mod consts;
mod types;
pub use types::*;
#[macro_use]
mod macros;
extern "C" {
/// The linker script sets this symbol to have the address of the first
/// entry in the `.bi_entries` section.
static __bi_entries_start: EntryAddr;
/// The linker script sets this symbol to have the address just past the
/// last entry in the `.bi_entries` section.
static __bi_entries_end: EntryAddr;
/// The linker script sets this symbol to have the address of the first
/// entry in the `.data` section.
static __sdata: u32;
/// The linker script sets this symbol to have the address just past the
/// first entry in the `.data` section.
static __edata: u32;
/// The linker script sets this symbol to have the address of the
/// initialisation data for the first entry in the `.data` section (i.e. a
/// flash address, not a RAM address).
static __sidata: u32;
}
/// Picotool can find this block in our ELF file and report interesting
/// metadata.
///
/// The data here tells picotool the start and end flash addresses of our
/// metadata.
#[cfg(feature = "binary-info")]
#[link_section = ".start_block"]
#[used]
pub static PICOTOOL_HEADER: Header = unsafe {
Header::new(
core::ptr::addr_of!(__bi_entries_start),
core::ptr::addr_of!(__bi_entries_end),
&MAPPING_TABLE,
)
};
/// This tells picotool how to convert RAM addresses back into Flash addresses
#[cfg(feature = "binary-info")]
pub static MAPPING_TABLE: [MappingTableEntry; 2] = [
// This is the entry for .data
MappingTableEntry {
source_addr_start: unsafe { core::ptr::addr_of!(__sidata) },
dest_addr_start: unsafe { core::ptr::addr_of!(__sdata) },
dest_addr_end: unsafe { core::ptr::addr_of!(__edata) },
},
// This is the terminating marker
MappingTableEntry::null(),
];
/// Create a 'Binary Info' entry containing the program name
///
/// This is well-known to picotool, and will be displayed if you run `picotool info`.
///
/// * Tag: [`consts::TAG_RASPBERRY_PI`]
/// * ID: [`consts::ID_RP_PROGRAM_NAME`]
pub const fn rp_program_name(name: &'static core::ffi::CStr) -> StringEntry {
StringEntry::new(consts::TAG_RASPBERRY_PI, consts::ID_RP_PROGRAM_NAME, name)
}
/// Create a 'Binary Info' entry containing the program version.
///
/// * Tag: [`consts::TAG_RASPBERRY_PI`]
/// * Id: [`consts::ID_RP_PROGRAM_VERSION_STRING`]
pub const fn rp_program_version(name: &'static core::ffi::CStr) -> StringEntry {
StringEntry::new(consts::TAG_RASPBERRY_PI, consts::ID_RP_PROGRAM_VERSION_STRING, name)
}
/// Create a 'Binary Info' entry with a URL
///
/// * Tag: [`consts::TAG_RASPBERRY_PI`]
/// * Id: [`consts::ID_RP_PROGRAM_URL`]
pub const fn rp_program_url(url: &'static core::ffi::CStr) -> StringEntry {
StringEntry::new(consts::TAG_RASPBERRY_PI, consts::ID_RP_PROGRAM_URL, url)
}
/// Create a 'Binary Info' with the program build date
///
/// * Tag: [`consts::TAG_RASPBERRY_PI`]
/// * Id: [`consts::ID_RP_PROGRAM_BUILD_DATE_STRING`]
pub const fn rp_program_build_date_string(value: &'static core::ffi::CStr) -> StringEntry {
StringEntry::new(consts::TAG_RASPBERRY_PI, consts::ID_RP_PROGRAM_BUILD_DATE_STRING, value)
}
/// Create a 'Binary Info' with the size of the binary
///
/// * Tag: [`consts::TAG_RASPBERRY_PI`]
/// * Id: [`consts::ID_RP_BINARY_END`]
pub const fn rp_binary_end(value: u32) -> IntegerEntry {
IntegerEntry::new(consts::TAG_RASPBERRY_PI, consts::ID_RP_BINARY_END, value)
}
/// Create a 'Binary Info' with a description of the program
///
/// * Tag: [`consts::TAG_RASPBERRY_PI`]
/// * Id: [`consts::ID_RP_PROGRAM_DESCRIPTION`]
pub const fn rp_program_description(value: &'static core::ffi::CStr) -> StringEntry {
StringEntry::new(consts::TAG_RASPBERRY_PI, consts::ID_RP_PROGRAM_DESCRIPTION, value)
}
/// Create a 'Binary Info' with some feature of the program
///
/// * Tag: [`consts::TAG_RASPBERRY_PI`]
/// * Id: [`consts::ID_RP_PROGRAM_FEATURE`]
pub const fn rp_program_feature(value: &'static core::ffi::CStr) -> StringEntry {
StringEntry::new(consts::TAG_RASPBERRY_PI, consts::ID_RP_PROGRAM_FEATURE, value)
}
/// Create a 'Binary Info' with some whether this was a Debug or Release build
///
/// * Tag: [`consts::TAG_RASPBERRY_PI`]
/// * Id: [`consts::ID_RP_PROGRAM_BUILD_ATTRIBUTE`]
pub const fn rp_program_build_attribute(value: &'static core::ffi::CStr) -> StringEntry {
StringEntry::new(consts::TAG_RASPBERRY_PI, consts::ID_RP_PROGRAM_BUILD_ATTRIBUTE, value)
}
/// Create a 'Binary Info' with the Pico SDK version used
///
/// * Tag: [`consts::TAG_RASPBERRY_PI`]
/// * Id: [`consts::ID_RP_SDK_VERSION`]
pub const fn rp_sdk_version(value: &'static core::ffi::CStr) -> StringEntry {
StringEntry::new(consts::TAG_RASPBERRY_PI, consts::ID_RP_SDK_VERSION, value)
}
/// Create a 'Binary Info' with which board this program targets
///
/// * Tag: [`consts::TAG_RASPBERRY_PI`]
/// * Id: [`consts::ID_RP_PICO_BOARD`]
pub const fn rp_pico_board(value: &'static core::ffi::CStr) -> StringEntry {
StringEntry::new(consts::TAG_RASPBERRY_PI, consts::ID_RP_PICO_BOARD, value)
}
/// Create a 'Binary Info' with which `boot2` image this program uses
///
/// * Tag: [`consts::TAG_RASPBERRY_PI`]
/// * Id: [`consts::ID_RP_BOOT2_NAME`]
pub const fn rp_boot2_name(value: &'static core::ffi::CStr) -> StringEntry {
StringEntry::new(consts::TAG_RASPBERRY_PI, consts::ID_RP_BOOT2_NAME, value)
}
/// Create a tag from two ASCII letters.
///
/// ```
/// let tag = embassy_rp::binary_info::make_tag(b"RP");
/// assert_eq!(tag, 0x5052);
/// ```
pub const fn make_tag(c: &[u8; 2]) -> u16 {
u16::from_le_bytes(*c)
}
// End of file

View File

@ -1,195 +0,0 @@
//! Types for the Binary Info system
// Credit: Taken from https://github.com/thejpster/rp-hal-rp2350-public (also licensed Apache 2.0 + MIT).
// Copyright (c) rp-rs organization
/// This is the 'Binary Info' header block that `picotool` looks for in your UF2
/// file/ELF file/Pico in Bootloader Mode to give you useful metadata about your
/// program.
///
/// It should be placed in the first 4096 bytes of flash, so use your `memory.x`
/// to insert a section between `.text` and `.vector_table` and put a static
/// value of this type in that section.
#[repr(C)]
pub struct Header {
/// Must be equal to Picotool::MARKER_START
marker_start: u32,
/// The first in our table of pointers to Entries
entries_start: *const EntryAddr,
/// The last in our table of pointers to Entries
entries_end: *const EntryAddr,
/// The first entry in a null-terminated RAM/Flash mapping table
mapping_table: *const MappingTableEntry,
/// Must be equal to Picotool::MARKER_END
marker_end: u32,
}
impl Header {
/// This is the `BINARY_INFO_MARKER_START` magic value from `picotool`
const MARKER_START: u32 = 0x7188ebf2;
/// This is the `BINARY_INFO_MARKER_END` magic value from `picotool`
const MARKER_END: u32 = 0xe71aa390;
/// Create a new `picotool` compatible header.
///
/// * `entries_start` - the first [`EntryAddr`] in the table
/// * `entries_end` - the last [`EntryAddr`] in the table
/// * `mapping_table` - the RAM/Flash address mapping table
pub const fn new(
entries_start: *const EntryAddr,
entries_end: *const EntryAddr,
mapping_table: &'static [MappingTableEntry],
) -> Self {
let mapping_table = mapping_table.as_ptr();
Self {
marker_start: Self::MARKER_START,
entries_start,
entries_end,
mapping_table,
marker_end: Self::MARKER_END,
}
}
}
// We need this as rustc complains that is is unsafe to share `*const u32`
// pointers between threads. We only allow these to be created with static
// data, so this is OK.
unsafe impl Sync for Header {}
/// This is a reference to an entry. It's like a `&dyn` ref to some type `T:
/// Entry`, except that the run-time type information is encoded into the
/// Entry itself in very specific way.
#[repr(transparent)]
pub struct EntryAddr(*const u32);
// We need this as rustc complains that is is unsafe to share `*const u32`
// pointers between threads. We only allow these to be created with static
// data, so this is OK.
unsafe impl Sync for EntryAddr {}
/// Allows us to tell picotool where values are in the UF2 given their run-time
/// address.
///
/// The most obvious example is RAM variables, which must be found in the
/// `.data` section of the UF2.
#[repr(C)]
pub struct MappingTableEntry {
/// The start address in RAM (or wherever the address picotool finds will
/// point)
pub source_addr_start: *const u32,
/// The start address in flash (or whever the data actually lives in the
/// ELF)
pub dest_addr_start: *const u32,
/// The end address in flash
pub dest_addr_end: *const u32,
}
impl MappingTableEntry {
/// Generate a null entry to mark the end of the list
pub const fn null() -> MappingTableEntry {
MappingTableEntry {
source_addr_start: core::ptr::null(),
dest_addr_start: core::ptr::null(),
dest_addr_end: core::ptr::null(),
}
}
}
// We need this as rustc complains that is is unsafe to share `*const u32`
// pointers between threads. We only allow these to be created with static
// data, so this is OK.
unsafe impl Sync for MappingTableEntry {}
/// This is the set of data types that `picotool` supports.
#[repr(u16)]
pub enum DataType {
/// Raw data
Raw = 1,
/// Data with a size
SizedData = 2,
/// A list of binary data
BinaryInfoListZeroTerminated = 3,
/// A BSON encoded blob
Bson = 4,
/// An Integer with an ID
IdAndInt = 5,
/// A string with an Id
IdAndString = 6,
/// A block device
BlockDevice = 7,
/// GPIO pins, with their function
PinsWithFunction = 8,
/// GPIO pins, with their name
PinsWithName = 9,
/// GPIO pins, with multiple names?
PinsWithNames = 10,
}
/// All Entries start with this common header
#[repr(C)]
struct EntryCommon {
data_type: DataType,
tag: u16,
}
/// An entry which contains both an ID (e.g. `ID_RP_PROGRAM_NAME`) and a pointer
/// to a null-terminated string.
#[repr(C)]
pub struct StringEntry {
header: EntryCommon,
id: u32,
value: *const core::ffi::c_char,
}
impl StringEntry {
/// Create a new `StringEntry`
pub const fn new(tag: u16, id: u32, value: &'static core::ffi::CStr) -> StringEntry {
StringEntry {
header: EntryCommon {
data_type: DataType::IdAndString,
tag,
},
id,
value: value.as_ptr(),
}
}
/// Get this entry's address
pub const fn addr(&self) -> EntryAddr {
EntryAddr(self as *const Self as *const u32)
}
}
// We need this as rustc complains that is is unsafe to share `*const
// core::ffi::c_char` pointers between threads. We only allow these to be
// created with static string slices, so it's OK.
unsafe impl Sync for StringEntry {}
/// An entry which contains both an ID (e.g. `ID_RP_BINARY_END`) and an integer.
#[repr(C)]
pub struct IntegerEntry {
header: EntryCommon,
id: u32,
value: u32,
}
impl IntegerEntry {
/// Create a new `StringEntry`
pub const fn new(tag: u16, id: u32, value: u32) -> IntegerEntry {
IntegerEntry {
header: EntryCommon {
data_type: DataType::IdAndInt,
tag,
},
id,
value,
}
}
/// Get this entry's address
pub const fn addr(&self) -> EntryAddr {
EntryAddr(self as *const Self as *const u32)
}
}
// End of file

View File

@ -9,6 +9,9 @@
// This mod MUST go first, so that the others see its macros. // This mod MUST go first, so that the others see its macros.
pub(crate) mod fmt; pub(crate) mod fmt;
#[cfg(feature = "binary-info")]
pub use rp_binary_info as binary_info;
#[cfg(feature = "critical-section-impl")] #[cfg(feature = "critical-section-impl")]
mod critical_section_impl; mod critical_section_impl;
@ -16,8 +19,6 @@ mod intrinsics;
pub mod adc; pub mod adc;
#[cfg(feature = "_rp235x")] #[cfg(feature = "_rp235x")]
pub mod binary_info;
#[cfg(feature = "_rp235x")]
pub mod block; pub mod block;
#[cfg(feature = "rp2040")] #[cfg(feature = "rp2040")]
pub mod bootsel; pub mod bootsel;

View File

@ -21,10 +21,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
bind_interrupts!(struct Irqs { bind_interrupts!(struct Irqs {

View File

@ -21,10 +21,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
bind_interrupts!(struct Irqs { bind_interrupts!(struct Irqs {

View File

@ -28,10 +28,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
#[embassy_executor::main] #[embassy_executor::main]

View File

@ -21,10 +21,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
#[embassy_executor::main] #[embassy_executor::main]

View File

@ -23,10 +23,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
enum LedState { enum LedState {

View File

@ -23,10 +23,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
type LedType = Mutex<ThreadModeRawMutex, Option<Output<'static>>>; type LedType = Mutex<ThreadModeRawMutex, Option<Output<'static>>>;

View File

@ -18,10 +18,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
#[embassy_executor::main] #[embassy_executor::main]

View File

@ -19,10 +19,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
pub struct Debouncer<'a> { pub struct Debouncer<'a> {

View File

@ -19,10 +19,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
const ADDR_OFFSET: u32 = 0x100000; const ADDR_OFFSET: u32 = 0x100000;

View File

@ -21,10 +21,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
/// It requires an external signal to be manually triggered on PIN 16. For /// It requires an external signal to be manually triggered on PIN 16. For

View File

@ -20,10 +20,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
#[embassy_executor::main] #[embassy_executor::main]

View File

@ -24,10 +24,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
bind_interrupts!(struct Irqs { bind_interrupts!(struct Irqs {

View File

@ -19,10 +19,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
// Our anonymous hypotetical temperature sensor could be: // Our anonymous hypotetical temperature sensor could be:

View File

@ -22,10 +22,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
#[allow(dead_code)] #[allow(dead_code)]

View File

@ -19,10 +19,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
bind_interrupts!(struct Irqs { bind_interrupts!(struct Irqs {

View File

@ -33,10 +33,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
static COUNTER: AtomicU32 = AtomicU32::new(0); static COUNTER: AtomicU32 = AtomicU32::new(0);

View File

@ -24,10 +24,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
static mut CORE1_STACK: Stack<4096> = Stack::new(); static mut CORE1_STACK: Stack<4096> = Stack::new();

View File

@ -74,10 +74,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
#[embassy_executor::task] #[embassy_executor::task]

View File

@ -20,10 +20,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
bind_interrupts!(struct Irqs { bind_interrupts!(struct Irqs {

View File

@ -21,10 +21,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
bind_interrupts!(struct Irqs { bind_interrupts!(struct Irqs {

View File

@ -26,10 +26,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
bind_interrupts!(pub struct Irqs { bind_interrupts!(pub struct Irqs {

View File

@ -29,10 +29,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
bind_interrupts!(struct Irqs { bind_interrupts!(struct Irqs {

View File

@ -22,10 +22,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
const REFRESH_INTERVAL: u64 = 20000; const REFRESH_INTERVAL: u64 = 20000;

View File

@ -21,10 +21,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
bind_interrupts!(struct Irqs { bind_interrupts!(struct Irqs {

View File

@ -22,10 +22,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
const DEFAULT_MIN_PULSE_WIDTH: u64 = 1000; // uncalibrated default, the shortest duty cycle sent to a servo const DEFAULT_MIN_PULSE_WIDTH: u64 = 1000; // uncalibrated default, the shortest duty cycle sent to a servo

View File

@ -25,10 +25,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
bind_interrupts!(struct Irqs { bind_interrupts!(struct Irqs {

View File

@ -27,10 +27,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
bind_interrupts!(struct Irqs { bind_interrupts!(struct Irqs {

View File

@ -20,10 +20,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
#[embassy_executor::main] #[embassy_executor::main]

View File

@ -19,10 +19,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
#[embassy_executor::main] #[embassy_executor::main]

View File

@ -21,10 +21,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
#[embassy_executor::main] #[embassy_executor::main]

View File

@ -27,10 +27,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
type Spi1Bus = Mutex<NoopRawMutex, Spi<'static, SPI1, spi::Async>>; type Spi1Bus = Mutex<NoopRawMutex, Spi<'static, SPI1, spi::Async>>;

View File

@ -40,10 +40,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
type UartAsyncMutex = mutex::Mutex<CriticalSectionRawMutex, UartTx<'static, UART0, uart::Async>>; type UartAsyncMutex = mutex::Mutex<CriticalSectionRawMutex, UartTx<'static, UART0, uart::Async>>;

View File

@ -21,10 +21,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
#[embassy_executor::main] #[embassy_executor::main]

View File

@ -19,10 +19,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
#[embassy_executor::main] #[embassy_executor::main]

View File

@ -36,10 +36,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
use crate::my_display_interface::SPIDeviceInterface; use crate::my_display_interface::SPIDeviceInterface;

View File

@ -25,10 +25,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
struct DummyTimesource(); struct DummyTimesource();

View File

@ -20,10 +20,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
#[embassy_executor::main] #[embassy_executor::main]

View File

@ -26,10 +26,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
bind_interrupts!(struct Irqs { bind_interrupts!(struct Irqs {

View File

@ -19,10 +19,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
bind_interrupts!(pub struct Irqs { bind_interrupts!(pub struct Irqs {

View File

@ -25,10 +25,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
bind_interrupts!(struct Irqs { bind_interrupts!(struct Irqs {

View File

@ -38,10 +38,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
bind_interrupts!(struct Irqs { bind_interrupts!(struct Irqs {

View File

@ -22,10 +22,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
#[embassy_executor::main] #[embassy_executor::main]

View File

@ -27,10 +27,10 @@ pub static IMAGE_DEF: ImageDef = ImageDef::secure_exe();
#[link_section = ".bi_entries"] #[link_section = ".bi_entries"]
#[used] #[used]
pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [ pub static PICOTOOL_ENTRIES: [embassy_rp::binary_info::EntryAddr; 4] = [
embassy_rp::binary_info_rp_cargo_bin_name!(), embassy_rp::binary_info::rp_program_name!(c"example"),
embassy_rp::binary_info_rp_cargo_version!(), embassy_rp::binary_info::rp_cargo_version!(),
embassy_rp::binary_info_rp_program_description!(c"Blinky"), embassy_rp::binary_info::rp_program_description!(c"Blinky"),
embassy_rp::binary_info_rp_program_build_attribute!(), embassy_rp::binary_info::rp_program_build_attribute!(),
]; ];
type SampleBuffer = [u16; 512]; type SampleBuffer = [u16; 512];