嵌入式linux開發 (三十三) 內存管理2.0(4) rt-thread內存管理

//
static char thread1_stack[1024];
struct rt_thread thread1;
rtthread_startup
	rt_application_init
	rt_system_scheduler_start
		
	    rt_thread_init(&thread1,
	                   "led1",
	                   rt_thread_entry1,
	                   RT_NULL,
	                   &thread1_stack[0],
	                   sizeof(thread1_stack),11,5);
	    rt_thread_startup(&thread1);
整體來說,佈局的話,和ucos 一樣
flash
	.code .ro-data // 應用程序的和系統的混在一起了
ram
	.data .bss .heap  TCB(應用程序) // 應用程序的和系統的混在一起了
		// 注意: TCB在.data裏面 
		// OS_EXT  OS_TCB            OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS];   /* Table of TCBs                  */
	.stack(內核) .stack(應用程序1) .stack(應用程序2) ...  // 應用程序的和內核的分開了
	// freertos 的 應用程序stack 是在 .data中的 
	// OS_STK START_TASK_STK[START_STK_SIZE];
	//內核stack 是 一開始初始化的
---------------------------和裸機內存的佈局有什麼不同
1.大體相同(都是 .code .ro-data .data .bss .heap .stack)
2.只不過.data被內核用了一部分(用於TCB的管理)
3.stack被分成了很多份(內核一份(內核的stack在.stack),每個應用程序一份(用戶的stack在.data))


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章