Compare commits
28 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
217ebb3a79 | ||
|
|
5063e90960 | ||
|
|
73ced50a21 | ||
|
|
b89c76e3fc | ||
|
|
7bb74b2123 | ||
|
|
0eaa0de3c6 | ||
|
|
3e39a0b927 | ||
|
|
a79ea9bee7 | ||
|
|
34d34975c3 | ||
|
|
72e914069c | ||
|
|
014dab642a | ||
|
|
cb68ff7248 | ||
|
|
55f44f21be | ||
|
|
f38979def1 | ||
|
|
ba27df0b57 | ||
|
|
f39fa8ebef | ||
|
|
5832d097c6 | ||
|
|
2a2879a3b0 | ||
|
|
daea420f17 | ||
|
|
b7884948b2 | ||
|
|
01e9a597c1 | ||
|
|
ae503ee8fb | ||
|
|
4a398df058 | ||
|
|
efb84ccf53 | ||
|
|
a462ab027d | ||
|
|
6da25bced8 | ||
|
|
7cb137968b | ||
|
|
7ae7245956 |
@@ -1,50 +1,56 @@
|
||||
[target.thumbv6m-none-eabi]
|
||||
runner = 'arm-none-eabi-gdb'
|
||||
rustflags = [
|
||||
"-C", "link-arg=-Wl,-Tlink.x",
|
||||
"-C", "link-arg=-nostartfiles",
|
||||
# LLD (shipped with the Rust toolchain) is used as the default linker
|
||||
"-C", "link-arg=-Tlink.x",
|
||||
|
||||
# uncomment to use rustc LLD to link programs (a)
|
||||
# "-C", "link-arg=-Tlink.x",
|
||||
# "-C", "linker=lld",
|
||||
# "-Z", "linker-flavor=ld.lld",
|
||||
# if you run into problems with LLD switch to the GNU linker by commenting out
|
||||
# this line
|
||||
# "-C", "linker=arm-none-eabi-ld",
|
||||
|
||||
# if you need to link to pre-compiled C libraries provided by a C toolchain
|
||||
# use GCC as the linker by commenting out both lines above and then
|
||||
# uncommenting the three lines below
|
||||
# "-C", "linker=arm-none-eabi-gcc",
|
||||
# "-C", "link-arg=-Wl,-Tlink.x",
|
||||
# "-C", "link-arg=-nostartfiles",
|
||||
]
|
||||
|
||||
[target.thumbv7m-none-eabi]
|
||||
runner = 'arm-none-eabi-gdb'
|
||||
rustflags = [
|
||||
"-C", "link-arg=-Wl,-Tlink.x",
|
||||
"-C", "link-arg=-nostartfiles",
|
||||
# the comments under `[target.thumbv6m-none-eabi]` also apply here
|
||||
"-C", "link-arg=-Tlink.x",
|
||||
|
||||
# uncomment to use rustc LLD to link programs (a)
|
||||
# "-C", "link-arg=-Tlink.x",
|
||||
# "-C", "linker=lld",
|
||||
# "-Z", "linker-flavor=ld.lld",
|
||||
# "-C", "linker=arm-none-eabi-ld",
|
||||
|
||||
# "-C", "linker=arm-none-eabi-gcc",
|
||||
# "-C", "link-arg=-Wl,-Tlink.x",
|
||||
# "-C", "link-arg=-nostartfiles",
|
||||
]
|
||||
|
||||
[target.thumbv7em-none-eabi]
|
||||
runner = 'arm-none-eabi-gdb'
|
||||
rustflags = [
|
||||
"-C", "link-arg=-Wl,-Tlink.x",
|
||||
"-C", "link-arg=-nostartfiles",
|
||||
# the comments under `[target.thumbv6m-none-eabi]` also apply here
|
||||
"-C", "link-arg=-Tlink.x",
|
||||
|
||||
# uncomment to use rustc LLD to link programs (a)
|
||||
# "-C", "link-arg=-Tlink.x",
|
||||
# "-C", "linker=lld",
|
||||
# "-Z", "linker-flavor=ld.lld",
|
||||
# "-C", "linker=arm-none-eabi-ld",
|
||||
|
||||
# "-C", "linker=arm-none-eabi-gcc",
|
||||
# "-C", "link-arg=-Wl,-Tlink.x",
|
||||
# "-C", "link-arg=-nostartfiles",
|
||||
]
|
||||
|
||||
[target.thumbv7em-none-eabihf]
|
||||
runner = 'arm-none-eabi-gdb'
|
||||
rustflags = [
|
||||
"-C", "link-arg=-Wl,-Tlink.x",
|
||||
"-C", "link-arg=-nostartfiles",
|
||||
# the comments under `[target.thumbv6m-none-eabi]` also apply here
|
||||
"-C", "link-arg=-Tlink.x",
|
||||
|
||||
# uncomment to use rustc LLD to link programs (a)
|
||||
# "-C", "link-arg=-Tlink.x",
|
||||
# "-C", "linker=lld",
|
||||
# "-Z", "linker-flavor=ld.lld",
|
||||
# "-C", "linker=arm-none-eabi-ld",
|
||||
|
||||
# "-C", "linker=arm-none-eabi-gcc",
|
||||
# "-C", "link-arg=-Wl,-Tlink.x",
|
||||
# "-C", "link-arg=-nostartfiles",
|
||||
]
|
||||
|
||||
# (a) you also need to comment out the other two `link-arg` lines. But note that as of v0.6.0 LLD
|
||||
# has a bug where it mislinks FFI calls and they up crashing the program at runtime
|
||||
1
.github/CODEOWNERS
vendored
Normal file
1
.github/CODEOWNERS
vendored
Normal file
@@ -0,0 +1 @@
|
||||
* @rust-embedded/cortex-m
|
||||
4
.github/bors.toml
vendored
Normal file
4
.github/bors.toml
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
block_labels = ["needs-decision"]
|
||||
delete_merged_branches = true
|
||||
required_approvals = 1
|
||||
status = ["continuous-integration/travis-ci/push"]
|
||||
28
.travis.yml
28
.travis.yml
@@ -2,33 +2,25 @@ language: rust
|
||||
|
||||
matrix:
|
||||
include:
|
||||
- env: TARGET=x86_64-unknown-linux-gnu
|
||||
rust: nightly
|
||||
if: branch = master AND type != pull_request
|
||||
|
||||
- env: TARGET=thumbv6m-none-eabi
|
||||
rust: nightly
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- gcc-arm-none-eabi
|
||||
if: (branch = staging OR branch = trying) OR (type = pull_request AND branch = master)
|
||||
|
||||
- env: TARGET=thumbv7m-none-eabi
|
||||
rust: nightly
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- gcc-arm-none-eabi
|
||||
if: (branch = staging OR branch = trying) OR (type = pull_request AND branch = master)
|
||||
|
||||
- env: TARGET=thumbv7em-none-eabi
|
||||
rust: nightly
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- gcc-arm-none-eabi
|
||||
if: (branch = staging OR branch = trying) OR (type = pull_request AND branch = master)
|
||||
|
||||
- env: TARGET=thumbv7em-none-eabihf
|
||||
rust: nightly
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- gcc-arm-none-eabi
|
||||
if: (branch = staging OR branch = trying) OR (type = pull_request AND branch = master)
|
||||
|
||||
before_install: set -e
|
||||
|
||||
@@ -38,6 +30,9 @@ install:
|
||||
script:
|
||||
- bash ci/script.sh
|
||||
|
||||
after_success:
|
||||
- bash ci/after-success.sh
|
||||
|
||||
after_script: set +e
|
||||
|
||||
cache: cargo
|
||||
@@ -48,6 +43,7 @@ before_cache:
|
||||
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- staging
|
||||
- trying
|
||||
|
||||
|
||||
26
CHANGELOG.md
26
CHANGELOG.md
@@ -5,6 +5,27 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [v0.3.3] - 2018-08-07
|
||||
|
||||
### Changed
|
||||
|
||||
- Stopped recommending LLD as it requires an unstable feature.
|
||||
|
||||
### Fixed
|
||||
|
||||
- The allocator example. It now uses the `#[alloc_error_handler]` attribute
|
||||
instead of the unstable `oom` lang item.
|
||||
|
||||
## [v0.3.2] - 2018-06-19
|
||||
|
||||
### Fixed
|
||||
|
||||
- Bumped the panic-semihosting dependency to fix some examples when compiling with latest nightly.
|
||||
|
||||
## [v0.3.1] - 2018-05-13
|
||||
|
||||
- Document the standard `main` interface issue in the troubleshooting guide.
|
||||
|
||||
## [v0.3.0] - 2018-05-12
|
||||
|
||||
### Changed
|
||||
@@ -168,7 +189,10 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
||||
|
||||
- Initial release
|
||||
|
||||
[Unreleased]: https://github.com/japaric/cortex-m-quickstart/compare/v0.3.0...HEAD
|
||||
[Unreleased]: https://github.com/japaric/cortex-m-quickstart/compare/v0.3.3...HEAD
|
||||
[v0.3.3]: https://github.com/japaric/cortex-m-quickstart/compare/v0.3.2...v0.3.3
|
||||
[v0.3.2]: https://github.com/japaric/cortex-m-quickstart/compare/v0.3.1...v0.3.2
|
||||
[v0.3.1]: https://github.com/japaric/cortex-m-quickstart/compare/v0.3.0...v0.3.1
|
||||
[v0.3.0]: https://github.com/japaric/cortex-m-quickstart/compare/v0.2.7...v0.3.0
|
||||
[v0.2.7]: https://github.com/japaric/cortex-m-quickstart/compare/v0.2.6...v0.2.7
|
||||
[v0.2.6]: https://github.com/japaric/cortex-m-quickstart/compare/v0.2.5...v0.2.6
|
||||
|
||||
37
CODE_OF_CONDUCT.md
Normal file
37
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# The Rust Code of Conduct
|
||||
|
||||
## Conduct
|
||||
|
||||
**Contact**: [Cortex-M team](https://github.com/rust-embedded/wg#the-cortex-m-team)
|
||||
|
||||
* We are committed to providing a friendly, safe and welcoming environment for all, regardless of level of experience, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, nationality, or other similar characteristic.
|
||||
* On IRC, please avoid using overtly sexual nicknames or other nicknames that might detract from a friendly, safe and welcoming environment for all.
|
||||
* Please be kind and courteous. There's no need to be mean or rude.
|
||||
* Respect that people have differences of opinion and that every design or implementation choice carries a trade-off and numerous costs. There is seldom a right answer.
|
||||
* Please keep unstructured critique to a minimum. If you have solid ideas you want to experiment with, make a fork and see how it works.
|
||||
* We will exclude you from interaction if you insult, demean or harass anyone. That is not welcome behavior. We interpret the term "harassment" as including the definition in the [Citizen Code of Conduct](http://citizencodeofconduct.org/); if you have any lack of clarity about what might be included in that concept, please read their definition. In particular, we don't tolerate behavior that excludes people in socially marginalized groups.
|
||||
* Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made uncomfortable by a community member, please contact one of the channel ops or any of the [Cortex-M team][team] immediately. Whether you're a regular contributor or a newcomer, we care about making this community a safe place for you and we've got your back.
|
||||
* Likewise any spamming, trolling, flaming, baiting or other attention-stealing behavior is not welcome.
|
||||
|
||||
## Moderation
|
||||
|
||||
These are the policies for upholding our community's standards of conduct.
|
||||
|
||||
1. Remarks that violate the Rust standards of conduct, including hateful, hurtful, oppressive, or exclusionary remarks, are not allowed. (Cursing is allowed, but never targeting another user, and never in a hateful manner.)
|
||||
2. Remarks that moderators find inappropriate, whether listed in the code of conduct or not, are also not allowed.
|
||||
3. Moderators will first respond to such remarks with a warning.
|
||||
4. If the warning is unheeded, the user will be "kicked," i.e., kicked out of the communication channel to cool off.
|
||||
5. If the user comes back and continues to make trouble, they will be banned, i.e., indefinitely excluded.
|
||||
6. Moderators may choose at their discretion to un-ban the user if it was a first offense and they offer the offended party a genuine apology.
|
||||
7. If a moderator bans someone and you think it was unjustified, please take it up with that moderator, or with a different moderator, **in private**. Complaints about bans in-channel are not allowed.
|
||||
8. Moderators are held to a higher standard than other community members. If a moderator creates an inappropriate situation, they should expect less leeway than others.
|
||||
|
||||
In the Rust community we strive to go the extra step to look out for each other. Don't just aim to be technically unimpeachable, try to be your best self. In particular, avoid flirting with offensive or sensitive issues, particularly if they're off-topic; this all too often leads to unnecessary fights, hurt feelings, and damaged trust; worse, it can drive people away from the community entirely.
|
||||
|
||||
And if someone takes issue with something you said or did, resist the urge to be defensive. Just stop doing what it was they complained about and apologize. Even if you feel you were misinterpreted or unfairly accused, chances are good there was something you could've communicated better — remember that it's your responsibility to make your fellow Rustaceans comfortable. Everyone wants to get along and we are all here first and foremost because we want to talk about cool technology. You will find that people will be eager to assume good intent and forgive as long as you earn their trust.
|
||||
|
||||
The enforcement policies listed above apply to all official embedded WG venues; including official IRC channels (#rust-embedded); GitHub repositories under rust-embedded; and all forums under rust-embedded.org (forum.rust-embedded.org).
|
||||
|
||||
*Adapted from the [Node.js Policy on Trolling](http://blog.izs.me/post/30036893703/policy-on-trolling) as well as the [Contributor Covenant v1.3.0](https://www.contributor-covenant.org/version/1/3/0/).*
|
||||
|
||||
[team]: https://github.com/rust-embedded/wg#the-cortex-m-team
|
||||
11
Cargo.toml
11
Cargo.toml
@@ -2,17 +2,18 @@
|
||||
authors = ["Jorge Aparicio <jorge@japaric.io>"]
|
||||
categories = ["embedded", "no-std"]
|
||||
description = "A template for building applications for ARM Cortex-M microcontrollers"
|
||||
documentation = "https://rust-embedded.github.io/cortex-m-quickstart/cortex_m_quickstart"
|
||||
keywords = ["arm", "cortex-m", "template"]
|
||||
license = "MIT OR Apache-2.0"
|
||||
name = "cortex-m-quickstart"
|
||||
repository = "https://github.com/japaric/cortex-m-quickstart"
|
||||
version = "0.3.0"
|
||||
version = "0.3.4"
|
||||
|
||||
[dependencies]
|
||||
cortex-m = "0.5.0"
|
||||
cortex-m-rt = "0.5.0"
|
||||
cortex-m-semihosting = "0.3.0"
|
||||
panic-semihosting = "0.2.0"
|
||||
cortex-m = "0.5.6"
|
||||
cortex-m-rt = "0.5.3"
|
||||
cortex-m-semihosting = "0.3.1"
|
||||
panic-semihosting = "0.3.0"
|
||||
|
||||
# Uncomment for the panic example.
|
||||
# panic-itm = "0.1.1"
|
||||
|
||||
13
README.md
13
README.md
@@ -2,7 +2,9 @@
|
||||
|
||||
> A template for building applications for ARM Cortex-M microcontrollers
|
||||
|
||||
# [Documentation](https://docs.rs/cortex-m-quickstart)
|
||||
This project is developed and maintained by the [Cortex-M team][team].
|
||||
|
||||
# [Documentation](https://rust-embedded.github.io/cortex-m-quickstart/cortex_m_quickstart)
|
||||
|
||||
# License
|
||||
|
||||
@@ -20,3 +22,12 @@ at your option.
|
||||
Unless you explicitly state otherwise, any contribution intentionally submitted
|
||||
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
|
||||
dual licensed as above, without any additional terms or conditions.
|
||||
|
||||
## Code of Conduct
|
||||
|
||||
Contribution to this crate is organized under the terms of the [Rust Code of
|
||||
Conduct][CoC], the maintainer of this crate, the [Cortex-M team][team], promises
|
||||
to intervene to uphold that code of conduct.
|
||||
|
||||
[CoC]: CODE_OF_CONDUCT.md
|
||||
[team]: https://github.com/rust-embedded/wg#the-cortex-m-team
|
||||
|
||||
3
build.rs
3
build.rs
@@ -12,6 +12,7 @@ fn main() {
|
||||
.unwrap();
|
||||
println!("cargo:rustc-link-search={}", out.display());
|
||||
|
||||
println!("cargo:rerun-if-changed=build.rs");
|
||||
// Only re-run the build script when memory.x is changed,
|
||||
// instead of when any part of the source code changes.
|
||||
println!("cargo:rerun-if-changed=memory.x");
|
||||
}
|
||||
|
||||
20
ci/after-success.sh
Normal file
20
ci/after-success.sh
Normal file
@@ -0,0 +1,20 @@
|
||||
set -euxo pipefail
|
||||
|
||||
main() {
|
||||
cargo doc
|
||||
|
||||
mkdir ghp-import
|
||||
|
||||
curl -Ls https://github.com/davisp/ghp-import/archive/master.tar.gz |
|
||||
tar --strip-components 1 -C ghp-import -xz
|
||||
|
||||
./ghp-import/ghp_import.py target/doc
|
||||
|
||||
set +x
|
||||
git push -fq https://$GH_TOKEN@github.com/$TRAVIS_REPO_SLUG.git gh-pages && echo OK
|
||||
}
|
||||
|
||||
# only publish on successful merges to master
|
||||
if [ $TRAVIS_BRANCH = master ] && [ $TRAVIS_PULL_REQUEST = false ] && [ $TARGET = x86_64-unknown-linux-gnu ]; then
|
||||
main
|
||||
fi
|
||||
@@ -1,7 +1,9 @@
|
||||
set -euxo pipefail
|
||||
|
||||
main() {
|
||||
if [ $TARGET != x86_64-unknown-linux-gnu ]; then
|
||||
rustup target add $TARGET
|
||||
fi
|
||||
}
|
||||
|
||||
main
|
||||
|
||||
@@ -61,10 +61,12 @@ EOF
|
||||
examples+=( $ex )
|
||||
fi
|
||||
|
||||
IFS=,;eval arm-none-eabi-size target/$TARGET/release/examples/"{${examples[*]}}"
|
||||
IFS=,;eval size target/$TARGET/release/examples/"{${examples[*]}}"
|
||||
|
||||
popd
|
||||
rm -rf $td
|
||||
}
|
||||
|
||||
if [ $TARGET != x86_64-unknown-linux-gnu ]; then
|
||||
main
|
||||
fi
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
//! ---
|
||||
|
||||
#![feature(alloc)]
|
||||
#![feature(global_allocator)]
|
||||
#![feature(alloc_error_handler)]
|
||||
#![feature(lang_items)]
|
||||
#![no_main]
|
||||
#![no_std]
|
||||
@@ -25,6 +25,7 @@ extern crate cortex_m_rt as rt;
|
||||
extern crate cortex_m_semihosting as sh;
|
||||
extern crate panic_semihosting;
|
||||
|
||||
use core::alloc::Layout;
|
||||
use core::fmt::Write;
|
||||
|
||||
use alloc_cortex_m::CortexMHeap;
|
||||
@@ -54,9 +55,9 @@ fn main() -> ! {
|
||||
}
|
||||
|
||||
// define what happens in an Out Of Memory (OOM) condition
|
||||
#[lang = "oom"]
|
||||
#[alloc_error_handler]
|
||||
#[no_mangle]
|
||||
pub fn rust_oom() -> ! {
|
||||
pub fn alloc_error(_layout: Layout) -> ! {
|
||||
asm::bkpt();
|
||||
|
||||
loop {}
|
||||
|
||||
@@ -15,28 +15,19 @@
|
||||
//! define a panicking behavior is to link to a [panic handler crate][0]
|
||||
//!
|
||||
//! [0]: https://crates.io/keywords/panic-impl
|
||||
//!
|
||||
//! - Define the `HardFault` handler using the [`exception!`] macro. This handler (function) is
|
||||
//! called when a hard fault exception is raised by the hardware.
|
||||
//!
|
||||
//! [`exception!`]: https://docs.rs/cortex-m-rt/~0.5/cortex_m_rt/macro..html
|
||||
//!
|
||||
//! - Define a default handler using the [`exception!`] macro. This function will be used to handle
|
||||
//! all interrupts and exceptions which have not been assigned a specific handler.
|
||||
|
||||
#![no_main] // <- IMPORTANT!
|
||||
#![no_std]
|
||||
|
||||
extern crate cortex_m;
|
||||
|
||||
#[macro_use(entry, exception)]
|
||||
#[macro_use(entry)]
|
||||
extern crate cortex_m_rt as rt;
|
||||
|
||||
// makes `panic!` print messages to the host stderr using semihosting
|
||||
extern crate panic_semihosting;
|
||||
|
||||
use cortex_m::asm;
|
||||
use rt::ExceptionFrame;
|
||||
|
||||
// the program entry point is ...
|
||||
entry!(main);
|
||||
@@ -47,17 +38,3 @@ fn main() -> ! {
|
||||
asm::bkpt();
|
||||
}
|
||||
}
|
||||
|
||||
// define the hard fault handler
|
||||
exception!(HardFault, hard_fault);
|
||||
|
||||
fn hard_fault(ef: &ExceptionFrame) -> ! {
|
||||
panic!("HardFault at {:#?}", ef);
|
||||
}
|
||||
|
||||
// define the default exception handler
|
||||
exception!(*, default_handler);
|
||||
|
||||
fn default_handler(irqn: i16) {
|
||||
panic!("Unhandled exception (IRQn = {})", irqn);
|
||||
}
|
||||
|
||||
53
src/lib.rs
53
src/lib.rs
@@ -2,9 +2,8 @@
|
||||
//!
|
||||
//! # Dependencies
|
||||
//!
|
||||
//! - Nightly Rust toolchain newer than `nightly-2018-04-08`: `rustup default nightly`
|
||||
//! - Nightly Rust toolchain from 2018-08-28 or newer: `rustup default nightly`
|
||||
//! - Cargo `clone` subcommand: `cargo install cargo-clone`
|
||||
//! - ARM toolchain: `sudo apt-get install gcc-arm-none-eabi` (on Ubuntu)
|
||||
//! - GDB: `sudo apt-get install gdb-arm-none-eabi` (on Ubuntu)
|
||||
//! - OpenOCD: `sudo apt-get install OpenOCD` (on Ubuntu)
|
||||
//! - [Optional] Cargo `add` subcommand: `cargo install cargo-edit`
|
||||
@@ -27,7 +26,7 @@
|
||||
//! 2) Clone this crate
|
||||
//!
|
||||
//! ``` text
|
||||
//! $ git clone cortex-m-quickstart --vers 0.3.0
|
||||
//! $ cargo clone cortex-m-quickstart --vers 0.3.4
|
||||
//! ```
|
||||
//!
|
||||
//! 3) Change the crate name, author and version
|
||||
@@ -135,13 +134,28 @@
|
||||
//!
|
||||
//! # Examples
|
||||
//!
|
||||
//! Check the [examples module](./examples/index.html)
|
||||
//! Check the [examples module][examples]
|
||||
//!
|
||||
//! [examples]: ./examples/index.html
|
||||
//!
|
||||
//! # Troubleshooting
|
||||
//!
|
||||
//! This section contains fixes for common errors encountered when the
|
||||
//! `cortex-m-quickstart` template is misused.
|
||||
//!
|
||||
//! ## Used the standard `main` interface
|
||||
//!
|
||||
//! Error message:
|
||||
//!
|
||||
//! ``` text
|
||||
//! $ cargo build
|
||||
//! Compiling demo v0.1.0 (file:///home/japaric/tmp/demo)
|
||||
//!
|
||||
//! error: requires `start` lang_item
|
||||
//! ```
|
||||
//!
|
||||
//! Solution: Use `#![no_main]` and `entry!` as shown in the [examples].
|
||||
//!
|
||||
//! ## Forgot to launch an OpenOCD instance
|
||||
//!
|
||||
//! Error message:
|
||||
@@ -164,11 +178,13 @@
|
||||
//! ``` text
|
||||
//! $ cargo build
|
||||
//! Compiling demo v0.1.0 (file:///home/japaric/tmp/demo)
|
||||
//! error: linking with `arm-none-eabi-ld` failed: exit code: 1
|
||||
//! error: linking with `rust-lld` failed: exit code: 1
|
||||
//! |
|
||||
//! = note: "arm-none-eabi-gcc" "-L" (..)
|
||||
//! = note: "rust-lld" "-flavor" "gnu" "-L" (..)
|
||||
//! (..)
|
||||
//! = note: rust-lld: error: section '.vector_table' will not fit in region 'FLASH': overflowed by X bytes
|
||||
//! rust-lld: error: section '.vector_table' will not fit in region 'FLASH': overflowed by Y bytes
|
||||
//! (..)
|
||||
//! (..)/ld: region `FLASH' overflowed by XXX bytes
|
||||
//! ```
|
||||
//!
|
||||
//! Solution: Specify your device memory layout in the `memory.x` linker script. See [Usage]
|
||||
@@ -191,24 +207,15 @@
|
||||
//!
|
||||
//! ## Overwrote the original `.cargo/config` file
|
||||
//!
|
||||
//! Error message:
|
||||
//! You won't get an error message but the output binary will be empty
|
||||
//!
|
||||
//! ``` text
|
||||
//! error: linking with `arm-none-eabi-gcc` failed: exit code: 1
|
||||
//! |
|
||||
//! = note: (..)
|
||||
//! (..)
|
||||
//! (..)/crt0.o: In function `_start':
|
||||
//! (.text+0x90): undefined reference to `memset'
|
||||
//! (..)/crt0.o: In function `_start':
|
||||
//! (.text+0xd0): undefined reference to `atexit'
|
||||
//! (..)/crt0.o: In function `_start':
|
||||
//! (.text+0xd4): undefined reference to `__libc_init_array'
|
||||
//! (..)/crt0.o: In function `_start':
|
||||
//! (.text+0xe4): undefined reference to `exit'
|
||||
//! (..)/crt0.o: In function `_start':
|
||||
//! (.text+0x100): undefined reference to `__libc_fini_array'
|
||||
//! collect2: error: ld returned 1 exit status
|
||||
//! $ cargo build && echo OK
|
||||
//! OK
|
||||
//!
|
||||
//! $ size target/thumbv7m-none-eabi/debug/app
|
||||
//! text data bss dec hex filename
|
||||
//! 0 0 0 0 0 target/thumbv7m-none-eabi/debug/app
|
||||
//! ```
|
||||
//!
|
||||
//! Solution: You probably overwrote the original `.cargo/config` instead of appending the default
|
||||
|
||||
Reference in New Issue
Block a user