Overwriting Symbols in the GNU Linker File

I start liking the GNU linker (ld) more and more. Yes, that linker command file syntax needs some time to learn, but it is very powerful. I stumbled over an interesting way how to define linker symbols:

/* Linker file for GNU C Compiler */

/* Entry Point */
ENTRY(Reset_Handler)

HEAP_SIZE  = DEFINED(__heap_size__)  ? __heap_size__  : 0x00000400;
STACK_SIZE = DEFINED(__stack_size__) ? __stack_size__ : 0x00000400;

The interesting part is how the HEAP_SIZE and STACK_SIZE symbols are defined.

It checks if e.g. __heap_size__ is DEFINED, and if so, it uses that symbol, otherwise it is using 0x400. Very similar to the C/C++ ‘?’ operator. So I can overwrite the default of 0x400 with my value or symbol. The questions is: from where does the symbol come from?

Continue reading →

Adding the Wi-Pi WiFi Dongle to the RIoT Android Board

The wired Ethernet connectivity works out of the box with the Freescale RIoT board :-). But to make it more ‘IoT’ capable, a WiFi connection would be a big plus. The element14 site did not tell which WiFi dongles are supported, and a thread in the element14 forum on that topic has not really provided much information. With some risks I decided to order the Wi-Pi WiFi dongle which seems to be popular in the Raspberry Pi community (thus that Wi-Pi name?). And as I anyway have a Raspy, my thinking was that if it does not work with the RIoT board, I still can use it with the Raspy 🙂

Wi-Pi WiFi with the RIoT Board

Wi-Pi WiFi with the RIoT Board

Continue reading →

First Steps with the RIoT Board and Android

At the university we have several projects with internet connectivity running. Yes, there is a hype around IoT, and in my view many false perceptions around this what it could or should be. Anyway, for these projects in many cases the Raspberry Pi boards are used, and I use a model B board of the Raspy too. I’m very happy with the Raspy, but I wanted to explore different options, so I ordered a RIoT board two weeks ago. When I looked at it the first time, I was thinking that this board could be a better (although larger) board than the Raspberry Pi one: more USB, more GPIO, micro-SD card, more processing power:

RIoT Board

RIoT Board

Well, then this week the new Raspberry Pi B+ came out: more USB, more GPIO, but same processing power as the standard B model.

Continue reading →

First Adafruit NeoPixel Blinks with the FRDM Board

LEDs are getting smarter these days. An amazing example are the WS2812(B) or ‘NeoPixels’ from Adafruit: RGB LEDs with a built-in constant current controller and shift register! With a single wire data wire hundreds of RGB LEDs can be controlled. Exactly what I need for a project I had in mind for a very long time. So I ordered a bunch of different LEDs from Adafruit to experiment. Exactly the right thing on dark and rainy week-end. And the result is, well: bright and colorful 🙂

Adafruit NeoPixel LED Ring

Adafruit NeoPixel LED Ring

Continue reading →

Listing Code and Data Size for each Source File with GNU and Eclipse

I have used the ‘classic’ CodeWarrior IDE for years, before I moved over to Eclipse some years ago. And as with any IDE or tool switch, things are different in the ‘new world’. In summary, I don’t want to go back anyway, and Eclipse is my development tool of choice now. But from time to time I get challenged about something like “hey, this was possible in the previous tool, so how can I do the same in Eclipse?”. As a fan of Eclipse, this then gets my attention as I feel that Eclipse can do it, and it can do it better. 😉

So what about this one: In CodeWarrior the project view lists code and data size for each source file:

Code And Data Size in CodeWarrior

Code And Data Size in CodeWarrior

Continue reading →

Replicating an Eclipse Update Site for Offline Usage

In my post “Constructing a Classroom IDE with Eclipse for ARM” I outlined how to build a DIY Eclipse distribution. That way I can build an archive/zip and distribute to my students: it saves them a lot of time, and they do not need to download things from the internet themselves, as I can give them the thing on a memory stick. But what if I want them to give them the update site files for offline usage too? For example CodeWarrior has an online update site:

Online Update Site

Online Update Site

How can I make a local copy of it to use in my classroom?

Continue reading →

Slow 32 kHz Oscillator Startup

In an IoT (Internet of Things, see “IoT: FreeRTOS Down to the Micro Amps“) project I’m using the Freescale KL15Z microcontroller. The nodes are moving around, and the board is using a special inductive charging ‘on the fly’ when nearby the charging station. The energy is stored in capacitors, so no batteries are needed. That worked very well, but some system failed: they need to quickly check sensor signals after power-up. Tracking down the problem, it was obvious that most of the systems failed because it took them too long to boot from the power-on reset. So I instrumented the application to toggle an LED so I can monitor what happens: It was over 400 ms after power-on! Yikes!

413 ms for startup

413 ms for startup

Continue reading →

FILLing unused Memory with the GNU Linker

In many of my applications I use a CRC/checksum to verify that the code/flash on the target is not modified. For this, not only the code/data in flash counts, but as well all the unused gaps in the memory map. Instead to leave it up to the flasher/debugger (which usually erases it to 0xFF), I want to fill it with my pattern. The GNU linker is using the pattern 0x00 for unused bytes inside sections. So this post is about to use the GNU linker to ‘fill’ the uninitalized FLASH memory with a pattern.

FLASH with DeadBeef Pattern

FLASH with DeadBeef Pattern

Continue reading →

Preventing Reverse Engineering: Enabling Flash Security

Now I have invested a lot of time into my application, ready to be flashed on the devices and shipped. But wait: I don’t want that someone can read out the code from my device and have it reverse engineered. For this, I can ‘secure’ the device.

Flash Security Settings

Flash Security Settings

Continue reading →

Programmable Ultrasonic Sensor Shield for FRDM Board

“Note to myself: post articles about what students have done this semester…”

Students have turned in their semester project work. I have set for myself a goal to briefly describe to the ‘outside’ world what they did, as an inspirational source :-). So here is a first article about the project completed by Christoph Bühlmann who developed a shield for the FRDM-KL25Z board: a programmable ultrasonic shield:

Ultrasonic Shield with FRDM-KL25Z

Ultrasonic Shield with Freescale FRDM-KL25Z (Source: Christoph Bühlmann)

Continue reading →