小米vela系统(基于开源nuttx内核)——如何创建一个线程并且设置线程参数

如何创建一个线程并且设置线程参数

前言

小米 Vela 操作系统是一个高效且适用于嵌入式系统的实时操作系统(RTOS)。它为开发者提供了多种线程管理和调度机制,使得我们能够在多任务环境中有效地管理系统资源。线程是 Vela 中并发执行的基本单位,它可以通过任务和调度机制来管理。
在这里插入图片描述

在这篇文章中,我们将详细介绍如何在 Vela 操作系统 中创建并管理线程。我们将通过一个简单的示例,展示如何创建一个线程来执行下载任务,并在该线程中实现任务的优先级管理。

线程创建的基本步骤

在 Vela 操作系统中,线程的创建和管理过程与标准的 POSIX 线程(pthread)类似。线程的基本创建步骤包括:

初始化线程属性:设置线程的调度策略、优先级、栈大小等。
创建线程:使用系统提供的线程创建 API 来启动线程。
线程执行:线程启动后,会执行指定的函数。
设置线程名称:为线程设置易于识别的名称,便于调试和日志管理。

/**
 * @brief: 创建并启动用于下载的线程
 * 
 * 该函数创建一个新的线程来执行`download_file`函数。设置线程的调度策略、优先级和栈大小。
 * 
 * @return: 无返回值
 */
static void create_download_thread(void)
{
    struct sched_param param;       // 线程调度参数
    pthread_attr_t attr;            // 线程属性
    pthread_t thread;               // 线程ID

    // 初始化线程属性
    pthread_attr_init(&attr);
    
    // 设置线程优先级为100
    param.sched_priority = 100;
    pthread_attr_setschedparam(&attr, &param);
    
    // 设置线程栈大小为10240字节(10KB)
    pthread_attr_setstacksize(&attr, 10240);

    // 创建线程并启动`download_file`函数
    pthread_create(&thread, &attr, download_file, NULL);
    
    // 为线程设置名称(用于调试和日志记录)
    pthread_setname_np(thread, "download_thread");
}
/**
 * @brief: 任务下载文件的线程函数
 * 
 * 
 * @param arg: 线程的参数,当前未使用
 * @return: NULL
 */
static void* vendor_download_file(void *arg)
{
    // 无限循环,线程会一直运行
    while(1)
    {
        // 如果download_flg 标志为1
        if (download_flg == 1)
        {
            // 执行下载任务
            int ret = do_download();
           
            // 记录切换结果的日志
            log_print("do download thread %d", ret);
        }

        // 休眠2秒再进行下一次检查,防止线程占用过多CPU
        sleep(2);
    }

    // 返回NULL表示线程完成
    return NULL;
}

线程创建

  • pthread_attr_init(&attr):初始化线程属性。
  • pthread_attr_setschedparam(&attr, &param):设置线程的调度参数,例如优先级。这里我们设置优先级为 100,这是一个较高的优先级(具体优先级值的大小依赖于操作系统的调度策略)。
  • pthread_attr_setstacksize(&attr, 10240):设置线程栈大小为 10KB,这对于处理较大任务的线程至关重要。
  • pthread_create(&thread, &attr, vendor_download_file, NULL):创建并启动线程,线程会执行 vendor_download_file 函数。
  • pthread_setname_np(thread, "vendor_download_thread"):为线程设置名称,方便在调试过程中识别。

线程执行函数

vendor_download_file 是一个无限循环的线程函数,每次循环检查全局标志 g_tts_flg。当标志为 1 时,它会调用 tts_vendor_switch 函数来执行任务切换,并通过日志记录执行结果。每次操作后,线程会休眠 2 秒再继续检查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值