NSWI170 Computer Systems


Before you get started, please, make yourself acquainted with authors' ethical guideline. It might prevent future misunderstandings regarding the authorship of your lab assignments.

If you have any questions or suggestions related to the labs, please contact your corresponding teacher.

David Bednárek #nswi170-compsys-bednarek Tuesday 9:00-10:30 (even weeks), N11 labs page
Tomáš Faltín #nswi170-compsys-faltin Thursday 10:40-12:10, N11 labs page
Martin Kruliš #nswi170-compsys-krulis Thursday 12:20-13:50, N8 [English] labs page
Martin Svoboda #nswi170-compsys-svoboda Tuesday 15:40-17:10, N11 labs page
Adam Šmelko #nswi170-compsys-smelko Thursday 14:00-15:30, N11 labs page
Jakub Yaghob #nswi170-compsys-yaghob Tuesday 14:00-15:30, N8 labs page
Filip Zavoral #nswi170-compsys-zavoral Tuesday 14:00-15:30 (even weeks), N11 labs page


First order of business: get your own Arduino within the first two weeks! You can either buy it or borrow it in the library at Mala Strana. If you are going to the library for the first time it might be a good idea to register first to speedup the process. There is an online registration form for this purpose.

Library for your Arduino labs: Funshield.zip

ReCodEx uses an Arduino emulator for validation of home assignments. Despite supporting all major features of the real Arduino, there are some differences:

Issue Example Workaround
Unsupported complex initialization of global variables size_t t = millis(); Initialize the variable with a default value and call the complex initialization in the setup() function.
Unsupported communication API Serial.print(); Use the functions for local debugging only.
max is a macro at Arduino but a function in ReCodEx int x; long y; max(x,y); Always use min/max with identical types of arguments.
int/long are 16/32 bits at Arduino but 32/64 in ReCodEx int32_t x; long y; max(x,y); Do not mix int/long with int16_t/int32_t.
Funshield include #include <funshield.h> Replace by #include "funshield.h"
Conservative C++ (order of declarations) int main() { foo(); ...}
void foo() {...}
In C++, you need to declare functions (classes, ...) before you use them.
Static methods class Foo { static void foo() ... } Static methods do not work in ReCodEx, use plain old C functions instead.
Initialization class Button {
Button() { pinMode( b[0], INPUT); }
Emulator (Arduino) initilization (e.g., pinMode) MUST be called in setup. Early emulator initialization (e.g., in a constructor of a global object) causes a signal and your program is terminated.
Unsupported type String String stringOne = "Hello String"; Use standard C-strings instead, i.e., const char *stringOne = "Hello String";