diff --git a/.settings/com.github.rustdt.ide.core.prefs b/.settings/com.github.rustdt.ide.core.prefs index a781144342e350f6f1b5cdd9164df2ac2536953e..cee1592168a3e7edefc43f22c3b505ee6d4a84e4 100644 --- a/.settings/com.github.rustdt.ide.core.prefs +++ b/.settings/com.github.rustdt.ide.core.prefs @@ -1,4 +1,4 @@ -build_targets=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\n<build_targets xmlns\="com.github.rustdt.ide.core">\n<target auto_enabled\="false" config\="build" n_enabled\="false" version2\="true">\n<command_invocation append_env\="true" command_arguments\=" xargo build --example bare0&\#10;">\n<env_vars/>\n</command_invocation>\n</target>\n<target auto_enabled\="true" config\="check" n_enabled\="false" version2\="true">\n<command_invocation append_env\="true" command_arguments\="xargo build --example bare0&\#10;">\n<env_vars/>\n</command_invocation>\n</target>\n<target auto_enabled\="false" config\="clean" n_enabled\="false" version2\="true"/>\n</build_targets>\n +build_targets=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?>\n<build_targets xmlns\="com.github.rustdt.ide.core">\n<target auto_enabled\="false" config\="build" n_enabled\="false" version2\="true">\n<command_invocation append_env\="true" command_arguments\=" xargo build --example bare0&\#10;">\n<env_vars/>\n</command_invocation>\n</target>\n<target auto_enabled\="false" config\="check" n_enabled\="false" version2\="true">\n<command_invocation append_env\="true" command_arguments\="xargo build --example bare0&\#10;">\n<env_vars/>\n</command_invocation>\n</target>\n<target auto_enabled\="false" config\="clean" n_enabled\="false" version2\="true"/>\n</build_targets>\n eclipse.preferences.version=1 format_onSave=true racer_path=/home/pln/.cargo/bin/racer diff --git a/examples/bare1.rs b/examples/bare1.rs index 4c5dcee41ec23c933896d03516ce48e6dceec986..696de888efbda691a6d5568a76a8f158ab988978 100644 --- a/examples/bare1.rs +++ b/examples/bare1.rs @@ -1,5 +1,5 @@ //! bare1.rs -//! Simple bare metal application +//! Simple bare metal tracing // feature to ensure symbols to be linked #![feature(used)] @@ -7,30 +7,84 @@ #![no_std] // API to the ARM Cortex M Peripherals -//extern crate cortex_m; +extern crate cortex_m; // Minimal runtime / startup for Cortex-M microcontrollers extern crate cortex_m_rt; // Convenient tracing over semihosting and ITM -// #[macro_use] -// extern crate cortex_m_debug; +#[macro_use] +extern crate cortex_m_debug; #[inline(never)] fn main() { // ITM trace (fast) // start `itmdump` before `openocd` - // ipln!("ITM: Hello World"); + ipln!("ITM: Hello World"); // semihosting trace (slow) - // sprintln!("SEMIHOSTING: Hello World"); + sprintln!("SEMIHOSTING: Hello World"); // to prevent returning loop { // cortex_m::asm::nop(); + // cortex_m::asm::bkpt(); } } +// 1. build and run the application +// start ITM tracing to console +// > itmdump /tmp/itm.log +// start openocd (in my case...) +// > openocd -f interface/stlink.cfg -f target/stm32f4x.cfg +// +// when debugging the application it should get stuck in the +// loop, (press pause/suspend to verify this). +// what is the output in the ITM console +// ** your answer here ** +// +// what is the output in the semihosting (openocd) console +// ** your answer here ** +// +// commit your answers (bare1_1) +// +// 2. inspecting the assembly +// what is shown in the Dissasmbly view, what instruction is executing +// (if you are NOT under eclipse, then give the command in gdb console +// (gdb) disassemble +// ** your answer here ** +// +// commit your answers (bare1_2) +// +// 3. now remove the comment line 30. +// rebuild and debug, pause the program. +// what is shown in the Dissasmbly view, what instruction is executing +// ** your answer here ** +// +// commit your answers (bare1_3) +// +// 4. now remeve the comment line 31 +// what is shown in the Dissasmbly view, what instruction is executing +// ** your answer here ** +// +// commit your answers (bare1_4) +// +// 5. release mode (optimized builds) +// rebuild bare1 in release (optimized mode) +// compare the generated assembly for the loop +// between the dev (unoptimized) and release (optimized) build +// in Atollic/eclipse the easiest way is to build the target using +// > xargo build --release --examples +// in gdb console +// > file target/thumbv7em-none-eabihf/release/examples/bare1 +// so l +// (which sources/executes the gbd script l, which loads the file) +// c +// (to continue executing) +// ** your answer here ** +// +// commit your answers (bare1_5) + // As we are not using interrupts, we just register a dummy catch all handler #[link_section = ".vector_table.interrupts"] #[used] diff --git a/l b/l new file mode 100644 index 0000000000000000000000000000000000000000..683a8e5eb54d6c7aefc4ecf84a84d9a420fc1b06 --- /dev/null +++ b/l @@ -0,0 +1 @@ +monitor reset init \ No newline at end of file diff --git a/r b/r index 683a8e5eb54d6c7aefc4ecf84a84d9a420fc1b06..1bbe365458f4b1a29bfe41b33384cdf19174e4b0 100644 --- a/r +++ b/r @@ -1 +1,3 @@ -monitor reset init \ No newline at end of file +monitor reset init +load +monitor reset init diff --git a/rtfm-app Debug.launch b/rtfm-app Debug.launch deleted file mode 100644 index 84c6946f2977c90130dfc825942375c4c2c48f17..0000000000000000000000000000000000000000 --- a/rtfm-app Debug.launch +++ /dev/null @@ -1,52 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<launchConfiguration type="com.atollic.hardwaredebug.launch.launchConfigurationType"> -<stringAttribute key="com.atollic.hardwaredebug.jlink_common.cpu_core" value="Cortex-M"/> -<stringAttribute key="com.atollic.hardwaredebug.jlink_common.device" value="STM32F401RE"/> -<stringAttribute key="com.atollic.hardwaredebug.jlink_common.endian" value="little"/> -<stringAttribute key="com.atollic.hardwaredebug.jlink_common.init_speed" value="4000"/> -<booleanAttribute key="com.atollic.hardwaredebug.jlink_common.jlink_check_serial_number" value="false"/> -<stringAttribute key="com.atollic.hardwaredebug.jlink_common.jlink_script_path" value=""/> -<booleanAttribute key="com.atollic.hardwaredebug.jlink_common.jlink_script_used" value="false"/> -<stringAttribute key="com.atollic.hardwaredebug.jlink_common.jlink_trace_port_cfg_path" value="/opt/truestudio/ide/plugins/com.atollic.truestudio.tsp.stm32_1.0.0.20171023-2304/tsp/etm/stm32f4xx.init"/> -<stringAttribute key="com.atollic.hardwaredebug.jlink_common.jlink_txt_serial_number" value=""/> -<booleanAttribute key="com.atollic.hardwaredebug.jlink_common.scan_chain_auto" value="true"/> -<intAttribute key="com.atollic.hardwaredebug.jlink_common.scan_chain_irpre" value="0"/> -<intAttribute key="com.atollic.hardwaredebug.jlink_common.scan_chain_pos" value="0"/> -<stringAttribute key="com.atollic.hardwaredebug.jlink_common.selected_rtos" value="No RTOS"/> -<intAttribute key="com.atollic.hardwaredebug.launch.formatVersion" value="2"/> -<stringAttribute key="com.atollic.hardwaredebug.launch.hwinitCommands" value="# Initialize your hardware here "/> -<stringAttribute key="com.atollic.hardwaredebug.launch.ipAddress" value="localhost"/> -<stringAttribute key="com.atollic.hardwaredebug.launch.jtagDevice" value="OpenOCD"/> -<intAttribute key="com.atollic.hardwaredebug.launch.portNumber" value="3333"/> -<stringAttribute key="com.atollic.hardwaredebug.launch.remoteCommand" value="target remote"/> -<stringAttribute key="com.atollic.hardwaredebug.launch.runCommands" value="# Load the program executable load # Set a breakpoint at main(). #tbreak main # Run to the breakpoint. continue"/> -<stringAttribute key="com.atollic.hardwaredebug.launch.serverParam" value=""/> -<booleanAttribute key="com.atollic.hardwaredebug.launch.startServer" value="false"/> -<booleanAttribute key="com.atollic.hardwaredebug.launch.swd_mode" value="false"/> -<stringAttribute key="com.atollic.hardwaredebug.launch.swv_port" value="2332"/> -<stringAttribute key="com.atollic.hardwaredebug.launch.swv_trace_div" value="0"/> -<stringAttribute key="com.atollic.hardwaredebug.launch.swv_trace_hclk" value="16000000"/> -<intAttribute key="com.atollic.hardwaredebug.launch.trace_system" value="0"/> -<booleanAttribute key="com.atollic.hardwaredebug.launch.useRemoteTarget" value="true"/> -<stringAttribute key="com.atollic.hardwaredebug.openocd.server_target" value="remote"/> -<stringAttribute key="org.eclipse.cdt.dsf.gdb.DEBUG_NAME" value="${TOOLCHAIN_PATH}/arm-atollic-eabi-gdb"/> -<booleanAttribute key="org.eclipse.cdt.dsf.gdb.UPDATE_THREADLIST_ON_SUSPEND" value="false"/> -<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/> -<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/> -<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_REGISTER_GROUPS" value=""/> -<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="/home/pln/Atollic/TrueSTUDIO/ARM_workspace_8.1/rtfm-app/target/thumbv7em-none-eabihf/debug/examples/bare0.elf"/> -<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="rtfm-app"/> -<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="false"/> -<stringAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_ID_ATTR" value=""/> -<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> -<listEntry value="/rtfm-app"/> -</listAttribute> -<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> -<listEntry value="4"/> -</listAttribute> -<listAttribute key="org.eclipse.debug.ui.favoriteGroups"> -<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/> -</listAttribute> -<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <memoryBlockExpressionList context="reserved-for-future-use"/> "/> -<stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/> -</launchConfiguration>