Setting Raspberry Pi / Raspbian default locale and keyboard settings

Default locale and keyboard settings on the Raspberry Pi can be configured using raspi-config on Rasbian.

Select option 4 Internationalization, and select options to configure your locale, timezone and connected keyboard layout.

If you’ve installed Raspbian and kept the defaults you probably ended up with a UK keyboard layout, and if you have a US keyboard, you’re wondering why some of your keys are producing unexpected characters 🙂

Calling C printf from ARM ASM

A while back I started to learn some ARM assembly on the Raspberry Pi. In my previous snippets, I was using SWI to do a system call to write to stdout, but it appears syscall 4 to write to stdout only writes Strings – if you have a byte value, this approach doesn’t work (without converting to a String first?)

From this question here, it appears you can call C functions like printf, which seems like cheating a bit, but I guess it gets the job done.

Here’s a quick snippet to add two numbers, and then print the result using printf with a string containing %d to substitute the result into the String:

[code]
.global main
.extern printf
main:
push {ip, lr}
mov r3, #1 /* move 1 to r3 */
mov r4, #2 /* move 2 to r4 */
add r4, r3, r4 /* r4 = r3 + r4 */
_ouput:
ldr r0,=output /* load address of output string */
mov r1, r4 /* move r4 result to r1 to include as param in string */
bl printf /* call printf */
_exit:
MOV R1, #0
MOV R7, #1
SWI 0
.data
output:
.asciz "Result: %d\n"
[/code]

Where previously I was compiling and linking in two steps with as and ld, it seems this doesn’t work if you are referencing C functions too, so for this example, compile with: ‘gcc add.s -o add’

This snippet and a few others I’ve started to collect I’ve shared in a github repo here: https://github.com/kevinhooke/learning-arm-asm

Wiring an Adafruit i2c LCD Pi Plate to an Arduino

I have an Adafruit i2c 2 line LCD Pi Plate that I’ve used for projects with my Raspberry Pi. It has a block of header pins that slot down onto the GPIO pins on the Pi. It seems that it’s pretty similar to other LCDs for the Arduino, so with some reading around and experimenting, it does wire up and work perfectly with the Arduino too. This post gave the me starting point for what pins wired to where.

In summary, this is how I wired it up – the Raspberry Pi pin references are the pin names that the Pi Plate would normally connect to, and which Arduino pins I connected them to:

Pi Plate Pin -> Arduino Pin

Pin2 -> 5v

Pin6/grnd -> grnd

Pin3 -> A4/SDA

Pin5 -> A5/SCL

The Adafruit LCD Arduino library works with the LCD Pi Plate without any other changes.

Cross-compiling ASM using Eclipse on Windows for ARM on the Raspberry Pi

Wow. Let me start by saying getting the right combination of tools setup to do this took more time than learning and writing my first few lines of ARM assembly.

Each of the links below has install and config instructions, so I’m not going to cover all of these again here, but here’s the combination of tools that worked for me:

An alternative toolchain could be the GNU Tools for ARM Embedded, but I couldn’t get my (simple) assembly to compile without unfathomable errors using this one (I tried this first before I tried the Sorcery toolchain).