introduction to firmware design
TRANSCRIPT
![Page 1: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/1.jpg)
16 April 2019
1
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Introduction to Firmware
Designor
“Firmware: harder than software.”
16 April 2019
University of Queensland
Pauline Pounds
![Page 2: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/2.jpg)
16 April 2019
2
METR4810 – Mechatronics Team Project 2 Pauline Pounds
But first…
A valuable message about safety…
![Page 3: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/3.jpg)
16 April 2019
3
METR4810 – Mechatronics Team Project 2 Pauline Pounds
![Page 4: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/4.jpg)
16 April 2019
4
METR4810 – Mechatronics Team Project 2 Pauline Pounds
But secondly…
Some house keeping
![Page 5: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/5.jpg)
16 April 2019
5
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Calendar at a glanceWeek Dates Lecture Reviews Demos Assessment submissions
1 25/2 – 1/3 Introduction
2 4/3 – 8/3 Principles of Mechatronic
Systems design
Problem analysis
3 11/3 – 15/3 Previous years
deconstruction case studies
4 18/3 – 22/3 Professional Engineering
Topics
Progress review 1
5 25/3 – 29/3 PCB design tips
6 1/4 – 5/4 Your soldering is (probably)
terrible
7 8/4 – 12/4 Introduction to firmware
design
Progress seminar 25% demo
8 15/4 – 19/4 Introduction to firmware
design
Break 22/4 – 26/4
9 29/4 – 3/5 50% demo
10 6/5 – 10/5 No lecture Progress review
11 13/5 – 17/5 75% demo Preliminary report
12 20/5 – 24/5 Monday lecture!!
13 27/5 – 31/5 Closing lecture Final testing Final report and
reflection
You are here
Q and A sessions
Q and A sessions
![Page 6: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/6.jpg)
16 April 2019
6
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Progress seminars
• All done! Nobody failed! Yay!
• Please make sure you fill out your PAFs
and return them before you leave
• If you haven’t yet returned your PAF sheet
from Progress Review 1, then do so immediately – I AM COMING FOR YOU
![Page 7: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/7.jpg)
16 April 2019
7
METR4810 – Mechatronics Team Project 2 Pauline Pounds
PAF 1 results
• I also now have complete PAF 1 results
– If you are getting less than “C” from your
peers, that’s a fair sign that they are unhappy
with you…
– If your PAF 2 is also <C, I’ll probably want to
talk to you to see if there is a problem
• No PAF 1 result on Blackboard?
– Let me know!
![Page 8: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/8.jpg)
16 April 2019
8
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Seminar and PAF 2 results
• Normally I have a histogram here, but I’m
still waiting on Iain Rudge to send marks
– C’mon, Iain! ಠ_ಠ
– I’ll put them in the online version when finished
• Instead, some general comments:
– OMG, keep to time! 10 mins means 10 mins
– Analysis, analysis, analysis.
– I’m not kidding about this – seriously!
![Page 9: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/9.jpg)
16 April 2019
9
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Marks should all be updated
• People have been asking for PAF results
and other marks
– Happy to oblige!
• With only a few exceptions, all your marks
to-date should be online for your viewing
pleasure
– If not, you and/or someone probably owe me an
assessment or PAF
![Page 10: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/10.jpg)
16 April 2019
10
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Seminar Results
Results available via Blackboard right now!
0
5
10
15
20
25
30
35
N C V
![Page 11: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/11.jpg)
16 April 2019
11
METR4810 – Mechatronics Team Project 2 Pauline Pounds
20182013
2014
2015
2016
2017
Managing your stress levels
• Stress levels have been low all
throughout this year – concerning!
0 1 2 3 4 5 6 7 8 9 10 11 12 13
Str
ess
/MP
a
Time /weeks
2019
![Page 12: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/12.jpg)
16 April 2019
12
METR4810 – Mechatronics Team Project 2 Pauline Pounds
FAQ Roundup
• Can you look at my part design and give me feedback?
– Hell yeah! That’s what I’m here for! Bring it!
• How much will this part cost?
– Uhh... ask Jason Herriot?
• Does “wall plug power pack” include power packs with cables to
the wall, like ATX supplies, laptop power bricks and such?
– No. “Wall plug power pack” means power supplies where the transformer is
integrated into the module that plugs into the wall. This is a safety compliance
thing. Previously students have brought downright dangerous power supplies into
the lab and it was a big problem.
![Page 13: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/13.jpg)
16 April 2019
13
METR4810 – Mechatronics Team Project 2 Pauline Pounds
STC sessions
• More STC sessions have been added for this
week and during the break!
– Hooray!
• You need to book them through URite as
usual
– Hooray?
![Page 14: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/14.jpg)
16 April 2019
14
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Foam extraction
• It has been brought to my attention that
foam dust is Probably Not GreatTM
– You should avoid inhaling it or rubbing it into
your eyes and mucus membranes.
• Not yet sure how much of a problem it will
be, but I’m going to do the following:
– Provide you with goggles
– Provide you with a mini dust sucker to suck dust
– Ask you to please keep your mucus membranes
to yourself
![Page 15: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/15.jpg)
16 April 2019
15
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Onwards!
To firmware and beyond!
![Page 16: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/16.jpg)
16 April 2019
17
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Firmware: OMG what is it?
• The embedded machine code inside a
microcontroller
– Like software, only closer to hardware… so
“firm”-ware
• Unique from software, in that it can write
directly to device physical outputs
– Straight from ‘The Matrix’ to the “Real World”
Let’s talk about microcontrollers…
![Page 17: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/17.jpg)
16 April 2019
18
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Key elements
• Microcontrollers behave like a whole
computer on a chip:
1. Co-locate RAM with working memory
2. Integrated data bus
3. Internal clock sources and timing
4. Input/output hardware (PWM, SPI, CCP, etc)
5. Specialised hardware (graphics/audio/RF/etc)
![Page 18: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/18.jpg)
16 April 2019
19
METR4810 – Mechatronics Team Project 2 Pauline Pounds
The legendary PIC 16F84A
![Page 19: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/19.jpg)
16 April 2019
20
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Block diagram that thing…
from pneuhiver.info
![Page 20: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/20.jpg)
16 April 2019
21
METR4810 – Mechatronics Team Project 2 Pauline Pounds
So, what about it?
• Firmware is necessarily low level
– Yes, IDEs help, but if it shields you from the
details, it also shields you from TRUE POWER
– In order of least to most abstracted:
Opcodes > ASM > C > Python > I dunno, Matlab, maybe?
• “Teach me, Sensei – teach me this power!”
– “Grasshopper, the longest code starts with a
single #define”
![Page 21: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/21.jpg)
16 April 2019
22
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Some principles
• Structure everything
– Structure is a lifestyle
• Modularise
– Yes, even into separate files
• Use C
– It’ll make it easier
• No, really: use C (or maybe Python).
– You’ll thank me when you’re older
![Page 22: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/22.jpg)
16 April 2019
23
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Structure is a lifestyle
• Don’t do ANYTHING without structure
“Code without structure is chaos”– a really smart person, probably Dijkstra
• Comments help you understand code, but
good code makes comments less important
![Page 23: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/23.jpg)
16 April 2019
24
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Structure is a lifestyle
Major moving parts
• Front matter
– All the nuts-and-bolts stuff, plus globals
• Main(){}
– Your high-level structure should be visible here
– Your program shouldn’t live in a function
(although this is debatable)
• Client functions
– All the stuff commonly reused, outside of loops
![Page 24: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/24.jpg)
16 April 2019
25
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Structure is a lifestyle
• One some level, you write code like a report
– Start with a “skeleton” outline of what the
program must do
– Flesh out the details incrementally
• Of course, you want to be testing each
functional block of code as you go…
![Page 25: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/25.jpg)
16 April 2019
26
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Structure is a lifestyle
• Start broad and work your way down
1. Main/functions first (high level)
2. loops/switches (intermediate level)
3. Conditionals/function calls (low level)
4. Operations (details)
This is all the “block diagram stuff”
Do this Then this Repeat
![Page 26: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/26.jpg)
16 April 2019
27
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Structure is a lifestyle
• Begin with pseudocode
– Write it out in words, then add details
Eg.:Get the next value;
If the value passes the test;
Store it for use later;
Then:read(var); //Get next value
if(var > foo){ //Test value
buf = var; //Store for reuse
}
![Page 27: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/27.jpg)
16 April 2019
28
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Structure is a lifestyle
• If you do it right, you get complete code
with integrated comments for free!
• Also check out “Literate programming”
– Natural language explanation of process flow
intertwined with code
– Easy to read, easy to write
![Page 28: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/28.jpg)
16 April 2019
29
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Modular Me
• Code reuse is made of God and Win
– A lazy programmer is an efficient programmer
• Modular code is also easier to manage
– Easy to “drop in” new functionality
– Especially important for firmware, where
porting from one processor to another is an all-
too-common chore
![Page 29: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/29.jpg)
16 April 2019
30
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Modular Me
• Consider:
– A specific header file for each particular
microprocessor you use (almost mandatory!)
– A separate source file and header file for each
peripheral IC
– A separate source file for each common major
hardware function (eg. can.c, spi.c)
A source map isn’t a bad idea after a while…
![Page 30: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/30.jpg)
16 April 2019
31
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Modular Me
Example:#ifndef PIC18F14K22_H
#define PIC18F14K22_H
#define TMR0IF (INTCON.F2)
#define TMR0IE (INTCON.F5)
#define PEIE (INTCON.F6)
#define GIEL (INTCON.F6)
#define GIE (INTCON.F7)
#define GIEH (INTCON.F7)
#define INTEDG0 (INTCON2.F6)
#define INTEDG1 (INTCON2.F5)
#define INTEDG2 (INTCON2.F4)
![Page 31: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/31.jpg)
16 April 2019
32
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Use C
• C is the screwdriver of firmware languages
– The number of things it’s good for vastly
outnumber the things it isn’t good for
• Almost everything compiles C
– Everything embedded DOES compile C
• If your firmware needs something C can’t
do, you’re probably doing it wrong
![Page 32: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/32.jpg)
16 April 2019
33
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Use C
• If you are not using C, it’s because:
– A. You’re doing something very specialised
that uses arcane language extensions that C
simply cannot support
– B. Your boss/manager is a moron who insists
on using the latest Agile-Cloud-Based-
Buzzword-On-Rails mumbo jumbo
– C. You’re just scared of it and need to step up
to the challenge?
![Page 33: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/33.jpg)
16 April 2019
34
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Kernels
• Kernels mediate between hardware
processes and application software layers
• Most embedded tasks are on-going,
continuous, repeating processes
– A simple kernel makes program flow really
straight-forward to manage
– Ideally suitable for dynamic control
![Page 34: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/34.jpg)
16 April 2019
35
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Kernels
• A really small kernel is a snap to write:
interrupt(){/**interrupt handling, asynchronous stuff**/}
main(){
hardware_setup();
while(1){
if(timing_flag){ //Regulate process loop rate
service_routines(); //Reset timers, flags
io_process(); //Read/write ports, flush buffers
application_process1();
application_process2(); //etc; can be dynamic
}
whenever_routines(); //Quick stuff, eg. poll loops
}
}
![Page 35: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/35.jpg)
16 April 2019
36
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Rules for beginners (and everybody)
• Keep it simple – really simple!
– Short routines, broken out into files by function
• Be one with your micro
– Understand it and the circuit around it, totally
• Use a reliable toolchain – IDE is life
• Start with the biggest micro
– Once it works, then you can optimise/downscale
• Document everything
– Code comments are mandatory!Based on the “15 rules” by 123Jack
![Page 36: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/36.jpg)
16 April 2019
37
METR4810 – Mechatronics Team Project 2 Pauline Pounds
What about the Powah?
“But… I was promised TRUE POWER!This sucks…”
Ok, with well-crafted
firmware and hardware…
![Page 37: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/37.jpg)
16 April 2019
38
METR4810 – Mechatronics Team Project 2 Pauline Pounds
What about the Powah?
• You can get precision instruction timing
that can be accurate down to picoseconds
– I designed a nano-second timer for GPS in C
• You can build a drone from $10 of parts, in
a circuit the size of a 10c coin.
• You can build a remote sensor that works
for five years on a single coin cell.
![Page 38: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/38.jpg)
16 April 2019
39
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Join ussss
• So yeah… firmware is important
• Embrace structure
• Embrace C
• Embrace TRUE POWER
![Page 39: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/39.jpg)
16 April 2019
40
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Questions
![Page 40: Introduction to Firmware Design](https://reader036.vdocuments.us/reader036/viewer/2022062522/62b3bce3ee02b33e3206b105/html5/thumbnails/40.jpg)
16 April 2019
41
METR4810 – Mechatronics Team Project 2 Pauline Pounds
Tune-in next time for…
Questions and Answers Vol. 1
or
“The quick and the decaf”
Fun fact: Boeing writes avionics code in C.