本文主要是介绍RTX RTOS 操作实例分析之---线程(thread),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
0 Preface/Foreword
1 线程(thread)
1.1 线程定义
1.1.1 USE_BASIC_THREADS(宏定义)
经过以上步骤(makefile包含),USE_BASIC_THREADS在编译阶段被定义到相应的模块中。
1.1.2 定义线程ID变量
osThreadId app_thread_tid;
1.1.3 线程入口函数(entry point)
static void app_thread(void const *argument);
static void app_thread(void const *argument)
{
while(1){
app_mailbox_get();
}
}
1.1.4 定义线程结构体变量 (osThreadDef)
osThreadDef含有5个参数:
- name,线程入口地址,即线程函数入口
- priority,线程的优先级
- instances,该参数,在宏展开时没有实际作用。(一般使用时改值设置为1,为什么呢?)
- stacksz,线程堆栈大小
- task_name,其实就是线程入口地址名字的字符串
注意,thread堆栈的大小由makefile文件控制,thread堆栈的地址为一个数组首地址(转换很有意思,可以参考cmsis_os.h文件),该数组的类似是unit64。
osThreadDef(app_thread, osPriorityAboveNormal, 1, APP_THREAD_STACK_SIZE, "app_thread");
APP_THREAD_STACK_SIZE的值为:1024 * 2
根据以下设置可知APP_THREAD_STACK_SIZE的值。
1.2 创建线程对象(object)
app_thread_tid = osThreadCreate(osThread(app_thread), NULL);
osThreadCreate:该函数的接口在cmsis_os1.c中定义(为了满足向后兼容性),定义中最终调用的函数还是: osThreadNew(具体实现在库中)
这篇关于RTX RTOS 操作实例分析之---线程(thread)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!