Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 58 additions & 1 deletion .wordlist.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7405,4 +7405,61 @@ requantized
requantizing
signedness
virsh
virt
virt
Autoboot
BOOTMODE
DTB
Decompile
EVM
FITs
HSM
Jamil
Keywriter
LBA
MBR
MCUboot
MoltenVK
SPL
ScaledObjects
Scaler's
Securable
TI's
TIFS
Terraform's
UBOOT
adab
adbc
afaf
arago
autoboot
bafb
bceffbb
bcfc
beeb
befc
bootloader's
caidas
cded
ceefb
cffee
decompiling
eFuses
eadeefc
edcf
efbc
evm
fbcacd
fcea
fcfa
fdaaaca
fdbc
lastmod
lxx
shaderFloat
subimages
swin
tiboot
tisdk
tispl
uboot
codename
10 changes: 5 additions & 5 deletions content/learning-paths/automotive/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ subjects_filter:
- Performance and Architecture: 10
operatingsystems_filter:
- Baremetal: 1
- Linux: 14
- Linux: 15
- macOS: 1
- other: 1
- RTOS: 2
Expand All @@ -33,7 +33,7 @@ tools_software_languages_filter:
- CMake: 1
- CPP: 1
- DDS: 1
- Docker: 6
- Docker: 7
- FreeRTOS: 1
- FVP: 2
- Gazebo: 1
Expand All @@ -43,17 +43,17 @@ tools_software_languages_filter:
- Multipass: 1
- Navigation2: 1
- Perf: 1
- Python: 2
- Python: 3
- Raspberry Pi: 2
- rmw_zenoh: 2
- ROS 2: 6
- ROS 2: 7
- Rust: 1
- RViz: 1
- SME2: 1
- Tinkerblox: 1
- topdown-tool: 1
- Yocto: 3
- Zenoh: 3
- Zenoh: 4
# auto-generated padding to avoid Hugo YAML alias limit
# auto-generated padding to avoid Hugo YAML alias limit
# auto-generated padding to avoid Hugo YAML alias limit
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ The L1 table defines permissions for each 16KB granule.

Use the Arm Debugger MMU/MPU pane to observe these attributes:

![Screenshot of Arm Debugger MMU/MPU pane showing L1 Granule Protection Table entries for memory region 0xA0000000, displaying Realm access permissions for 16KB granules#center](_images/l1gpt_0xA.png)
![Screenshot of Arm Debugger MMU/MPU pane showing L1 Granule Protection Table entries for memory region 0xA0000000, displaying Realm access permissions for 16KB granules#center](_images/l1gpt_0xa.png)

![Screenshot of Arm Debugger MMU/MPU pane showing L1 Granule Protection Table entries for memory region 0x80000000, displaying the protection attributes for this address range#center](_images/l1gpt_0x8.png)

Expand Down
29 changes: 16 additions & 13 deletions content/learning-paths/embedded-and-microcontrollers/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,19 @@ pinned_learning_paths:
operatingsystems_filter:
- Android: 1
- Baremetal: 31
- Linux: 60
- Linux: 62
- macOS: 24
- RTOS: 13
- RTOS: 14
- Windows: 12
subjects_filter:
- CI-CD: 7
- Containers and Virtualization: 10
- Embedded Linux: 6
- Libraries: 5
- Libraries: 6
- ML: 31
- Performance and Architecture: 24
- RTOS Fundamentals: 8
- Security: 3
- Security: 4
- Virtual Hardware: 2
subtitle: Learn best practices for IoT, embedded, and microcontroller development.
title: Embedded and Microcontrollers
Expand All @@ -53,7 +53,7 @@ tools_software_languages_filter:
- Baremetal: 1
- Bash: 1
- BitBake: 1
- C: 12
- C: 13
- ChatGPT: 1
- Clang: 1
- CMake: 2
Expand All @@ -66,7 +66,7 @@ tools_software_languages_filter:
- Containerd: 1
- CPP: 1
- DetectNet: 1
- Docker: 19
- Docker: 20
- DSTREAM: 2
- Edge AI: 2
- Edge Impulse: 2
Expand All @@ -77,7 +77,7 @@ tools_software_languages_filter:
- Fusion 360: 1
- FVP: 11
- Gazebo: 1
- GCC: 16
- GCC: 17
- Generative AI: 3
- GitHub: 4
- GitLab: 2
Expand Down Expand Up @@ -113,19 +113,20 @@ tools_software_languages_filter:
- ONNX: 1
- ONNX Runtime: 1
- OpenSSH: 1
- OpenSSL: 1
- Paddle: 1
- Performance analysis: 1
- picocom: 1
- Porcupine: 1
- Python: 24
- Python: 25
- PyTorch: 9
- QEMU: 2
- QEMU: 3
- Raspberry Pi: 11
- Reachy Mini: 1
- Remote.It: 1
- remoteproc-runtime: 1
- rmw_zenoh: 2
- ROS 2: 3
- ROS 2: 4
- Runbook: 4
- RViz: 1
- SEGGER JLink: 1
Expand All @@ -144,14 +145,16 @@ tools_software_languages_filter:
- Trusted Firmware: 2
- TrustZone: 2
- TVMC: 1
- U-Boot: 1
- vcpkg: 1
- Vela: 2
- VGF: 1
- Visual Studio Code: 2
- Visual Studio Code: 3
- Workbench for Zephyr: 1
- YAML: 1
- Yocto: 1
- Yocto Project: 1
- Zenoh: 2
- Zephyr: 6
- Zenoh: 3
- Zephyr: 7
weight: 5
---
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ plt.show()

The expected output is shown below

![output1](images/lab4_1.PNG)
![output1](images/lab4_1.png)

Next, normalize all the training and testing data to have values between 0 and 1. This normalization facilitates machine learning. Each RGB value ranges from 0 to 255, so divide the training and testing data by 255.

Expand Down Expand Up @@ -125,7 +125,7 @@ You are going to create a small convolutional neural network for image classific

Here is an image illustrating the network architecture. Note that only convolution and dense layers are illustrated in this image.

![output2](images/lab4_2.PNG)
![output2](images/lab4_2.png)

Execute the code blocks below to create a sequential model and add the layers

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,15 +53,15 @@ In this section, you will deploy the model directly on the STM32 board.

5. Set `Toolchain/IDE` as `STM32CubeIDE`

![output3](images/lab4_3.PNG)
![output3](images/lab4_3.png)

6. Go to `Pinout & Configuration` and clear pinouts from the `Pinout` menu.

![output4](images/lab4_4.PNG)
![output4](images/lab4_4.png)

7. In `Software Packs` menu, click `Select Components`. Enable `X-CUBE-AI`. For device application, choose `Validation`. Click `OK` to save.

![output5](images/lab4_5.PNG)
![output5](images/lab4_5.png)

8. Navigate to `X-CUBE-AI` configuration.

Expand All @@ -71,7 +71,7 @@ In this section, you will deploy the model directly on the STM32 board.

11. Generate the validation code for the model by clicking `Generate Code`.

![output6](images/lab4_6.PNG)
![output6](images/lab4_6.png)

12. Open STM32CubeIDE.

Expand All @@ -81,10 +81,10 @@ In this section, you will deploy the model directly on the STM32 board.

15. Ensure that the board is connected to your computer. If it is correctly connected, build and flash the code by clicking `Run As`.

![output7](images/lab4_7.PNG)
![output7](images/lab4_7.png)

16. If you get an ‘undefined reference’ error, go to `Core/Src/main.c`. Remove `static` from the declaration of the `MX_USART1_UART_Init()` function and also from its definition. Try `Run As` again.

![output8](images/lab4_8.PNG)
![output8](images/lab4_8.png)

With the model now deployed on the STM32 board, you are ready to test it.
Original file line number Diff line number Diff line change
Expand Up @@ -38,20 +38,20 @@ If the board is not detected, click the black button on the board to reset, then

Select the model network from the list of models deployed on the board.

![output9](images/lab4_9.PNG)
![output9](images/lab4_9.png)

Select the network and the label file (`Data/labels/cifar10_labels.txt`)

![output10](images/lab4_10.PNG)
![output10](images/lab4_10.png)

Open an image to test. The tool will automatically launch a new pane, and show the inference result.

Observe that the model correctly predicted the label. In addition, note the time taken to finish the prediction.

![output11](images/lab4_11.PNG)
![output11](images/lab4_11.png)

You can also use your workstation camera to test image classification. Hold an appropriate picture up to your camera, then press `S`. The tool captures the image and sends it to the board.

![output12](images/lab4_12.PNG)
![output12](images/lab4_12.png)

You have now successfully ran the model on your STM32 board.
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Click on the box titled "JETSON XAVIER NX DEVELOPER KIT & ORIN NANO DEVELOPER KI

1. Open balenaEtcher
2. Click "Flash from file"
![balenaEtcher interface](./balenaEtcher1.png)
![balenaEtcher interface](./balenaetcher1.png)
3. Select the zip file of the image you just downloaded (you don't need to unzip the file).
4. Click "Select target" and choose your microSD card
5. Click "Flash" and wait for the process to complete which will take around 10 minutes. You may be prompted to enter a username and password before it will start.
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ Open the **Functions** tab. In the counters list, select one of the counters you

In the **Functions** tab, look for the function `char_dev_cache_traverse()`. You'll see that it has the highest L1 Cache refill rate, which is expected for this example. Check the **Image** column on the right. This should show your module file name, `mychardrv.ko`. This confirms that Streamline is capturing performance data for your kernel module.

![Streamline Functions tab displaying a list of functions with performance metrics such as L1 Cache refill rates. The primary subject is the function char_dev_cache_traverse which is highlighted and shows the highest cache refill value. The right side of the table lists the image name as mychardrv.ko. The wider environment is a desktop profiling application window with columns labeled Function, Image, and various performance counters. Visible text includes function names, image names, and numerical metric values. The emotional tone is neutral and technical, supporting detailed analysis for Arm kernel module profiling. alt-text#center](./images/img08_Functions_Tab.png "Identify functions with highest cache refill rates")
![Streamline Functions tab displaying a list of functions with performance metrics such as L1 Cache refill rates. The primary subject is the function char_dev_cache_traverse which is highlighted and shows the highest cache refill value. The right side of the table lists the image name as mychardrv.ko. The wider environment is a desktop profiling application window with columns labeled Function, Image, and various performance counters. Visible text includes function names, image names, and numerical metric values. The emotional tone is neutral and technical, supporting detailed analysis for Arm kernel module profiling. alt-text#center](./images/img08_functions_tab.png "Identify functions with highest cache refill rates")

To view the call path for `char_dev_cache_traverse()`, right-click the function name and select **Select in Call Paths**.

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ for idx, file in enumerate(data_files):
You can check the extracted features with this code block. These are the extracted features from one data sample.
Expected output shown below:

![output5](images/output5.PNG)
![output5](images/output5.png)

## Feature based model

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ plt.legend(loc='lower right')
```
In this example, see that the training and validation accuracy start to converge after around 150 epochs. This means that the 200 epochs are enough to train the model. If you train the model for too many epochs, then the validation accuracy may drop due to overfitting. If you experience this, re-run [training](#train) with an appropriate epoch value.

![output2](images/output2.PNG)
![output2](images/output2.png)

## Investigate learning rate (optional)

Expand All @@ -103,7 +103,7 @@ plt.legend(loc='lower right')
```
Expected output shown below:

![output3](images/output3.PNG)
![output3](images/output3.png)

Now try a lower learning rate, which is 0.0001. Execute the code block. The graph shows the training and validation loss values decrease much more slowly. So, it is important to use a proper learning rate in training.

Expand All @@ -125,7 +125,7 @@ plt.legend(loc='lower right')

Expected output shown below:

![output4](images/output4.PNG)
![output4](images/output4.png)

With the model trained, you are now ready to test it.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,4 +163,4 @@ plot_single_sample(data_sample=data[idx], label=labels[idx])

Example output is shown below:

![output1](images/output1.PNG)
![output1](images/output1.png)
Loading
Loading