diff --git a/.vscode/settings.json b/.vscode/settings.json index 84d84c0..a9254a7 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,6 @@ { "cSpell.words": [ + "Bazel", "microcontrollers" ] } \ No newline at end of file diff --git a/_drafts/2020-08-13-Bazel-and-AVR.md b/_drafts/2020-08-13-Bazel-and-AVR.md deleted file mode 100644 index cad66ad..0000000 --- a/_drafts/2020-08-13-Bazel-and-AVR.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -layout: page -title: "Bringing the Bazel build system to 8-bit microcontrollers" -description: "My AVR software development workflow" -date: 2020-08-13 17:30:00 -categories: avr embedded bazel -redirect_from: - - /post/68dk02l4/ - - /68dk02l4/ ---- - -The majority of my programming experience is in the following areas (in no particular order): - - Low level hardware programming - - The [NI Re-configurable I/O](https://www.ni.com/en-ca/shop/compactrio.html) based [Athena system](https://www.ni.com/en-us/shop/hardware/products/roborio-advanced-robotics-controller.html?skuId=65909) - - The [AVR](https://en.wikipedia.org/wiki/AVR_microcontrollers) based [ATmega32u4](https://www.microchip.com/wwwproducts/en/ATmega32u4) - - The [AVR](https://en.wikipedia.org/wiki/AVR_microcontrollers) based [ATmega328p](https://www.microchip.com/wwwproducts/en/ATmega328p) - - High level scripting - - Python - - JavaScript - - Control systems - - [Classical control theory](https://en.wikipedia.org/wiki/Classical_control_theory) - - [Modern control theory](https://en.wikipedia.org/wiki/Control_theory) - -So far on my blog, I have covered each of these areas (and my mis-adventures) *except* AVR programming. Time to change that. - - diff --git a/_drafts/2020-08-24-Bazel-and-AVR.md b/_drafts/2020-08-24-Bazel-and-AVR.md new file mode 100644 index 0000000..ae200bb --- /dev/null +++ b/_drafts/2020-08-24-Bazel-and-AVR.md @@ -0,0 +1,17 @@ +--- +layout: page +title: "Compiling AVR-C code with a modern build system" +description: "Bringing Bazel to 8-bit microcontrollers" +date: 2020-08-24 9:30:00 +categories: avr embedded bazel +redirect_from: + - /post/68dk02l4/ + - /68dk02l4/ +--- + +When writing software for an Arduino, or any other [AVR]()-based device, there are generally three main options. You can use the [Arduino IDE]() with [arduino-cli](), which is in my opinion, a clunky system that is great for high levels of abstraction and teaching people how to program, but lacks any kind of easy customization I am interested in. If you are looking for something more advanced (and works in your favorite IDE), you might look at [PlatformIO](). Finally, you can just program without any Hardware Abstraction Library at all, and use [avr-libc]() along with [avr-gcc]() and [avrdude](). + +This final option is my favorite by far, as it both forces me to think about how the system I am building is actually working "behind the scenes", and lets me do everything exactly the way I want. Unfortunately, when working directly with the AVR system libraries, the only buildsystem / tool that is available (without a lot of extra work) is [Make](). As somebody who spends 90% of his time working with higher-level buildsystems like [Gradle]() and [Bazel](), I don't really like needing to deal with Makefiles, and manually handle dependency loading. This got me thinking. I have spent a lot of time working in Bazel, and cross-compiling for the armv7l platform via the [FRC Toolchain](https://launchpad.net/~wpilib/+archive/ubuntu/toolchain/). How hard can it be to add AVR Toolchain support to Bazel? + +*The answer: Its pretty easy.* +