CS428 Embedded Systems Lab: Course Info

Department of Computer Science

University of Crete



E4 - Computer Architecture and Computer Systems




Spring 2023


Angelos Bilas

Manolis Marazakis


Course Info
                   Syllabus                        Assignments                 Policies






Due Date

Lego version

Arduino version

Assignment 1: Hello World!

Tue, 13-Feb, 23:59

Hello World!

Hello World!

Assignment 2: Digital Clock

Tue, 27-Feb, 23:59

Digital Clock

Digital Clock

Assignment 3: Analog Clock

Tue, 12-Mar, 23:59

Analog Clock

Analog Clock

Assignment 4: Sensor Monitor

Tue, 2-Apr, 23:59

Sensor Monitor

Sensor Monitor

Assignment 5: Build You Own Project (Photos from past projects available at ~hy428/projects) 

Start now.

Due + demos & presentations during last class on Wed 15-May-2024



Assignment 6: Virtualization 1

Tue, 16-Apr, 23:59



Assignment 7: Virtualization 2

Tue, 14-May, 23:59




Assignment Examination and Marking Procedure


Please read carefully the policies section.

Working on assignments and submitting with git


For the lab assignments we will use gitlab-csd. You can also use gitlab-csd to organize and keep track of your code. For the purposes of the course, there is a CS428 group in the departmental GitLab server. Each assignment has its own repository within the CS428 group. We recommend that you keep the same structure of directories and sub-directories as the CS428 group. To start working follow the steps below.

·       Request to join the CS428 group in gitlab-csd: 

o   Sing-in to gitlab-csd using LDAP credentials (i.e., csdXXXX@csd.uoc.gr where XXXX is your student ID). By default you will be external user (no permissions to create projects or groups and no access for internal or private projects - only for public). 

o   Go to the “Group Tab” and select the group “CS428”. Click on Request Access (and wait until the TA accepts your request - this may take a few hours or a day). 

o   After joining the CS428 group, you will be a Regular user and you will have Reporter access to the group repositories. As soon as you join the CS428 group, create your personal token: 

§  Sing-in to gitlab-csd using LDAP credentials (i.e., csdXXXX@csd.uoc.gr where XXXX is your student ID). 

§  In the top-right corner, select your avatar, and click on edit profile.

§  In the left sidebar, select Access Tokens. Choose a name and optional expiry date for the token. Choose all the scopes. Select Create personal access token.

§  Save the personal access token somewhere safe. If you navigate away or refresh your page, and you did not save the token, you must create a new one. 

·       Install the course toolchain for unix:  You will need a system running Linux. Many flavors (and kernel versions) will work, but the assignments (the toolchain mostly) have been tested with Ubuntu. You may use the systems already set up for this purpose in the lab (B.107). To get the toolchain, clone the Lego-toolchain. This directory tree contains the utilities needed for compiling and downloading code (firmware) to the Lego NXT. The toolchain is self-contained, and you should not need any files outside this directory, except for the generic USB library, as follows: The firmware toolchain requires the 32-bit version of the USB library, libusb i386, to be installed in your system. If, instead, you have the 64-bit version, libusb i686, installed, make sure to install libusb i386 as well. You do not need to change anything to the Lego-toolchain and therefore, you should never commit any changes to the chain. 

·       Fork the assignment repository: Each assignment has its own repository in the CS428 group. Before each assignment starts, you have to fork the assignment repo and create your own private repo. Forking creates a copy that allows you to make changes to the copied (and private) repository. To fork an assignment repository: 

o   Sing-in to the gitlab-csd and go to the CS428 group 

o   Select the assignment repo (e.g. as1_helloworld ) and press fork   

o   Use your name as the namespace 

·       Clone locally your forked repository: To start working locally on your assignment you need to clone the forked repo locally on your system. E.g. for student csdp1048, issue from your csd account in one of the csd servers, the command: 

git clone git@gitlab-csd.datacenter.uoc.gr:csdp1048/as1_helloworld_23.git

·       Make your assignment repository private, or others will be able to see your code (See item 4 above on collaboration, copying, and academic fraud). After you fork and clone the assignment repo, it is crucial to change the permissions of the repo to be invisible to others (and visible to the TA), as follows: 

In each assignment repo there is a python script private.py. Run this script to make your repo private and add TAs as members with Developer role. To execute the "private.py" you should firstly install python-gitlab. Then run the script doing: python3 private.py -t "yourToken" -p "ForkedProjectID". The same procedure can be done by hand: Go to “Project Settings -> General -> Visibility” and change “Project Visibility” to Private.

·       Work on your assignment: Use these general git guidelines and practices while you work on your assignment:

o   To add files to the git repo as you create them and commit and push changes while working on your assignment, use:

git add file1.c file2.c file3.c

git commit -m "Commit message"  

git push

o   Commit often, at least one commit for each step in an assignment (commit merges your work to your local repository). 

o   Commit only source files and modifications  (not executables or other binaries!).  

o   Pay attention to your commit messages: Describe precisely the purpose of each commit and what it includes.

o   Push changes frequently, in case something goes wrong with the system you are working on (push sends work from the local repository to the server).

·       Submit your assignment: Your local assignment directory should contain all source files specified by the assignment and necessary to compile and run the assignment. You should also include a brief README file that explains any implementation decisions or reasonable assumptions you have made and how you tested your program. Do not include object or executable files in your assignment submissions since they only take space. The latest version of files that have been pushed to the repo before the submission deadline will be used as your submission for the assignment. The day and time of the deadline scripts will automatically download from the shared forks of all CS428 members. Any further modifications will be ignored. 


(c) Copyright University of Crete, Greece, Last Modified: 01-Feb-2024