×

SparkFun will be closed on Tuesday, December 24th, and Wednesday, December 25th, in observance of the Christmas holiday. Any orders qualifying for same day shipping placed after 2:00 p.m. (MST) on Monday, December 23rd, will be processed on Thursday, December 26th, when we return to regular business hours. Wishing you a safe and happy holiday from all of us at SparkFun!

Please note - we will not be available for Local Pick up orders from December 24th-December 27th. If you place an order for Local Pick-Up we will have those ready on Monday, December 30th.

Enginursday: Exploring the Embedded Startup Process

Let's take a look at what makes 'main()' feel so cozy and welcoming - what has to happen to have variables initialized, objects constructed and stacks a-stackin?

Favorited Favorite 2

Artemis, my close friend, has urged me to learn much more about the bare-metal details of getting code running and supporting the familiar features that we often take for granted in C++. It is actually a very interesting topic and a beneficial thing to understand when working on embedded systems. Sadly, however, it is a fairly challenging topic to find information about on the internet - and what you can find is daunting, to say the least.

Since we are not fans of reinventing the wheel we've developed some examples you can follow along with using an Artemis board. After doing so you will know:

  1. How the linker organizes compiled code
  2. How startup code initializes variables
  3. How the stack and heap are managed
  4. How global/static object constructors are conveniently called before you get to main()

Check out the examples, explanation and instructions on the embedded-startup exploration repo!

Here are some useful tools to have along the way:

Artemis Boards

SparkFun RedBoard Artemis Nano

SparkFun RedBoard Artemis Nano

DEV-15443
$16.50
6
SparkFun RedBoard Artemis

SparkFun RedBoard Artemis

DEV-15444
$21.50
10
SparkFun Artemis Development Kit

SparkFun Artemis Development Kit

DEV-16828
$48.50 $21.83

SparkFun Qwiic Speaker Kit

KIT-21230

Debuggers

SparkFun Thing Plus - nRF9160

SparkFun Thing Plus - nRF9160

WRL-17354
$139.95
Silicon Labs BGM220 Explorer Kit

Silicon Labs BGM220 Explorer Kit

DEV-17588
$14.95
1
Segger J-Link EDU Mini

Segger J-Link EDU Mini

PGM-24078
$60.00

Accessories

SparkFun Serial Basic Breakout - CH340C and USB-C

SparkFun Serial Basic Breakout - CH340C and USB-C

DEV-15096
$9.95
9

USB 2.0 Cable A to C - 3 Foot

CAB-15092
Retired


Comments 2 comments

  • Member #134773 / about 5 years ago / 1

    I don't have time at the moment to go through it in great detail, but it looks pretty good! BTW, it's sort of a "walk down memory lane" (hmm... there's an unintended pun there) as it takes me back to the days when we had to use a computer's "front panel" switches to "toggle" the initial program into it, e.g., to get it to load the assembler, linker, or one's object code off either mag tape or paper tape! Back in those days we had to allocate stack space, heap, program space, arrange the interrupt vectors, etc., by hand for every program.

    One very minor nit to pick (one letter!): Under "How Computers Work (quickly)", in a point numbered 3, it says "volatile memory pace" -- I think it should be "space", not "pace" (don't have time at the moment to do a correction in the Git stuff...

    • Liquid Soulder / about 5 years ago / 1

      Wow! As you can probably tell my perspective is very different - coming from the side where I've never had to think about such things until just recently. The barrier to entry today is so wonderfully low - I can get my brother to learn the basics as long as he has a web browser! Thanks for the story. (And thanks for the typo catch - I'll go ahead and fix it)

Related Posts

Recent Posts

Tags


All Tags