首页 > 其他分享 >OpenHarmony开发05 —— 操作系统实验之线程

OpenHarmony开发05 —— 操作系统实验之线程

时间:2023-01-08 21:00:10浏览次数:56  
标签:OpenHarmony attr Thread 05 Test thread 线程 printf tid

OpenHarmony开发05 —— 操作系统实验之线程

[实验指导文档](OpenHarmony/vendor_hisilicon - Gitee.com)

  1. 首先将代码thread_demo/00_thread拷贝到程序目录下

  2. 参照指导文档,我们修改app/BUILD.gn,并且修改:

    import("//build/lite/config/component/lite_component.gni")
    
    lite_component("app") {
        features = [
            "iothardware:thread_demo",
        ]
    }
    
  3. 在openharmony源码顶层目录执行python3 build.py wifiiot

    image

    发现报错[OHOS ERROR] /home/ros/Documents/DevEco/Projects/OpenHarmony-v3.1-Release/build/lite/components/ohos_builds not found

  4. 在网上一番搜索,先执行python3 -m pip install --user ohos-build

    image

  5. 但是之后也没有解决,于是换一种思路,直接更改my_first_app

    // helloworld.c
    #include <stdio.h>
    #include <unistd.h>
    #include "ohos_init.h"
    #include "cmsis_os2.h"
    
    #define STACK_SIZE 1024
    #define OS_DELAY 100
    #define OS_DELAYONE 20
    
    osThreadId_t newThread(char *name, osThreadFunc_t func, int*arg)
    {
        osThreadAttr_t attr = {
            name, 0, NULL, 0, NULL, 1024*2, osPriorityNormal, 0, 0
        };
        osThreadId_t tid = osThreadNew(func, arg, &attr);
        if (tid == NULL) {
            printf("[Thread Test] osThreadNew(%s) failed.\r\n", name);
        } else {
            printf("[Thread Test] osThreadNew(%s) success, thread id: %d.\r\n", name, tid);
        }
        return tid;
    }
    
    void threadTest(int *arg)
    {
        static int count = 0;
        printf("%s\r\n", (char *)arg);
        osThreadId_t tid = osThreadGetId();
        printf("[Thread Test] threadTest osThreadGetId, thread id:%p\r\n", tid);
        while (1) {
            count++;
            printf("[Thread Test] threadTest, count: %d.\r\n", count);
            osDelay(OS_DELAYONE);
        }
    }
    
    void rtosv2_thread_main(int *arg)
    {
        (void)arg;
        osThreadId_t tid = newThread("test_thread", threadTest, "This is a test thread.");
    
        const char *t_name = osThreadGetName(tid);
        printf("[Thread Test] osThreadGetName, thread name: %s.\r\n", t_name);
    
        osThreadState_t state = osThreadGetState(tid);
        printf("[Thread Test] osThreadGetState, state :%d.\r\n", state);
    
        osStatus_t status = osThreadSetPriority(tid, osPriorityNormal4);
        printf("[Thread Test] osThreadSetPriority, status: %d.\r\n", status);
    
        osPriority_t pri = osThreadGetPriority(tid);
        printf("[Thread Test] osThreadGetPriority, priority: %d.\r\n", pri);
    
        status = osThreadSuspend(tid);
        printf("[Thread Test] osThreadSuspend, status: %d.\r\n", status);
    
        status = osThreadResume(tid);
        printf("[Thread Test] osThreadResume, status: %d.\r\n", status);
    
        uint32_t stacksize = osThreadGetStackSize(tid);
        printf("[Thread Test] osThreadGetStackSize, stacksize: %u.\r\n", stacksize);
    
        uint32_t stackspace = osThreadGetStackSpace(tid);
        printf("[Thread Test] osThreadGetStackSpace, stackspace: %u.\r\n", stackspace);
    
        uint32_t t_count = osThreadGetCount();
        printf("[Thread Test] osThreadGetCount, count: %u.\r\n", t_count);
    
        osDelay(OS_DELAY);
        status = osThreadTerminate(tid);
        printf("[Thread Test] osThreadTerminate, status: %d.\r\n", status);
    }
    
    void HelloWorld(void)
    {
        osThreadAttr_t attr;
        attr.name = "rtosv2_thread_main";
        attr.attr_bits = 0U;
        attr.cb_mem = NULL;
        attr.cb_size = 0U;
        attr.stack_mem = NULL;
        attr.stack_size = STACK_SIZE;
        attr.priority = osPriorityNormal;
    
        if (osThreadNew((osThreadFunc_t)rtosv2_thread_main, NULL, &attr) == NULL) {
            printf("[ThreadTestTask] Failed to create rtosv2_thread_main!\n");
        }
    }
    //SYS_RUN(HelloWorld);
    APP_FEATURE_INIT(HelloWorld);
    
//build.gn
static_library("myapp") {
    sources = [
        "hello_world.c",
    ]
    include_dirs = [
        "//utils/native/lite/include",
        "//commonlibrary/utils_lite/include",
        "//kernel/liteos_m/components/cmsis/2.0",
    ]
}
  1. 运行结果:

    image

标签:OpenHarmony,attr,Thread,05,Test,thread,线程,printf,tid
From: https://www.cnblogs.com/ZzTzZ/p/17035334.html

相关文章

  • 多线程
    多线程一、创建方式:1.继承Thread类(重点)2.实现Runnable接口(重点)3.实现Callable接口(了解)二、.Lamda表达式1.简洁代码2.避免匿名内部类定义过多3.关键:函数式接口:一个接口只包......
  • java并发编程_线程
    创建进程方式1,start一个新的线程,启动线程后回调newRunnable中的run方法,run方法调用结束后,JVM等待回收线程。publicclassFutureTaskOne{publicstaticvoidmai......
  • OpenHarmony开发06 —— 配置EMQX与MQTTX
    OpenHarmony开发06——配置EMQX与MQTTX安装与启动在网站下载EMQX——Windows版解压后,命令行进入解压路径里的bin,启动EMQX./bin/emqxstart浏览器打开http:......
  • Codeforces 1305 F Kuroni and the Punishment 题解 (随机算法)
    题目链接首先注意到每个数最多操作1次就能让他变成2的倍数,所以答案\(\len\)。如果我们能枚举[1,1e12]中所有的质数,并对每个质数p求出把数组中所有数都变成它的倍数的最少......
  • 使用ThreadPoolExecutor and schedule进行创建线程池(多线程-定时任务-数据同步-任务队
    使用ThreadPoolExecutorandschedule进行创建线程池(多线程-定时任务-数据同步-任务队列)#使用ThreadPoolExecutorandschedule进行创建线程池(多线程-定时任务-数据同步-......
  • java多线程知识点总结
    一、线程的三种创建方法1-1继承Thread继承thread方法然后重写run方法,在用start开启线程。代码实现:Threadt=newThread(){@Overridepu......
  • C++ - 多线程
    1.多线程传统的C++(C++11之前)中并没有引入线程这个概念,在C++11出来之前,如果我们想要在C++中实现多线程,需要借助操作系统平台提供的API,比如Linux的<pthread.h>,或者windows下......
  • 多线程的事务回滚问题
    多线程的事务回滚问题环境要求1.mybatis-plus或mybatis2.支持单表的增删改查3.书写工具类将集合平分,获取线程池importjava.util.ArrayList;importjava.util.List;......
  • QT线程间发送结构体
     QT的信号和槽机制能十分方便的用来传输数据,但是如果数据种类比较多,分类比较多的时候,就需要更好地更高效的来传递数据的方法。以结构体作为参数是个很不错的选择。这几天......
  • Airtest10053您的主机中的软件中止了一个已建立的连接,10054远程主机强迫关闭了一个现
    小站注:以下两个错误出现的频率相当高,官方本篇推文讲的很清楚了。 初始化顺序错误时会出现: ConnectionAbortedError: [WinError10053] 您的主机中的软件中止了一个......