C Programming Lab
BME554L - Fall 2025 - Palmeri
Lab
Prelab
Objectives
- Introduction to C Programming
- Building Zephyr application
- Flashing Zephyr application
- Viewing serial output from Zephyr application running on your
nrf52833DK
- Debugging Zephyr applications in VS Code
Zephyr Application Git Repository Overview
src/main.c
- main application code.gitingore
- ignore files that are not needed in the git repositoryCMakeLists.txt
- build system configuration fileprj.conf
- Zephyr configuration fileREADME.md
- this fileCMakePresets.json
- CMake presets file (build configuration).gitlab-ci.yml
- GitLab CI configuration file
Things To Do
Git Best Practices
- Use best practices for version control (branching, commit messages, etc.).
- Do all development on a dedicated branch that is merged into
main
once it is functional. - Commits should be very specific to the changes/additions you are making to your code. This will help you and others understand what you did and why you did it.
- On a given development branch, try to implement one small piece of functionality at a time, commit it, and then move on to the next piece of functionality.
Important
You do not want one, monolithic git commit right before you submit your project.
Fork / Clone / Build / Flash / View Serial Output
- Fork the C Programing lab repository on Duke’s GitLab server: https://gitlab.oit.duke.edu/kits/BME-554L-001-F25/c-programming-lab
- Add Dr. Palmeri (
mlp6
) as a Maintainer in your forked repository. - Clone your forked repository to your local machine.
- Build the Zephyr application “as is” (review DevAcademy: Lesson 1).
- Flash the Zephyr application to your development kit.
- Connect the
VCOM
port on thenrf52833DK
to your computer (usingConnected Devices
and the plug icon) - Look at the serial output in the VS Code
Terminal
- Connect the
Modify the Zephyr Application (DataTypes / Typecasting / Formatted Printing)
- Inspect the code to see how variables
a
,b
andc
are declared and initialized. - Flash the existing code and note the terminal output:
- On a development branch called
fix_division
, without changing the declared datatypes ofa
,b
, orc
, correct the code so thatc
is output in the terminal:
- Push the
fix_division
branch to your GitLab repository. - Create a Merge Request to merge the
fix_division
branch into yourmain
branch. - Make sure the GitLab CI pipeline is successful before merging the
fix_division
branch intomain
. If it isn’t passing, fix the problem locally on the same branch and push the changes to GitLab. - Pull your updated
main
branch to your local machine. - Create an annotated tag for the merged commit on main with the fixed division named
v1.0.0
. - Push this annotated tag to your GitLab repository.
Tip
Note that the CI pipelines running on the GitLab server can take a while to complete. Do not rely on them for immediate development feedback, but rather as a final check before merging code into main
.
Library Refactor
- On another development branch on your local machine called
refactor_library
, refactor the code to put thedivide_numbers()
function into a library calledmy_math_functions.h
. - Once you have your code working with this library, locally merge the
refactor_library
branch intomain
. - Create an annotated tag for the merged commit on main with the refactored library named
v1.1.0
. - Push the new commit(s) and annotated tag to your GitLab repository. Remember, this will need to be done with two commands,
git push
andgit push --tags
.
Push Everything to GitLab & Create an Issue to Notify Dr. Palmeri
- Make sure all of your commits are pushed to your
main
branch, along with both annotated tags. - Confirm that the GitLab CI pipeline is successful.
- Create an Issue titled
C Programming Lab Complete
and assign it to Dr. Palmeri (mlp6
).
Gradescope
Complete the Gradescope assignment for this lab that is a few simple tasks:
- Confirm that you created the Issue above
- Confirm that you completed both of the Nordic DevAcademy lessons
- Upload a screenshot of your CI pipeline jobs passing
How to Ask for Help
- If you have a general / non-coding question, you should ask your TAs / Dr. Palmeri on Ed to allow any of them to respond in a timely manner.
- Push you code to your GitLab repository, ideally with your active development on a non-
main
branch. - Create an Issue in your repository.
- Add as much detail as possible as to your problem, and add links to specific lines / section of code when possible.
- Assign the label “Bug” or “Question”, as appropriate.
- Be sure to specify what branch you are working on.
- Assign the Issue to one of the TAs.
- If your TA cannot solve your Issue, they can escalate the Issue to Dr. Palmeri.
- You will get a response to your Issue, and maybe a new branch of code will be pushed to help you with some example syntax that you can use
git diff
to visualize.