• Chris Swinchatt
  • Sr. Software Engineer
  • UK

Summary

I'm passionate about embedded systems, machine learning, cryptocurrency and functional programming.

I currently work at Arm, Cambridge. I started as a member of the mbed OS connectivity team in 2021, where my responsibilities included maintaining the bluetooth/BLE stack. Later in the year we started working on the Open IoT SDK and Arm Total Solutions. I was also a key member of the team that delivered the Arm DevSummit 2021 TinyML (edge machine learning) demo.

In July 2023, I will move again, this time to a team which works on optimising power consumption in the Linux kernel, primarily for Android. When I was at university, working on the kernel was my dream job, so this is an exciting change for me. I will be responsible for testing methods of scheduling workloads across big.LITTLE cores and dealing with Linux scheduler issues in general as they arise. In the future we may expand from mobile to datacentre and automotive.

Skills

  • C/C++
  • C#
  • x86 asm
  • Arm asm
  • Haskell
  • ASP.Net Core
  • Kubernetes
  • AWS
  • GCP
  • BigTable
  • PyTorch
  • SpaCy
  • TensorFlow
  • NLTK
  • Agile
  • CI/CD
  • DevOps
  • TDD
  • DDD

Selected Work Projects

mbed OS

mbed OS is Arm's RTOS (realtime operating system) for microntrollers. I joined in 2021 as part of the connectivity team, which developed & maintained the connectivity stacks (Wi-Fi, Bluetooth/BLE, 4G/LTE, LoRa). This was my "gearing up" phase at the company and during this time I contributed bug fixes, updated and debugged the bluetooth stack and investigated power savings from the new stack

Open IoT SDK

The IoT SDK helps businesses create IoT software using their choice of components. I moved to this project in early 2022. In this phase of my career at Arm I have mostly focused on integration work:

  • Pigweed - a set of libraries for embedded systems
  • Sanitizers - implemented Address Sanitizer, Undefined Behaviour Sanitizer, and a script for detecting ODR violations

Total Solutions

Arm Total Solutions is a suite of exemplary applications for use cases including keyword search and speech detection (Tiny ML). I primarily worked on this in the summer of 2021 for the DevSummit demo of the same year.

pyedmgr

pyedmgr is a Python library for detecting, commissioning, flashing and communicating with boards and FVPs (fixed virtual platforms).

I started this project in early 2022 with the goal of creating a Python library which would simplify writing integration tests that spin up and flash a board or virtual machine and communicate with the binary running on the device. The project is approximately feature complete and we are now in the process of converting existing tests to use it.

Open Source Contributions

Ocelot

Ocelot is a .Net Core API Gateway. I contributed bug fixes and a small feature.

i3

i3 is a tiling window manager. As they do not accept new featuers, I forked it to add the ability to position status bar items left, right and centre

Selected Personal Projects

RedShift
Redshift

Redshift is a 32-bit operating system kernel for x86. It has a paged memory manager and a priority scheduler, but as a project I have continuously worked on since I was 18, there are a lot of bugs to solve before it becomes stable.

Qwoppy
Qwoppy

A Qwop playing-agent using reinforcement learning (deep Q networks). The main issue to solve in Qwoppy is the performance of the OCR engine (tesseract). Qwoppy is written in Python and the only Python tesseract module runs tesseract in a subprocess, which makes training the agent extremely slow. The options are to either write a new Python tesseract module which wraps the library, or create my own OCR. I am going with option two.flagship

Porpoise
Porpoise

A 64-bit multicore Raspberry Pi OS with a real-time scheduler, intended for single-board computers (i.e. machines about as powerful as a mid-range smartphone).

FunFS
FunFS

A Haskell Ext2 reader, FunFS (functional filesystem) was my undergraduate project. It is capable of reading data from Ext2, 3 and 4 filesystems. Support for writing is possible but the underyling I/O implementation needs to be changed from ByteString to memory mapped I/O. This will make writing possible and also improve random read performance.

MLDisasm
MLDisasm

My postgraduate project, an experiment in using neural translation techniques (training machine neural networks to translate from one language to another) to disassemble machine code into assembly code.