Skip to content
Snippets Groups Projects
Commit 3c6aef08 authored by Per's avatar Per
Browse files

bare1

parent 0ec969ef
No related branches found
No related tags found
No related merge requests found
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
......
//! 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]
......
l 0 → 100644
monitor reset init
\ No newline at end of file
monitor reset init
load
monitor reset init
<?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&#10;"/>
<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&#10;load&#10;&#10;# Set a breakpoint at main().&#10;#tbreak main&#10;&#10;# Run to the breakpoint.&#10;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="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;memoryBlockExpressionList context=&quot;reserved-for-future-use&quot;/&gt;&#10;"/>
<stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/>
</launchConfiguration>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment