[FL-2975] Bug fixes and improvements: Furi, Input, Cli (#2004)

* Furi: configurable heap allocation tracking
* Furi: relax restriction in thread heap setter asserts, apply heap tracking setting on app start instead of thread allocation
* Furi: hide dangerous heap tracking levels in release build
* Input: fix non-working debounce
This commit is contained in:
あく
2022-11-12 17:46:04 +09:00
committed by GitHub
parent 721ab717d7
commit 90cefe7c71
10 changed files with 186 additions and 25 deletions

View File

@@ -1,5 +1,5 @@
entry,status,name,type,params
Version,+,7.4,,
Version,+,7.5,,
Header,+,applications/services/bt/bt_service/bt.h,,
Header,+,applications/services/cli/cli.h,,
Header,+,applications/services/cli/cli_vcp.h,,
@@ -1260,6 +1260,7 @@ Function,+,furi_hal_rtc_deinit_early,void,
Function,+,furi_hal_rtc_get_boot_mode,FuriHalRtcBootMode,
Function,+,furi_hal_rtc_get_datetime,void,FuriHalRtcDateTime*
Function,+,furi_hal_rtc_get_fault_data,uint32_t,
Function,+,furi_hal_rtc_get_heap_track_mode,FuriHalRtcHeapTrackMode,
Function,+,furi_hal_rtc_get_log_level,uint8_t,
Function,+,furi_hal_rtc_get_pin_fails,uint32_t,
Function,+,furi_hal_rtc_get_register,uint32_t,FuriHalRtcRegister
@@ -1272,6 +1273,7 @@ Function,+,furi_hal_rtc_set_boot_mode,void,FuriHalRtcBootMode
Function,+,furi_hal_rtc_set_datetime,void,FuriHalRtcDateTime*
Function,+,furi_hal_rtc_set_fault_data,void,uint32_t
Function,+,furi_hal_rtc_set_flag,void,FuriHalRtcFlag
Function,+,furi_hal_rtc_set_heap_track_mode,void,FuriHalRtcHeapTrackMode
Function,+,furi_hal_rtc_set_log_level,void,uint8_t
Function,+,furi_hal_rtc_set_pin_fails,void,uint32_t
Function,+,furi_hal_rtc_set_register,void,"FuriHalRtcRegister, uint32_t"
1 entry status name type params
2 Version + 7.4 7.5
3 Header + applications/services/bt/bt_service/bt.h
4 Header + applications/services/cli/cli.h
5 Header + applications/services/cli/cli_vcp.h
1260 Function + furi_hal_rtc_get_boot_mode FuriHalRtcBootMode
1261 Function + furi_hal_rtc_get_datetime void FuriHalRtcDateTime*
1262 Function + furi_hal_rtc_get_fault_data uint32_t
1263 Function + furi_hal_rtc_get_heap_track_mode FuriHalRtcHeapTrackMode
1264 Function + furi_hal_rtc_get_log_level uint8_t
1265 Function + furi_hal_rtc_get_pin_fails uint32_t
1266 Function + furi_hal_rtc_get_register uint32_t FuriHalRtcRegister
1273 Function + furi_hal_rtc_set_datetime void FuriHalRtcDateTime*
1274 Function + furi_hal_rtc_set_fault_data void uint32_t
1275 Function + furi_hal_rtc_set_flag void FuriHalRtcFlag
1276 Function + furi_hal_rtc_set_heap_track_mode void FuriHalRtcHeapTrackMode
1277 Function + furi_hal_rtc_set_log_level void uint8_t
1278 Function + furi_hal_rtc_set_pin_fails void uint32_t
1279 Function + furi_hal_rtc_set_register void FuriHalRtcRegister, uint32_t

View File

@@ -10,7 +10,7 @@ extern "C" {
#endif
/* Input Related Constants */
#define INPUT_DEBOUNCE_TICKS 30
#define INPUT_DEBOUNCE_TICKS 4
/* Input Keys */
typedef enum {

View File

@@ -30,7 +30,8 @@ typedef struct {
uint8_t log_reserved : 4;
uint8_t flags;
uint8_t boot_mode : 4;
uint16_t reserved : 12;
uint8_t heap_track_mode : 2;
uint16_t reserved : 10;
} DeveloperReg;
_Static_assert(sizeof(DeveloperReg) == 4, "DeveloperReg size mismatch");
@@ -224,6 +225,19 @@ FuriHalRtcBootMode furi_hal_rtc_get_boot_mode() {
return (FuriHalRtcBootMode)data->boot_mode;
}
void furi_hal_rtc_set_heap_track_mode(FuriHalRtcHeapTrackMode mode) {
uint32_t data_reg = furi_hal_rtc_get_register(FuriHalRtcRegisterSystem);
DeveloperReg* data = (DeveloperReg*)&data_reg;
data->heap_track_mode = mode;
furi_hal_rtc_set_register(FuriHalRtcRegisterSystem, data_reg);
}
FuriHalRtcHeapTrackMode furi_hal_rtc_get_heap_track_mode() {
uint32_t data_reg = furi_hal_rtc_get_register(FuriHalRtcRegisterSystem);
DeveloperReg* data = (DeveloperReg*)&data_reg;
return (FuriHalRtcHeapTrackMode)data->heap_track_mode;
}
void furi_hal_rtc_set_datetime(FuriHalRtcDateTime* datetime) {
furi_assert(datetime);

View File

@@ -39,6 +39,13 @@ typedef enum {
FuriHalRtcBootModePostUpdate, /**< Boot to Update, post update */
} FuriHalRtcBootMode;
typedef enum {
FuriHalRtcHeapTrackModeNone = 0, /**< Disable allocation tracking */
FuriHalRtcHeapTrackModeMain, /**< Enable allocation tracking for main application thread */
FuriHalRtcHeapTrackModeTree, /**< Enable allocation tracking for main and children application threads */
FuriHalRtcHeapTrackModeAll, /**< Enable allocation tracking for all threads */
} FuriHalRtcHeapTrackMode;
typedef enum {
FuriHalRtcRegisterHeader, /**< RTC structure header */
FuriHalRtcRegisterSystem, /**< Various system bits */
@@ -79,6 +86,10 @@ void furi_hal_rtc_set_boot_mode(FuriHalRtcBootMode mode);
FuriHalRtcBootMode furi_hal_rtc_get_boot_mode();
void furi_hal_rtc_set_heap_track_mode(FuriHalRtcHeapTrackMode mode);
FuriHalRtcHeapTrackMode furi_hal_rtc_get_heap_track_mode();
void furi_hal_rtc_set_datetime(FuriHalRtcDateTime* datetime);
void furi_hal_rtc_get_datetime(FuriHalRtcDateTime* datetime);