1414#include <zephyr/devicetree.h>
1515#include <zephyr/drivers/timer/system_timer.h>
1616#include <kernel_internal.h> //for z_idle_threads and arch_kernel_init
17+ #include <zephyr/linker/linker-defs.h>
1718
1819#include "os_queue.h"
1920#include "os_msg.h"
3738
3839LOG_MODULE_REGISTER (osif );
3940
40- #define RAM_DATA_START DT_REG_ADDR(DT_NODELABEL(ram_data ))
41- #define RAM_DATA_SIZE DT_REG_SIZE(DT_NODELABEL(ram_data ))
41+ #define EXTRAM_HEAP_START DT_REG_ADDR(DT_NODELABEL(ext_data_ram_heap ))
42+ #define EXTRAM_HEAP_SIZE DT_REG_SIZE(DT_NODELABEL(ext_data_ram_heap ))
4243
43- #define RAM_CODE_START DT_REG_ADDR(DT_NODELABEL(ram_code ))
44- #define RAM_CODE_SIZE DT_REG_SIZE(DT_NODELABEL(ram_code ))
44+ #define EXTRAM_START DT_REG_ADDR(DT_NODELABEL(ext_data_ram ))
45+ #define EXTRAM_SIZE DT_REG_SIZE(DT_NODELABEL(ext_data_ram ))
4546
46- #define HEAP_START DT_REG_ADDR(DT_NODELABEL(heap))
47- #define HEAP_SIZE DT_REG_SIZE(DT_NODELABEL(heap))
47+ #define EXTRAM_TOTAL_SIZE (16 * 1024) // 240KB
4848
49- #define RAM_REGION_START 0x100c00
50- #define RAM_REGION_END 0x13cc00
49+ BUILD_ASSERT (EXTRAM_START >= 0x200000 &&
50+ END_ADDRESS (EXTRAM_START , EXTRAM_SIZE ) <= 0x204000 ,
51+ "EXTRAM Region is out of bounds" );
52+
53+ BUILD_ASSERT (EXTRAM_HEAP_START >= 0x200000 &&
54+ END_ADDRESS (EXTRAM_HEAP_START , EXTRAM_HEAP_SIZE ) <= 0x204000 ,
55+ "EXTRAM_HEAP Region is out of bounds" );
56+
57+ BUILD_ASSERT (END_ADDRESS (EXTRAM_START , EXTRAM_SIZE ) <= EXTRAM_HEAP_START ,
58+ "EXTRAM end address overlaps with EXTRAM_HEAP start address" );
59+
60+ BUILD_ASSERT (EXTRAM_SIZE + EXTRAM_HEAP_SIZE <= EXTRAM_TOTAL_SIZE ,
61+ "Total size of EXTRAM & EXTRAM_HEAP regions exceeds 16KB!" );
62+
63+ #define TCM0_START DT_REG_ADDR(DT_NODELABEL(tcm0))
64+ #define TCM0_SIZE DT_REG_SIZE(DT_NODELABEL(tcm0))
65+
66+ #define TCM1_START DT_REG_ADDR(DT_NODELABEL(tcm1))
67+ #define TCM1_SIZE DT_REG_SIZE(DT_NODELABEL(tcm1))
68+
69+ #define TCM_HEAP_START DT_REG_ADDR(DT_NODELABEL(tcm_heap))
70+ #define TCM_HEAP_SIZE DT_REG_SIZE(DT_NODELABEL(tcm_heap))
71+
72+ #define TCM_START 0x100c00
73+ #define TCM_END 0x13cc00
5174#define MAX_TOTAL_SIZE (240 * 1024) // 240KB
5275
5376#define END_ADDRESS (start , size ) ((start) + (size))
5477
55- // Assert for RAM Data Region
56- BUILD_ASSERT (RAM_DATA_START >= RAM_REGION_START &&
57- END_ADDRESS (RAM_DATA_START , RAM_DATA_SIZE ) <= RAM_REGION_END ,
58- "RAM Data Region is out of bounds" );
78+ // Assert for TCM0 Region
79+ BUILD_ASSERT (TCM0_START >= TCM_START &&
80+ END_ADDRESS (TCM0_START , TCM0_SIZE ) <= TCM_END ,
81+ "TCM0 Region is out of bounds" );
5982
60- // Assert for RAM Code Region
61- BUILD_ASSERT (RAM_CODE_START >= RAM_REGION_START &&
62- END_ADDRESS (RAM_CODE_START , RAM_CODE_SIZE ) <= RAM_REGION_END ,
63- "RAM Code Region is out of bounds" );
83+ // Assert for TCM1 Region
84+ BUILD_ASSERT (TCM1_START >= TCM_START &&
85+ END_ADDRESS (TCM1_START , TCM1_SIZE ) <= TCM_END ,
86+ "TCM1 Region is out of bounds" );
6487
65- // Assert for Heap Region
66- BUILD_ASSERT (HEAP_START >= RAM_REGION_START &&
67- END_ADDRESS (HEAP_START , HEAP_SIZE ) <= RAM_REGION_END ,
68- "Heap Region is out of bounds" );
88+ // Assert for TCM_HEAP Region
89+ BUILD_ASSERT (TCM_HEAP_START >= TCM_START &&
90+ END_ADDRESS (TCM_HEAP_START , TCM_HEAP_SIZE ) <= TCM_END ,
91+ "TCM_HEAP Region is out of bounds" );
6992
7093// Assert for Overlap
71- BUILD_ASSERT (END_ADDRESS (RAM_DATA_START , RAM_DATA_SIZE ) <= RAM_CODE_START ,
72- "RAM_DATA end address overlaps with RAM_CODE start address" );
94+ BUILD_ASSERT (END_ADDRESS (TCM0_START , TCM0_SIZE ) <= TCM1_START ,
95+ "TCM0 end address overlaps with TCM1 start address" );
7396
74- BUILD_ASSERT (END_ADDRESS (RAM_CODE_START , RAM_CODE_SIZE ) <= HEAP_START ,
75- "RAM_CODE end address overlaps with HEAP_START start address" );
97+ BUILD_ASSERT (END_ADDRESS (TCM1_START , TCM1_SIZE ) <= TCM_HEAP_START ,
98+ "TCM1 end address overlaps with TCM_HEAP start address" );
7699
77100// Assert for Total Size
78- BUILD_ASSERT (RAM_DATA_SIZE + RAM_CODE_SIZE + HEAP_SIZE <= MAX_TOTAL_SIZE ,
79- "Total size of TCM regions exceeds 240KB!" );
101+ BUILD_ASSERT (TCM0_SIZE + TCM1_SIZE + TCM_HEAP_SIZE <= MAX_TOTAL_SIZE ,
102+ "Total size of Three regions exceeds 240KB!" );
80103
81104task_sem_item task_sem_array [TASK_SEM_ARRAY_NUMBER ] = {0 };
82105Timer_Info timer_number_array [TIMER_NUMBER_MAX ];
@@ -92,15 +115,15 @@ void os_heap_init_zephyr(void)
92115{
93116 // init heap in data on region
94117 // RAM_TYPE: RAM_TYPE_DATA_ON
95- k_heap_init (& data_on_heap , (void * )HEAP_START , HEAP_SIZE );
118+ k_heap_init (& data_on_heap , (void * )TCM_HEAP_START , TCM_HEAP_SIZE );
96119
97120 // init heap in bufferON region
98121 // RAM_TYPE: RAM_TYPE_BUFFER_ON
99122 k_heap_init (& buffer_on_heap , (void * )BUFFER_ON_HEAP_ADDR , BUFFER_ON_HEAP_SIZE );
100123
101124 // init heap in ext_data_ram region
102125 // RAM_TYPE: RAM_TYPE_EXT_DATA_SRAM
103- k_heap_init (& ext_data_heap , (void * )EXT_DATA_SRAM_HEAP_ADDR , EXT_DATA_SRAM_HEAP_SIZE );
126+ k_heap_init (& ext_data_heap , (void * )EXTRAM_HEAP_START , EXTRAM_HEAP_SIZE );
104127}
105128
106129void os_init_zephyr (void )
@@ -127,15 +150,13 @@ uint64_t os_sys_tick_get_zephyr(void)
127150 return (uint64_t )sys_clock_tick_get_32 ();
128151}
129152
130-
131153bool os_sched_start_zephyr (void )
132154{
133155 return true;
134156}
135157
136158bool os_sched_stop_zephyr (void )
137159{
138- //TODO
139160 return true;
140161}
141162
@@ -931,7 +952,7 @@ void os_mem_free_zephyr(void *p_block)
931952 {
932953 k_heap_free (& ext_data_heap , p_block );
933954 }
934- else if (p_block >= (void * )DT_REG_ADDR (DT_NODELABEL (heap )))
955+ else if (p_block >= (void * )DT_REG_ADDR (DT_NODELABEL (tcm_heap )))
935956 {
936957 k_heap_free (& data_on_heap , p_block );
937958 }
@@ -959,7 +980,7 @@ void os_mem_aligned_free_zephyr(void *p_block)
959980 {
960981 k_heap_free (& ext_data_heap , p );
961982 }
962- else if (p >= (void * )DT_REG_ADDR (DT_NODELABEL (heap )))
983+ else if (p >= (void * )DT_REG_ADDR (DT_NODELABEL (tcm_heap )))
963984 {
964985 k_heap_free (& data_on_heap , p );
965986 }
@@ -983,7 +1004,7 @@ size_t os_mem_peek_zephyr(RAM_TYPE ram_type)
9831004 {
9841005 case RAM_TYPE_DATA_ON :
9851006 sys_heap_runtime_stats_get (& data_on_heap .heap , & stats );
986- heap_size = DT_REG_SIZE (DT_NODELABEL (heap ));
1007+ heap_size = DT_REG_SIZE (DT_NODELABEL (tcm_heap ));
9871008 break ;
9881009 case RAM_TYPE_BUFFER_ON :
9891010 sys_heap_runtime_stats_get (& buffer_on_heap .heap , & stats );
0 commit comments