not logged in | [Login]

Brain barf

This section to be deleted/reformatted/made politically correct at a later date

  • I will not be teaching C or Python - that is completely off-topic and I ask that questions regarding C or Python questions not specific to micropython be taken elsewhere.
  • Basic knowledge of Make will probably help you out as well

Hello, world!

Introduction

Creating a pyboard module is a complicated task all by itself and I don't want to try and learn both C -> pyboard at the same time as ST's CAN hardware all while struggling to push my compiled code to the board (dfu-util is giving me trouble at the moment). Because of all this complexity, I will start by simply creating a "Hello, world!" pyboard module within the stmhal implementation. I'm a Saab fan, so my module consists of the 6 different Saabs that I've owned and allows you to create more on-the-fly.

Assumptions

  • Any content within angle brackets (that's the < and >) is a variable of your choosing
  • The path <root>/ refers to the top level directory of micropython. I am referring to the directory with README.md in it.

Getting started

  1. First, start by downloading the source code, reading the README, and familiarizing yourself with how to compile from source. https://github.com/micropython/micropython
  2. Next you'll need to create two files - <root>/stmhal/<name>.c and <root>/stmhal/<name>.h. Compiling these into the executable is as simple as adding one line below line 112 of <root>/stmhal/Makefile. The new line should simply read saab.c \.
  3. From here on out, I will replace <name> with saab or form of that with different capitalization depending on the use. Any time you see saab, you should replace it with the name of your module and whatever capitalization you see fit.

Writing Your First Lines of Code

  1. We start by declaring a base object with which we can build our new type: const mp_obj_type_t pyb_saab_type = {...}; See line 292 of the LED module for reference. This variable contains lots of metadata about our object: its name, a function that can be used for printing our object, a function to create a new instance and a dictionary with the names of each public method. Lots more metadata can be filled in - just take a look at the definition of mp_obj_type_t.
  2. The first line of this declaration is {&mp_type_type }. So, at a minimum, we have const mp_obj_type_t pyb_saab_type = { {&mp_type_type } };. This is essentially inheritance - giving a base type to our class. The output of Python's type function will depend on what we give this first field. I think it's a bit confusing and not very important for continuing on, so just type that line and move forward with life. :)
  3. Next we give our object a name - the name that will be used via Python. Micropython uses Q-Strings throughout, which simply means we can drop the name of our object in <
  4. Moving forward, we can create stubs for two common methods: those would be printing an instance of our object and creating a new object. We can do this by expanding the previous snippet to This code will be inserted when I get home
    • *** TODO: Finish this section ***