elasticsearch入門系列">elasticsearch入門系列
967
2022-05-29
摘要:本篇帖子向大家講述如何添加和修改一些函數(shù)到我們自己的main.c文件中,最終使LiteOS及其組件運(yùn)行起來,也是本連載貼的完結(jié)篇吧!
一、照葫蘆畫瓢---詳解iot_link/targets/STM32L431_BearPi/Src/main.c文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include?"main.h"
#include?"sys_init.h"
#include?"mem.h"
#include?"los_base.h"
#include?"los_task.ph"
#include?"los_typedef.h"
#include?"los_sys.h"
#if?defined?(__CC_ARM)
extern? char? Image$$RW_IRAM1$$ZI$$Limit?[];
extern? char? Image$$ARM_LIB_STACKHEAP$$Base?[];
#elif?defined?(__GNUC__)
/*?我們使用IoT?Studio默認(rèn)是GNUC編譯環(huán)境,所以用該預(yù)處理項(xiàng)
*?該處引入了兩個(gè)變量__los_heap_addr_start__和__los_heap_addr_end__,這兩個(gè)變量定義在os.ld文件中,想知道詳細(xì)定義的可以移步到
*“0x04使用IoT-Studio移植LiteOS到STM32L476(也可以是其他芯片)---修改鏈接腳本”
*/
extern? char? __los_heap_addr_start__?[];
extern? char? __los_heap_addr_end__?[];
#else
#error?"fix?me"
#endif
/*?以下代碼就將一段物理內(nèi)存開始地址和結(jié)束地址映射為一個(gè)名為system_phys_mem的結(jié)構(gòu)體數(shù)組
*?這段內(nèi)存將來給LiteOS分配使用
*/
const? struct? phys_mem?system_phys_mem?[]?=
{
#if?defined?(__CC_ARM)
{?Image$$RW_IRAM1$$ZI$$Limit,?Image$$ARM_LIB_STACKHEAP$$Base?},
#elif?defined?(__GNUC__)
{(unsigned? long )?__los_heap_addr_start__,(unsigned? long )?__los_heap_addr_end__?},
#else
#error?"fix?me"
#endif
{?0,?0?}
};
/*?該函數(shù)用于初始化開發(fā)板特有的外設(shè),例如LCD顯示器、溫濕度采集器等等,移植時(shí)可以將你的開發(fā)板的特有外設(shè)的初始化函數(shù)在此替換
*
*/
VOID? HardWare_Init( VOID )
{
HAL_Init();
/*?Configure?the?system?clock?*/
SystemClock_Config();
MX_GPIO_Init();
MX_I2C1_Init();
MX_SPI2_Init();
dwt_delay_init(SystemCoreClock);
LCD_Init();
LCD_Clear(BLACK);
POINT_COLOR?=?GREEN;
LCD_ShowString(10,?50,?240,?24,?24,? "Welcome?to?BearPi!" );
LCD_ShowString(20,?90,?240,?16,?16,? "BearPi-IoT?Develop?Board" );
LCD_ShowString(20,?130,?240,?16,?16,? "Powerd?by?Huawei?LiteOS!" );
LCD_ShowString(30,?170,?240,?16,?16,? "Connecting?NET......" );
}
/*?導(dǎo)入Demo的函數(shù)link_main,該函數(shù)的定義在iot_link/link_main.c中
*?該函數(shù)中根據(jù)我們的條件編譯宏來選擇使能哪些組件(定時(shí)器、網(wǎng)絡(luò)、各類Demo)最終調(diào)用standard_app_demo_main();啟動特定Demo中的任務(wù)
*?大家可以進(jìn)到Demo文件夾下,每個(gè)Demo中都有這個(gè)standard_app_demo_main();函數(shù)的定義,這就是統(tǒng)一接口接口化編程的實(shí)例
*/
extern? int? link_main( void? *args);
/*?該函數(shù)用于初始化我們的第一個(gè)任務(wù),也就是link_main,我們需要初始化自己的任務(wù)可以照著仿寫
*
*/
static? int? link_test()
{
int? ret?=?-1;
UINT32? uwRet?=?LOS_OK;
UINT32?? handle;
TSK_INIT_PARAM_S?task_init_param;???????????????????????????????????????????? //定義一個(gè)task_init_param結(jié)構(gòu)體變量,用于傳遞任務(wù)參數(shù)
memset? (&task_init_param,?0,? sizeof? (TSK_INIT_PARAM_S));
task_init_param.uwArg?=?(unsigned? int )NULL;
task_init_param.usTaskPrio?=?2;???????????????????????????????????????????????????? //設(shè)置任務(wù)優(yōu)先級
task_init_param.pcName?=( char? *)? "link_main" ;???????????????????????????? //設(shè)置任務(wù)名稱
task_init_param.pfnTaskEntry?=?(TSK_ENTRY_FUNC)link_main;???? //設(shè)置任務(wù)入口函數(shù),這就是上面引入的那個(gè)函數(shù)
task_init_param.uwStackSize?=?0x1000;???????????????????????????????????????? //設(shè)置任務(wù)棧大小,這個(gè)任務(wù)棧將在__los_heap_addr_start__到__los_heap_addr_end__之間的內(nèi)存中分配
uwRet?=?LOS_TaskCreate(&handle,?&task_init_param);???????????????? //創(chuàng)建任務(wù)
if (LOS_OK?==?uwRet){
ret?=?0;
}
return? ret;
}
int? main( void )
{
UINT32? uwRet?=?LOS_OK;
HardWare_Init();
uwRet?=?LOS_KernelInit();???????????????????????????????????????????????????????????? //初始化內(nèi)核
if? (uwRet?!=?LOS_OK)
{
return? LOS_NOK;
}
extern? void? shell_uart_init( int? baud);???????????????????????????????????????????? //導(dǎo)入和初始化shell,你的開發(fā)板以上電就會自動啟動shell,你可以用鍵盤輸入一個(gè)help試試,別認(rèn)為是程序壞了
shell_uart_init(115200);????????????????????????????????????????????????????????????????? //沒有打印hello?world
link_test();
( void )LOS_Start();????????????????????????????????????????????????????????????????????????? //開啟操作系統(tǒng)調(diào)度
return? 0;???????????????????????????????????????????????????????????????????????????????????????? //正常情況下永遠(yuǎn)不會運(yùn)行到return?0
}
PS:大家在復(fù)制main.c到自己的工程中修改時(shí),記得順便將main.h也復(fù)制過去,然后就可以開始編譯了,編譯過程中應(yīng)該會出現(xiàn)一些錯誤,大部分都是依賴文件導(dǎo)致的,你可以嘗試將缺失的依賴文件找到,并復(fù)制到特定的文件夾中,知道解決文件,如果遇到無法解決的文件,歡迎大家給我留言和私信,留言盡量留到“匯總帖中”,便于后來的同學(xué)參考這些有價(jià)值的問題以及解決方案,感謝大家的支持!
輕量級操作系統(tǒng) LiteOS
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。