STM32L476移植華為LiteOS系列教程---main.c 8

      網(wǎng)友投稿 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

      STM32L476移植華為LiteOS系列教程---main.c 8

      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)容。

      上一篇:基于AI算法開發(fā)套件進(jìn)行水表讀數(shù)識別
      下一篇:俄羅斯方塊源碼分享 html+css+js
      相關(guān)文章
      亚洲日韩精品A∨片无码加勒比| 亚洲成aⅴ人片在线观| 亚洲综合偷自成人网第页色| 亚洲影院在线观看| 亚洲国产精品lv| 亚洲激情中文字幕| 亚洲欧洲日韩不卡| 亚洲综合一区二区精品导航| 亚洲丁香色婷婷综合欲色啪| 亚洲高清在线视频| 337p欧洲亚洲大胆艺术| 久久精品国产亚洲av高清漫画| 亚洲免费在线播放| 亚洲美女一区二区三区| 亚洲免费观看在线视频| 亚洲一线产区二线产区精华| 亚洲精品一二三区| 亚洲高清国产拍精品熟女| 国产亚洲视频在线播放大全| 亚洲国产午夜中文字幕精品黄网站 | 亚洲色精品aⅴ一区区三区| 亚洲欧洲日产国码av系列天堂| 亚洲精品亚洲人成在线观看| 亚洲国产精品无码久久一区二区 | 在线观看日本亚洲一区| 亚洲精品无码久久| 国产亚洲女在线线精品| 亚洲午夜福利精品久久| 亚洲欧洲美洲无码精品VA| 亚洲国产女人aaa毛片在线 | 亚洲精品一区二区三区四区乱码| 亚洲日韩在线视频| 亚洲欧洲专线一区| 亚洲AV无码乱码在线观看性色扶| 亚洲成a人片在线观看久| 亚洲一区AV无码少妇电影☆| 亚洲欧洲一区二区| 亚洲av永久无码精品天堂久久 | 午夜亚洲www湿好大| 亚洲永久中文字幕在线| 亚洲码欧美码一区二区三区|