Teaching

I teach these courses annually, either in the autumn or winter session. Further details about the courses can be found on the UQTR University website.

GEI1072: Engineering problem-solving in C

The student acquires knowledge of programming and development in the ANSI C language and applies it to engineering problem-solving through numerical methods. Introduction, history, and general concepts, ANSI C standard. Boolean, binary, and arithmetic operators, basic data types of the C language, conditional and unconditional branching. Functions: declarations, calls, global and local variables, functions with a fixed and variable number of arguments. Arrays: definition, initialization. Pointers: pointer arithmetic, pointers and arrays. Structures: function calls with structures, structures and pointers. Preprocessor directives, macros, input/output, standard libraries, compilation files. Representation of real numbers in fixed and floating-point notation. Numerical solution of engineering problems using function zeros, matrix solution, numerical integration, and solution of differential equations.

GEI1089: Embedded operating systems

Embedded operating systems in general and Linux in particular have been the backbone of embedded computing for many years. The course will guide the student in mastering embedded Linux programming in the order they would encounter in a real project. The first part covers the initial stages of the project, addressing basics such as toolchain selection, bootloader, and kernel. By the end of this part, the concept of using an embedded build tool is introduced, utilizing Buildroot and the Yocto Project as examples.

The second part of the course will focus on project implementation phase. It covers topics like filesystems, init program, multithreaded programming, software updates, and power management. The third part aims to demonstrate to the student how to effectively utilize the numerous debugging and profiling tools Linux offers to identify issues and pinpoint bottlenecks. The final part brings together several threads to explain how Linux can be used in real-time applications.

Given that embedded Linux is poised to play a significant role in the Internet of Things, device updates in the field, including Over the Air updates, are an important aspect to cover. Another trend is the pursuit of power consumption reduction, both to extend device battery life and to cut energy costs. Hence, a dedicated course on power management is designed to illustrate how this is achieved.