SPRUIU9B August 2020 – September 2022 TMS320F280033 , TMS320F280034 , TMS320F280034-Q1 , TMS320F280036-Q1 , TMS320F280036C-Q1 , TMS320F280037 , TMS320F280037-Q1 , TMS320F280037C , TMS320F280037C-Q1 , TMS320F280038-Q1 , TMS320F280038C-Q1 , TMS320F280039 , TMS320F280039-Q1 , TMS320F280039C , TMS320F280039C-Q1 , TMS320F280040-Q1 , TMS320F280040C-Q1 , TMS320F280041 , TMS320F280041-Q1 , TMS320F280041C , TMS320F280041C-Q1 , TMS320F280045 , TMS320F280048-Q1 , TMS320F280048C-Q1 , TMS320F280049 , TMS320F280049-Q1 , TMS320F280049C , TMS320F280049C-Q1 , TMS320F28P550SJ , TMS320F28P559SJ-Q1
The Compiler provides the following support for LFU:
The Compiler requires the old firmware executable to be provided as a reference image while building the new firmware executable. This allows the compiler to identify common variables and their locations, and also identify new variables and deleted variables.
The compiler defines two new LFU attributes for variables, called preserve and update. “Preserve” is used to maintain the addresses of common variables between firmware versions. “Update” is used to indicate new variables that the compiler can assign addresses without constraints and also initialize during the Compiler’s LFU initialization routine, named __TI_auto_init_warm(). Examples of how these attributes can be used are listed below:
float32_t __attribute__((preserve)) BUCK_update_test_variable1_cpu;
float32_t __attribute__((update)) BUCK_update_test_variable2_cpu;
With the above assignments, the generated memory map file contains “.TI.bound” sections corresponding to the preserve variables and a single “.TI.update” section where all the update variables are collected into.
To make things easier for the application developer, different LFU modes are available. The default mode is called preserve (not to be confused with the corresponding variable attribute described above), which has the following properties: