OpenHarmony (1)

本文介绍了作者对OpenHarmonyOS(基于LiteOS)内核调度的学习过程,包括从LiteOS到RT-Thread的转向,以及在不同平台上的实践。文章展示了部分源码,如调度器的实现,强调了系统的全开源特性,使得深入研究底层调度成为可能。
摘要由CSDN通过智能技术生成

HarmonyOS框架

  LiteOS,比较熟悉了,出来很久了,真正接触它是在Hi3559v200运动相机上,跑着LiteOS + Linux双系。在学习了解时,希望按照自己的风格来,于是边了解边结构。

  但毕竟没有全开源,所以对于底层的调度等都无法看到代码,只能望着libcortex-a7.a而惆怅。

  处于对系统调度算法及SMP的好奇,搜索到RT-Thread是全开源的,于是下载研究,并在HI3518EV300上边学边写。了解了后,原来是那么简单,有点类似单片机,开个定时器,到时间了就调度。虽说简单,但设计上要考虑的东西还是挺多了,由于时间原因,只学习到优先级调度,同级时间轮转调度,完成了几个测试任务的打印输出。

/*
 * Future Kernel Bootloader
 *
 * Copyright (c) 2020 FineClass <fineclass@163.com>
 *
 * LOC: main.c
 * ************************************************ */

#include <board.h>
#include <config.h>
#include <rtsi.h>

#define RTS_MAIN_THREAD_PRIORITY    (RTS_PRIORITY_MAX / 3)

/* the system main thread */
static void main_thread(void *param)
{
#ifdef RTS_USING_SMP
    rt_hw_secondary_cpu_up();
#endif
    while(1) {
        RTS_ThreadId tid = RTS_thread_self_id();
        kprint("MainThread(id: %u) run\n", tid);
        nop_delay(1000);
    }
}

static void test_thread(void *param)
{
    while(1) {
        RTS_ThreadId tid = RTS_thread_self_id();
        kprint("TestThread(id: %u) run\n", tid);
        nop_delay(1000);
    }
}

void boot_main(u32 base)
{    
    u32 ret = 0;
    RTS_ThreadId mainTid = RTS_THREAD_ID_INVAILD;

    RTS_hw_interrupt_disable();

    kprint("Fukeboot v%u.%u.%u (Build %s %s)\n",
            MAJOR, MINOR, PATCH, __DATE__, __TIME__);
    
    RTS_init(base, DDR_BASE + DDR_SIZE - base);

    // create app_thread
    ret = RTS_thread_create(&mainTid, "MainThread", main_thread,
                            NULL, RTS_MAIN_THREAD_PRIORITY);
    if(ret != RTS_RESULT_OK) {
        kprint("create MainThread err(0x%08X)\n", ret);
    } else {
        kprint("create MainThread (id: %u) OK\n", mainTid);
    }

    // create test_thread
    ret = RTS_thread_create(&mainTid, "TestThread", test_thread,
                            NULL, RTS_MAIN_THREAD_PRIORITY);
    if(ret != RTS_RESULT_OK) {
        kprint("create TestThread err(0x%08X)\n", ret);
    } else {
        kprint("create TestThread (id: %u) OK\n", mainTid);
    }

    // then

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值