@@ -6,14 +6,217 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
and this project adheres to
7
7
[ Semantic Versioning] ( https://semver.org/spec/v2.0.0.html ) .
8
8
9
+ ## [ 1.19.0] - 2025-01-10
10
+
11
+ ### 📈 Added
12
+
13
+ - General:
14
+
15
+ - Add an option to set the
16
+ [ Self Test component] ( https://docs.memfault.com/docs/mcu/self-test ) output
17
+ log level, ` MEMFAULT_SELF_TEST_OUTPUT_LOG ` , to control the verbosity of the
18
+ Self Test output. Set it by selecting the Memfault Log macro to use, for
19
+ example ` #define MEMFAULT_SELF_TEST_OUTPUT_LOG MEMFAULT_LOG_DEBUG ` . The
20
+ default level is the same as before, ` MEMFAULT_LOG_INFO ` .
21
+
22
+ - Add an
23
+ [ implementation of ` memfault_reboot_reason_get() ` ] ( ports/stm32cube/u5/rcc_reboot_tracking.c )
24
+ for the STM32U5xx series of MCUs, using the ` RCC-CSR ` register to determine
25
+ the reset reason. Add the file to your project to make use of it!
26
+
27
+ - Add an
28
+ [ implementation for flash-backed coredump storage] ( ports/stm32cube/u5/flash_coredump_storage.c )
29
+ for the STM32U5xx series of MCUs, using the internal flash memory to store
30
+ coredumps. Add the file to your project to make use of it!
31
+
32
+ - Enable the MPU (Memory Protection Unit) in the
33
+ [ FreeRTOS QEMU example] ( examples/freertos/ ) , to demonstrate Memfault's
34
+ [ MPU region analysis feature] ( https://docs.memfault.com/docs/platform/trace-details#mpu-analysis ) .
35
+ This feature is enabled in a Memfault project by setting
36
+ ` #define MEMFAULT_COLLECT_MPU_STATE 1 ` in ` memfault_platform_config.h ` . The
37
+ MPU registers are captured as part of a coredump, and Memfault will analyze
38
+ the configuration and include the result in the Trace viewer.
39
+
40
+ - Add a new reboot reason code, ` kMfltRebootReason_TaskWatchdog ` , for marking
41
+ crashes due to a Task Watchdog. Memfault has a
42
+ [ built-in Task Watchdog system] ( https://github.com/memfault/memfault-firmware-sdk/blob/master/components/include/memfault/core/task_watchdog.h ) ,
43
+ and
44
+ [ Zephyr] ( https://docs.zephyrproject.org/latest/services/task_wdt/index.html )
45
+ and
46
+ [ ESP-IDF] ( https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/wdts.html#task-watchdog-timer-twdt )
47
+ both implement Task Watchdog systems.
48
+
49
+ - FreeRTOS:
50
+
51
+ - Add support for tracking per-thread stack usage in the
52
+ [ Memfault FreeRTOS port] ( ports/freertos/src/memfault_sdk_metrics_thread.c ) .
53
+ This feature is enabled by default and can be disabled by setting
54
+ ` #define MEMFAULT_FREERTOS_COLLECT_THREAD_METRICS 0 ` in
55
+ ` memfault_platform_config.h ` . The default threads monitored are ` IDLE ` and
56
+ ` Tmr Svc ` .
57
+
58
+ Threads are registered for tracking by defining
59
+ ` MEMFAULT_METRICS_DEFINE_THREAD_METRICS() ` in the application. For example:
60
+
61
+ ``` c
62
+ // ! Set the list of threads to monitor for stack usage. The metric keys must
63
+ // ! be defined in memfault_metrics_heartbeat_config.def, ex:
64
+ // !
65
+ // ! MEMFAULT_METRICS_KEY_DEFINE_WITH_SCALE_VALUE(
66
+ // ! memory_main_pct_max, kMemfaultMetricType_Unsigned,
67
+ // ! CONFIG_MEMFAULT_METRICS_THREADS_MEMORY_SCALE_FACTOR
68
+ // ! )
69
+ #include " memfault/ports/zephyr/thread_metrics.h"
70
+ MEMFAULT_METRICS_DEFINE_THREAD_METRICS (
71
+ // monitor the main thread stack usage
72
+ {
73
+ .thread_name = "main",
74
+ .stack_usage_metric_key = MEMFAULT_METRICS_KEY(memory_main_pct_max),
75
+ },
76
+ // monitor the shell_uart thread stack usage
77
+ {
78
+ .thread_name = "shell_uart",
79
+ .stack_usage_metric_key = MEMFAULT_METRICS_KEY(memory_shell_uart_pct_max),
80
+ });
81
+ ```
82
+
83
+ - Add example usage of per-thread stack usage support to the
84
+ [ FreeRTOS QEMU example] ( examples/freertos/ ) for the idle, timer service,
85
+ console input, metrics, and heap tasks.
86
+
87
+ - Add tracking of libc heap usage via the ` memory_pct_max ` metric to the
88
+ [ FreeRTOS QEMU example] ( examples/freertos/ )
89
+
90
+ - Zephyr:
91
+
92
+ - Add support for tracking per-thread stack usage in the
93
+ [ Memfault Zephyr port] ( ports/zephyr/common/memfault_platform_metrics.c ) .
94
+ This feature is enabled by default and can be disabled by setting
95
+ ` CONFIG_MEMFAULT_METRICS_THREADS=n ` . The default threads monitored are
96
+ ` main ` and ` sysworkq ` .
97
+
98
+ Threads are registered for tracking by defining
99
+ ` MEMFAULT_METRICS_DEFINE_THREAD_METRICS() ` in the application. For example:
100
+
101
+ ``` c
102
+ // ! Set the list of threads to monitor for stack usage. The metric keys must
103
+ // ! be defined in memfault_metrics_heartbeat_config.def, ex:
104
+ // !
105
+ // ! MEMFAULT_METRICS_KEY_DEFINE_WITH_SCALE_VALUE(
106
+ // ! memory_main_pct_max, kMemfaultMetricType_Unsigned,
107
+ // ! CONFIG_MEMFAULT_METRICS_THREADS_MEMORY_SCALE_FACTOR
108
+ // ! )
109
+ #include " memfault/ports/zephyr/thread_metrics.h"
110
+ MEMFAULT_METRICS_DEFINE_THREAD_METRICS (
111
+ {
112
+ .thread_name = "main",
113
+ .stack_usage_metric_key = MEMFAULT_METRICS_KEY(memory_main_pct_max),
114
+ },
115
+ {
116
+ .thread_name = "shell_uart",
117
+ .stack_usage_metric_key = MEMFAULT_METRICS_KEY(memory_shell_uart_pct_max),
118
+ });
119
+ ```
120
+
121
+ - Update to support removal of the global ` CSTD ` compiler property (deprecated
122
+ in Zephyr v3.7.0, and just removed in Zephyr ` main ` ), when
123
+ ` CONFIG_MEMFAULT_COMPACT_LOG ` is enabled. Thanks to
124
+ [ @fouge ] ( https://github.com/fouge ) for providing this fix in
125
+ [ #78 ] ( https://github.com/memfault/memfault-firmware-sdk/pull/78 ) !
126
+
127
+ - Add a new built-in metric, ` cpu_usage_pct ` , which reports the percentage of
128
+ the CPU used. This metric is enabled by default as part of the default set
129
+ of metrics, controlled with ` CONFIG_MEMFAULT_METRICS_DEFAULT_SET_ENABLE ` .
130
+
131
+ - For ARM targets implementing and enabling the MPU, automatically capture the
132
+ and
133
+ [ analyze the MPU configuration] ( https://docs.memfault.com/docs/platform/trace-details#mpu-analysis )
134
+ as part of a coredump. This can be controlled with the
135
+ ` CONFIG_MEMFAULT_COREDUMP_COLLECT_MPU_STATE ` Kconfig option.
136
+
137
+ - Add a new Kconfig option, ` CONFIG_MEMFAULT_METRICS_HEARTBEAT_INTERVAL_SECS ` ,
138
+ which should be used instead of
139
+ ` #define MEMFAULT_METRICS_HEARTBEAT_INTERVAL_SECS xxx ` in
140
+ ` memfault_platform_config.h ` . A build error will occur if the value is set
141
+ in ` memfault_platform_config.h ` to enforce migrating the setting. Thanks to
142
+ [ @JordanYates ] ( https://github.com/JordanYates ) for reporting this feature
143
+ request in
144
+ [ #80 ] ( https://github.com/memfault/memfault-firmware-sdk/issues/80 )
145
+
146
+ - ESP-IDF:
147
+
148
+ - Add support for correctly marking crashes triggered due to a Task Watchdog.
149
+ A test command, ` esp_task_watchdog <cpuid> ` , has been added to the
150
+ [ esp32 sample app] ( examples/esp32 ) to trigger a Task Watchdog fault on the
151
+ specified core. Be sure to enable the Kconfig option
152
+ ` CONFIG_ESP_TASK_WDT_PANIC=y ` to have the system panic when a Task Watchdog
153
+ fault occurs. Memfault will capture and tag the fault appropriately, as for
154
+ other fault types.
155
+
156
+ - Add a new Kconfig option, ` CONFIG_MEMFAULT_METRICS_HEARTBEAT_INTERVAL_SECS ` ,
157
+ which should be used instead of
158
+ ` #define MEMFAULT_METRICS_HEARTBEAT_INTERVAL_SECS xxx ` in
159
+ ` memfault_platform_config.h ` . A build error will occur if the value is set
160
+ in ` memfault_platform_config.h ` to enforce migrating the setting.
161
+
162
+ - nRF-Connect SDK:
163
+
164
+ - Add an implementation for reboot reason tracking on the nRF54Lx series of
165
+ MCUs, using the ` RESETREAS ` register to determine the reset reason. This
166
+ will be automatically enabled when building for an nRF54Lx series device
167
+ (` CONFIG_SOC_SERIES_NRF54LX=y ` ).
168
+
169
+ - Add example usage of per-thread stack usage support to the
170
+ [ nRF9160 example] ( examples/nrf-connect-sdk/nrf9160 ) for the idle, sysworkq,
171
+ mflt http, WDT, and shell uart tasks.
172
+
173
+ ### 🐛 Fixed
174
+
175
+ - Zephyr:
176
+
177
+ - Fix the ` MEMFAULT_METRICS_CPU_TEMP ` Kconfig dependencies, to correctly check
178
+ for presence of the DT ` die-temp0 ` alias, and remove the dependency on
179
+ ` ADC ` , which doesn't apply to all boards implementing a temp sensor. Thanks
180
+ to [ @JordanYates ] ( https://github.com/JordanYates ) for reporting this issue
181
+ in [ #79 ] ( https://github.com/memfault/memfault-firmware-sdk/issues/79 ) !
182
+
183
+ ### 🛠️ Changed
184
+
185
+ - General:
186
+
187
+ - The [ ` eclipse_patch.py ` ] ( scripts/eclipse_patch.py ) utility
188
+ ` --memfault-sdk-dir ` argument is now optional, and defaults to the parent
189
+ directory of the script folder.
190
+
191
+ - FreeRTOS:
192
+
193
+ - Renamed the [ FreeRTOS QEMU sample app] ( examples/freertos ) heap metrics from
194
+ ` Example_HeapFreeBytes ` and ` Example_HeapMinFreeBytes ` to
195
+ ` FreeRTOS_HeapFreeBytes ` and ` FreeRTOS_HeapMinFreeBytes ` .
196
+
197
+ - nRF-Connect SDK:
198
+
199
+ - Update the [ nRF91 sample app] ( examples/nrf-connect-sdk/nrf91 ) to only enable
200
+ the UART log backend. Previously both the SHELL and UART log backends were
201
+ enabled, resulting in duplicate log lines emitted to the console.
202
+
203
+ - Update the [ nRF91 sample app] ( examples/nrf-connect-sdk/nrf91 ) and the
204
+ [ nRF5x sample app] ( examples/nrf-connect-sdk/nrf5 ) to use the latest version
205
+ of the nRF-Connect SDK, v2.9.0.
206
+
207
+ - Zephyr:
208
+
209
+ - Renamed the [ QEMU sample app] ( examples/zephyr/qemu/ ) metric
210
+ ` main_thread_cpu_time_permille ` -> ` cpu_usage_main_pct ` .
211
+
9
212
## [ 1.18.0] - 2024-11-25
10
213
11
214
### 📈 Added
12
215
13
216
- General:
14
217
15
218
- Add a new built-in metric, ` uptime_s ` , which reports the total uptime of the
16
- device in seconds. This metrics is enabled by default, and can be disabled
219
+ device in seconds. This metric is enabled by default, and can be disabled
17
220
with ` #define MEMFAULT_METRICS_UPTIME_ENABLE 0 ` in
18
221
` memfault_platform_config.h ` .
19
222
@@ -31,6 +234,14 @@ and this project adheres to
31
234
capture the core that triggered the fault, and if the non-faulting core is
32
235
available for capture, it will be included as well.
33
236
237
+ ### 🛠️ Changed
238
+
239
+ - ESP-IDF:
240
+
241
+ - Updated the [ ESP32 example] ( examples/esp32 ) to no longer read some
242
+ non-volatile values into stack-allocated buffers. This reduces overall stack
243
+ usage for the ` main ` thread by about 350 bytes.
244
+
34
245
## [ 1.17.0] - 2024-11-14
35
246
36
247
### 📈 Added
0 commit comments