[文章]移植OpenHarmony轻量系统【6】内核初始化和启动

阅读量0
0
4
摘要:本文简单介绍OpenHarmony轻量系统移植,内核初始化和启动
适合群体:想自己动手移植OpenHarmony轻量系统的朋友
上一节我们已经实现了链接脚本和启动文件,现在代码可以进入main函数,接下来我们要初始化内核、启动内核。
6.1 main函数Main函数位于:deviceboardlianzhiangd32f303_lianzhiansdk

可以看到,main函数的实现比较简单,先实现gpio和串口的初始化。
接下来是比较重要的,我们要调用内核之前,需要先调用LOS_KernelInit做内核初始化。
然后我们可以先创建自己的线程,这里我写了一个 TaskSample 函数,该函数用于创建2个线程:
  1. VOID TaskSampleEntry2(VOID)
  2. {
  3.         printf("______>>>>>>>>> %s %drn", __FILE__, __LINE__);
  4.         led_init();
  5.     while (1) {
  6.         printf("___>>>>>> %s %drn", __FILE__, __LINE__);
  7.                
  8.                 led_on(0);
  9.                 led_on(1);
  10.                 led_on(2);
  11.                 led_on(3);
  12.         LOS_TaskDelay(1000);
  13.                
  14.                 led_off(0);
  15.                 led_off(1);
  16.                 led_off(2);
  17.                 led_off(3);
  18.                 LOS_TaskDelay(1000);
  19.     }
  20. }

  21. //线程1,用于打印
  22. VOID TaskSampleEntry1(VOID)
  23. {
  24.         printf("______>>>>>>>>> %s %drn", __FILE__, __LINE__);
  25.     while (1) {
  26.         printf("___>>>>>> %s %drn", __FILE__, __LINE__);
  27.         LOS_TaskDelay(1000);
  28.    
  29.     }
  30. }

  31. //创建线程
  32. VOID TaskSample(VOID)
  33. {
  34.     UINT32 uwRet;
  35.     UINT32 taskID1;
  36.     UINT32 taskID2;
  37.     TSK_INIT_PARAM_S stTask = {0};

  38.     stTask.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskSampleEntry1;
  39.     stTask.uwStackSize = 0x1000;
  40.     stTask.pcName = "TaskSampleEntry1";
  41.     stTask.usTaskPrio = 6; /* Os task priority is 6 */
  42.     uwRet = LOS_TaskCreate(&taskID1, &stTask);
  43.     if (uwRet != LOS_OK) {
  44.         printf("Task1 create failedrn");
  45.     }

  46.     stTask.pfnTaskEntry = (TSK_ENTRY_FUNC)TaskSampleEntry2;
  47.     stTask.uwStackSize = 0x1000;
  48.     stTask.pcName = "TaskSampleEntry2";
  49.     stTask.usTaskPrio = 7; /* Os task priority is 7 */
  50.     uwRet = LOS_TaskCreate(&taskID2, &stTask);
  51.     if (uwRet != LOS_OK) {
  52.         printf("Task2 create failedrn");
  53.     }
  54. }

复制代码

6.2 内核启动内核启动函数是LOS_Start();一般来说,该函数是不会返回的,调用该函数后内核启动,会执行各种任务。

其实这里我的main函数是非常简单的,通常情况下,我们需要创建一个线程,该线程去执行 OHOS_Main(); 函数。不过这里我们先做简单的,后面再完善。




回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友