0% found this document useful (0 votes)
8 views

System Programming and Device Drivers

The document outlines a course on System Programming using C, focusing on advanced Embedded C, microcontroller architecture, and debugging in a Linux environment. It includes detailed course objectives, learning outcomes, teaching strategies, and a comprehensive syllabus divided into five units covering various programming concepts and practical lab work. Additionally, it provides assessment methods, assignments, and recommended textbooks for further study.

Uploaded by

dhanavarshini14
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
8 views

System Programming and Device Drivers

The document outlines a course on System Programming using C, focusing on advanced Embedded C, microcontroller architecture, and debugging in a Linux environment. It includes detailed course objectives, learning outcomes, teaching strategies, and a comprehensive syllabus divided into five units covering various programming concepts and practical lab work. Additionally, it provides assessment methods, assignments, and recommended textbooks for further study.

Uploaded by

dhanavarshini14
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 13

Sixth Semester L T P Credits Total Marks

xxxx
System Programming using C 4 0 0 4 100

COURSE OBJECTIVES
This course is meant to give them a broad exposure to the understanding of various concepts
of System Programming.
The course will provide the students with
(i) the concept of advanced Embedded C Language,
(ii) the knowledge of microcontroller architecture,
(iii) the methodology to write Program for chosen microcontroller, and
(iv) the skill to use basic technique for debugging in Linux environment and
(v) basic understanding of system programming.
Experiments will run in synchronism with the lectures to support the methods and techniques
taught in the lectures. Through the experiments, the students will
(i) learn how to use Linux commands and programming environment,
(ii) gain confidence to do system programming in Linux environment, and learn how
to test and debug the developed programs.
Learning Outcome of students are
(i) Perform advanced C programming using linked list, Function pointers, arrays,
sorting, etc.,
(ii) 2. Basic scripting in Linux environment
(iii) 3. Demonstrate programming using Linux System calls
(iv) 4. Demonstrate various debugging techniques when the program throws error
(v) 7. Plan and execute projects simple system programming projects.

Teaching and Learning Strategy

Teaching and Description of Work Class Hours Out-of-Class


Learning Strategy Hours
Lectures supported by Practical in Debian or 15 hours 45 hours
tutorials, assignments Ubuntu Linux
and experiments Environment

UNIT 1 EMBEDDED C PROGRAMMING 9Hrs.


Essential C Programming Concepts, Variables and Constants, IO
operation, Memory Layouts, Operators and Expression, Control
Statements, Functions, Arrays, Pointer, Structure and Union, Debugging
Methods.
Lab work
1. Programs to understand the various C memory layouts and variable
storage locations.
2. Programs to understand the control and conditional statements
extensively.
3. Programs to understand the passing of 1-D, 2-D arrays to functions as
argument.
4. Programs to understand the pointer usage and passing argument by
reference.
5. Programs to understand the structure, union, enum, typedef and
bitwise logical operations.
Project
1. Projects based on the modular programming design.
2. Projects based on event handlers
3. Projects based on finite state machine
UNIT 2 EMBEDDED SYSTEM SOFTWARE 9Hrs.
Assembly and C Microcontroller Programming, IO Port Programming, Timer
Programming, Handling Interrupts, Interfacing with external peripherals and
memory, ADC Programming, LCD & Keypad Programming, Interfacing with
Sensors.
Lab work
1. Programs to understand the GPIO input, output and alternate
functionalities.
2. Programs to understand the timer functionalities in the microcontroller.
3. Programs to understand various interrupts and interrupt service
handler and interrupt service routines.
4. Programs to understand the external interrupts and external peripheral
interface with the microcontroller.
5. Programs to understand the ADC and DAC interfaces with the
microcontroller.
6. Programs to understand the display and keypad interfaces with the
microcontroller.
7. Programs to understand the external sensor signal handling in the
microcontroller.
Project
1. Constructing the circuit in the breadboard to execute the lab work
exercises in the actual hardware.
2. Developing programs for microcontroller with modular programming
using state machines approaches.
UNIT 3 EMBEDDED LINUX SYSTEM PROGRAMMING 9Hrs.
System Programming Concepts, File Operation Programming, IO Operation
Programming, Advance Process Management Programming and Thread
Programming and Mutex.
Lab work
1. Programs to understand the file management in Linux C.
2. Programs to understand the process handling in Linux C.
3. Programs to understand the threads and mutex in Linux C.
Project
1. Developing multi processes project in Linux C.
2. Developing project using threads and mutex.

UNIT 4 EMBEDDED LINUX SYSTEM PROGRAMMING IPCs 9Hrs.


Essential Inter Process Communication and Synchronization, Pipes,
Signals, Timers, Shared Memory, Message Queues and Semaphores.
1. Programs to understand the Pipes in Linux C.
2. Programs to understand the Signals and Timers in Linux C.
3. Programs to understand the Shared Memory and Semaphores in Linux
C.
4. Programs to understand the Message Queues in Linux C.

Project
1. Developing event-based project using Linux IPC and synchronization
mechanism.
2. Developing message queue-based project using message queue and
synchronization mechanism.

UNIT 5 ADVANCE MICROCONTROLLER PROGRAMMING 9Hrs.


Introduction of Advanced Microcontroller Architectures, Buses, Memory,
Clock Tree, Reset, Interrupts Management, IOs, Timers, and external
interfaces.
Lab work
1. Programs to understand the various clock configurations.
2. Programs to understand the timer configurations and event handlers.
3. Programs to understand various interrupts and interrupt service
handler and interrupt service routines.
4. Programs to understand the external interrupts and external peripheral
interface with the microcontroller.
5. Programs to understand the handling of external signals.

COURSE OUTCOMES :
On completion of the course the student will be able to
CO1. Write System programs in Linux environment.
CO2. Design and Implement simple system projects

TEXT BOOK/ REFERENCE BOOKS

Text Books:
Advanced Embedded C Programming
The C Language Programming, Brian W. Kernighan • Dennis M. Ritchie, 1998.
Linux System Programming
Linux System Programming, Robert Love, 2013.
Advanced Microcontroller Programming
Discovering the STM32 Microcontroller, Geoffrey Brown, 2012.

Reference Books:
Advanced Embedded C Programming
1. THE FIRMWARE HANDBOOK, Jack Ganssle, 2004..
2. C Programming for Embedded Systems, Kirk Zurell, 2000.
3. Making Embedded Systems, Elecia White, 2011.
Linux System Programming
1. Beginning Linux Programming, Neil Matthew & Richard Stones, 2008.
2. Hands-On System Programming with Linux, Kaiwan N Billimoria, 2018.
Advanced Microcontroller Programming
1. Mastering STM32, Carmine Noviello, 2016.
2. ARM Cortex M4 Cookbook, Dr. Mark Fisher, 2016.
3. RM0090, Reference manual, STM32F405/415, STM32F407/417,
STM32F427/437 and STM32F429/439 advanced Arm®-based 32-bit MCUs.
4. PM0214 Programming manual STM32 Cortex-M4 MCUs and MPUs
programming manual.

END SEMESTER EXAMINATION QUESTION PAPER PATTERN

Max. Marks: 100 Exam Duration: 3Hrs.

Type of Description Percentage


Assessment
Quiz (2 or 3) 1. Classroom attention 15 %
2. Adhoc Quizzes of approx. 40 mins each
will be taken to evaluate the continuous
progress
Mid Term (1) One Mid Term of 1½ hour Practical 25 %
Examination will be taken
Laboratory Laboratory continuous monitoring and Exam 15%
Assignment Two projects will be given, one before the 15%
mid-semester and one after the mid-
semester
End Term (1) 4-hour End Practical exam will be taken to 30 %
evaluate the overall understanding
Total 100%

Assignment (T and P):


1. Write a C program to create a playlist in audio player using linked list.
2. Write a C program to create a Congo line using linked list.
3. Write a C program to implement scavenger hunt or treasure hunt using linked list.
4. A game is played by always eliminating the kth player from the last elimination and played until one player
is left. Given N players where each is assigned to a number, find the number of the last remaining player.
Write a C program to implement this game using linked list.
5. Write a C program to implement the history list of the file directories, traversal to the previous or next
directory using linked list.
6. Write a C program to implementation hash tables using linked list.
7. Write a C program to implement a tree to identify the car manufacturer and car type by providing car name.
8. Write a C program to implement a Graph using linked list.
9. Write a C program to implement a Scheduler which uses linked list
10. Write a C program to implement device node adding and deletion using linked list
11. Write a C program to implement string reversal using stack.
12. Write a C program to solve maze problem with back trace using stack.
13. Write a C program to implement and check balanced parentheses using stack.
14. Write a C program to implement the memory management model using stack.
15. Write a C program to implement the undo operation using stack.
16. Write a C program to implement the stack to store and restore data using function calls.
17. Write a C program to implement token number announcement system model for Banks and Hospitals using
Queue
18. Write a C program to implement reservation or ticket counter model using Queue
19. Write a C program to implement the task queue model
20. Write a C program to implement the shared resources allocation with fist come first serve basis model.
21. Write a C program to implement message queue, buffered I/O and pipes model using queue.
22. Write a C program to read the table from the NAND Flash, perform selection sort and rearrange the names
in ascending order and store the table back to the NAND Flash. Note: When the write operations are extremely
expensive then the read operations, then selection sort could be ideal.
23. Write a C program to perform bubble sort whenever new flight arrival details are added in the arrival table.
24. Write a C program to sort the media file according to the file names using insertion sorting.
25. Write a C program to sort the product list according to their price using merge sorting.
26. Write a C program to sort the hazardous or dangerous material / chemicals in the lab using quick sorting
27. Write a C program to rearrange the task list based on the task priority.
28. Write a C program to implement priority-based scheduling using heap sort.
29. Write a C program to find the most frequent used words from a file.
30. Write a C program to use Pthread for binary search to identify the specific name.
31. In a library, there are thousands of books to go through. Write a C program to to find the exact book,
implement search program.
32. Write a C program to use binary search to find out the file or directory by giving the name.

Assignment II (T and P):

1. Create a read process and control process. The read process should read the thermostat sensor
value and perform the temperature calculation, based on the temperature value and set
temperature value, the control process should turn on and off the compressor motor. Pipes
should be used for the communication between read process and control process.
2. Create 3 processes, one process maintains state machine to send command to control the valves
and motor, second process to control the motor, third process to control the valve. The motor
should rotate in forward or backward direction based on the command. Use pipes the send
command between processes.
3. Create 3 processes, one process reads the angle sensor, second process reads the proximity
sensor and three process sends command through serial port to control the speed of the motor
based on the sensor values. Use message queues to pass information between the processes.
4. Create 4 processes, one process controls the heater based on the user input and thermostat value,
second process controls the light and monitors door, third process controls fan motor and turn
table motor and fourth process read the thermostat reading. Use message queues as inter process
communication mechanism between processes.
5. Create 5 processes, one process controls the various solenoidal valves, second process controls
2 motors, third process controls light, relays and buzzer, fourth process reads sensor, switch
values and user inputs. Fifth processes control whole functionalities of the devices.
6. Create 4 processes, one process read the current time and place it in the shared memory. Second
process reads the temperature sensor value and place it in the shared memory. Third process
reads the humidity sensor value and place it in the shared memory. Fourth process plays video
or current time with temperature and humidity value based on the user selection.
7. Create 4 processes, one reads the input values from the user related to rate and time. Second
process performs calculation based on rate and time and controls the pump direction and speed.
Third process read the pressure sensor value. Use message queues as inter process
communication between processes.
8. Create 3 processes, one reads the pressure sensor value on request, second process controls the
pump and third process to perform calculation and display the result in the screen. Use message
queue and signal as an inter process communication between process
9. Create 3 processes, one process receives the input from the user, second process controls various
motors in sequence and third process performs certain calculations periodically. Use
semaphores, message queues, signals and shared memory as an inter process communication
between the processes.
10. Create 3 processes, one process writes the captured image into a jpg file format, second
processes write the recorded videos into 3pg file format, third process reads jpg or 3pg files and
displays it in the screen.
11. Create 3 processes, one process handles the key input, second process handles audio player
functionalities and third process handles photo frame functionalities. Use message queues,
interrupt and signal as inter process communication. Use <--, -->, ^, v, backspace keys to
provide inputs.
12. Create an application to read the records through serial communication port after handshaking
and write the records in the file. Implement a logic to sort the table based on the parameters.
13. Create a runtime thread to update the run time parameters in the shared memory.
Create a charging thread to update the total charging hours in the shared memory.
Create a battery thread to update the total battery usage hours in the shared memory.
Create a sensor1 thread to update the sensor event with date and time in the shared memory.
Create a sensor2 thread to update the threshold limit exceed event with date and time in the
shared memory.
Create an event log thread to read the various shared memory location and update the event log
file.
Create a display thread to display the event log in the screen on request from the user.
Use mutex for synchronization of shared resource access.
14. Create an application to read the information from the configuration file and then perform the
device operation.
Configuration File:
1. Select Required Cycles (Cycle1 to Cycle 15, each cycle will perform certain sequence of
operation related to pump, fluid, volume and pressure)
2. Configure the pump speed, duration, volume, concentration and flow rate.
3. Door close/open duration for each cycle
4. Fluid drain duration, etc
15. Create a file manager application for Linux environment.
16. Create an application to write the health parameter in the file and send it to online server to get
the prescription based on the health condition.
17. Create 2 processes, one is server process, and another is client process. Both accessing the
shared memory, use semaphore as a synchronization mechanism.
18. Implementing alarm system which provides audio and visual warning based on the multiple
sensor values.
Create 5 process, one process reads sensor1 value, second process reads sensor 2 value, third
process reads sensor 3 value, fourth process performs the limit check and generates visual and
audible alarm based on sensor values. Alarms priority are categorized as low, medium and high
alarms. Visual alarm color and audible alarm tone is based on alarm priority.
19. Create a manager process which performs health check of another 5 processes. In case any of
the process malfunctions, the manager process should restart the malfunction process. Use
message queue and signals as a inter process communication.
20. Create 2 process, one process reads 2 bytes of sensor value and update the circular buffer, the
second process reads the circular buffer update the head and tail information in the shared
memory. Use semaphore to synchronize between write and read operation from the circular
buffer.
21. Implement speed alert application to regulate vehicle speed-based road wet condition.
Create 3 processes, one read the sensor value to identify the wet condition, the second process
provides visual and audible warning to reduce the speed of the engine, the third process should
reduce the speed of the engine.
Use message queue as a inter process communication between process.
22. Create a traffic management system to control the traffic in the signal based on the information
from the nearby signals.
23. Create an internet speed test application using Linux Networking Program.
24. Create 2 processes, one process receives command from the server. Second process controls the
motor connected to motor driving board which control the AC, DC and Stepper Motors.
25. Implement networking application to control the home appliances.
Create 2 processes, one process receives command from the server. Second process based on
command, sends control signal to home device connected through.
26. Create a server application to receive and store the video images in the file system.
27. Create a client application to send the working state of the primary system to redundant system.
In redundant system run the server application, and when the primary system fails, the
redundant system quickly takes up the functionalities of primary system.
28. Create a server application in the PC to retrieve the trip information from the vehicle and store
it in a file. Create a client application to send the trip information to the server.
Seventh Semester- L T P Credits Total Marks
SCSA xxxx Linux Kernel & Device Driver
4 0 0 4 100
Programming

COURSE OBJECTIVES
This course is meant to give them a broad exposure to the understanding of various concepts
of Linux Kernel and Device Driver Programming.
The course will provide the students with
(vi) The core concepts of operating systems
(vii) the knowledge of Linux Kernel architecture and device driver framework,
(viii) the methodology to write Programs for chosen embedded devices, and
(ix) the skill to use basic techniques for debugging in Linux device drivers and
(x) basic understanding of Linux based embedded system design.
Experiments will run in synchronism with the lectures to support the methods and techniques
taught in the lectures. Through the experiments, the students will
(iii) learn how to setup environment for developing and debugging device drivers,
(iv) gain confidence to write/customise Linux device drivers, debug and test them
using a target platform.
Learning Outcome of students are
(i) Understanding of complex Linux Kernel framework and extending this knowledge
to understand any type of operating system
(ii) Writing device drivers for simple embedded devices
(iii) Basic scripting to building the Linux Kernel and Device Drivers
(iv) Demonstrate end-end data flow from device to application
(v) Demonstrate various debugging techniques when the system crashes due to a
malfunctioning Kernel or Device Driver
(vi) Plan and execute simple device driver development projects.

Teaching and Learning Strategy

Teaching and Description of Work Class Hours Out-of-Class


Learning Strategy Hours
Lectures supported by Practical in Debian or 15 hours 45 hours
tutorials, assignments Ubuntu Linux
and experiments Environment and an
embedded evaluation kit

Pre-requisites
1. Advanced C Programming
2. Basic Linux utilities
3. Comfortable with Linux text editors (Vim, Gedit, etc.)
4. Experience with major Linux distribution (Ubuntu, Debian, etc.)
5. Free course from Linux Foundation: A Beginner’s Guide to Linux Kernel Development
(LFD103)
6. Free course from Linux Foundation: Introduction to Linux (LFS101)
UNIT 1 INTRODUCTION TO THE LINUX KERNEL 9Hrs.
Preliminaries - UNIX Vs Linux, Types of Kernels, Versions, Kernel
repository, Object-Oriented approach in Linux Kernel, Important Kernel
tasks, User-Space and Kernel-Space.

Programming Preview - Error numbers and Getting Kernel output, Task


structure, Memory allocations, Kernel data structures, Jiffies

Kernel Architecture Preview - Processes Vs Threads Vs Tasks, Process


address space and Process context, Process limits and capabilities,
Kernel Preemption, Real Time Preemption Patch, Dynamic Kernel
Patching, Porting to a New Platform

Kernel Initialization - System initialization, System boot, U-Boot

Kernel Configuration - Layout of the Kernel source, Kernel configuration


files, Kernel Building and Makefiles, initrd and initramfs

Kernel style & general considerations - Coding style, kernel-doc, Using


generic Kernel routines and methods, sparse, Using likely() and unlikely(),
Writing portable code (CPU, 32/64-bit, Endianness), Writing for SMP,
Writing for high memory systems, Power management, Keeping security in
mind, Mixing user and Kernel space headers

Modules - What are modules? Compiling modules, modules vs built-in,


Module utilities, Automatic loading/unloading of modules, Module usage
count, the module struct, Module licensing, exporting symbols, Resolving
symbols

Lab work
6. Browsing/searching the Kernel source code
7. Booting a target development board over ethernet
8. Add a new system call
9. Code walkthrough for system initialisation code in Kernel
10. Create your first module and send it for review

UNIT 2 DEVICE DRIVERS I 9Hrs.


Device Driver Overview - Types of devices, Mechanism vs. Policy,
avoiding binary blobs, Power management, How applications use device
drivers, Walking through a system call accessing a device, Error numbers,
printk(), devres: Managed device resources, Device driver binding

Platform Drivers - Platform devices, I2C subsystem, Device trees, Pin-


muxing, Memory management overview, I/O memory and ports

Character Drivers - Character devices, Interaction of user space


applications with the kernel, ioctls
Memory addressing - Virtual memory management, Systems with and
without MMU and the TLB, Memory addresses, High and low memory,
Memory zones, Special device nodes, NUMA, Paging, Page tables, page
structure, Kernel Samepage Merging (KSM), Huge page support,
libhugetlbfs, Transparent huge pages

Memory allocation - Requesting and releasing pages, Buddy system, Slabs


and cache allocations, Memory pools, kmalloc(), vmalloc(), Early allocations
and bootmem(), Memory defragmentation

Lab work
8. Implement a module that registers as an I2C driver
9. Modify the Device Tree to list the I2C device
10. Get the driver called when the device is enumerated at boot time
11. Configure the pin-mux for the I2C bus to communicate with the driver
12. Extend the driver to communicate with a I2C device
13. Extend the driver to communicate with user space
14. Extend the driver to implement ioctls
15. Demonstrate driver binding using udev
16. Write a module to gather memory statistics
17. Write a module to create a private memory cache
18. Write a module to setup a memory pool
19. Write a module to check the memory allocation limits

UNIT 3 KERNEL FRAMEWORK I 9Hrs.


Race conditions & synchronization - Concurrency and synchronization
Methods, Atomic operations, Bit operations, Spinlocks, Seqlocks, Disabling
preemption, Mutexes, Semaphores, Completion functions, RCU,
Reference counts

SMP and Threads - SMP Kernels and modules, Processor affinity,


CPUSETS, SMP algorithms (Scheduling, Locking, etc.), Per-CPU variable

Scheduling - Main scheduling tasks, SMP, Scheduling priorities, Scheduling


system calls, the schedule() function, O(1) Scheduler, Time slices and
priorities, Load balancing, Priority inversion and priority inheritance, The
CFS scheduler, Calculating priorities and fair times, Scheduling classes,
CFS Scheduler Details

Disk caches and swapping – Caches, Page cache basics, what is swapping,
Swap areas, swapping pages In and Out, Controlling swappiness, The swap
cache, Reverse mapping, OOM Killer

Signals - What are Signals? Available signals, System calls for signals,
Sigaction, Signals and threads, How the Kernel installs signal handlers, How
the Kernel sends signals, How the Kernel invokes signal handlers, Real time
signals

Lab work
4. Write module to get the current CPU ID
5. Create threads in Kernel and run them in different CPUs
6. Write a Kernel module to launch a user process
7. Write a program to simulate CFS
8. Write a program to defragment memory
9. Write a module to manipulate signals installed from user process

UNIT 4 DEVICE DRIVERS II 9Hrs.


Input Subsystem – Principles of Kernel Input subsystem, API offered to
kernel drivers to expose input devices capabilities to user space
applications, User space API offered by the input subsystem

the misc Subsystem - What the misc kernel subsystem is useful for? API of
the misc kernel subsystem (both the kernel side and user space side)

GPIO Subsystem - API of the GPIO kernel subsystem (both the kernel side
and user space side)

PCI Drivers - What is PCI? Locating PCI Devices, Accessing Configuration


Space, Accessing I/O and Memory Spaces, PCI Express

Sleeping and Interrupts, Locking

Monitoring & debugging

Lab work
3. Create a module to handle input events
4. Create a platform driver and hook it to the misc subsystem
5. Write a program to communicate with the GPIO port
6. Create a module to register a simple interrupt handler
7. Make a process sleep and wake-up from a module
8. Handle a variable from 3 simple modules using mutex
9. Handle a variable from 3 simple modules using Semaphore
10. Compute the average time slices of a process
11. Write a program to examine and modify the scheduling policies and
priority
12. Write a basic PCI driver
13. Write interrupt example programs from LDD3

UNIT 5 KERNEL FRAMEWORK II 9Hrs.


DMA - What is DMA? DMA directly to user, DMA and Interrupts, DMA
memory constraints, DMA masks, DMA API, DMA pools, Scatter/Gather
mappings

Memory Technology Devices - What are MTD Devices? NAND vs. NOR vs.
eMMC, Flash filesystems
Block Drivers - What are Block Drivers? Buffering, Registering a block
driver, gendisk structure, Request handling

Power Management - ACPI and APM, System power states, Callback


functions

Network Drivers - Network Layers and Data Encapsulation, Datalink Layer,


Network Device Drivers, Loading/Unloading, Opening and Closing,
net_device, sk_buff, Tx/Rx, iocts, NAPI

Overview of ARM support in Kernel

Lab work
1. Write a simple block driver
2. Code walkthrough for an example USB driver
3. Code walkthrough for an example Network driver
4. Write SNULL driver example from LDD3
5. Write DMA driver example from LDD3

COURSE OUTCOMES :
On completion of the course the student will be able to
CO3. Write device drivers for simple devices used in Linux based embedded systems.
CO4. Design and implement simple embedded applications

TEXTBOOK/ REFERENCE BOOKS

Text Books:
Linux Device Drivers (LDD), 3rd Edition
Linux Kernel Development, 3rd Edition, Robert Love

Reference Books:
Linux System Programming, 2nd Edition, Robert Love
The Linux Programming Interface, Michael Kerrisk
Linux Kernel Documentation

END SEMESTER EXAMINATION QUESTION PAPER PATTERN

Max. Marks: 100 Exam Duration: 3Hrs.

Type of Description Percentage


Assessment
Quiz (2 or 3) 1. Classroom attention 15 %
2. Adhoc Quizzes of approx. 40 mins each
will be taken to evaluate the continuous
progress
Mid Term (1) One Mid Term of 1½ hour Practical 25 %
Examination will be taken
Laboratory Laboratory continuous monitoring and Exam 15%
Assignment Two projects will be given, one before the 15%
mid-semester and one after the mid-
semester
End Term (1) 4-hour End Practical exam will be taken to 30 %
evaluate the overall understanding
Total 100%

You might also like