木子剑
生命不熄,学习不止!

在完成【  Embedded_Studio + Mark3 RTOS + STM32F10X移植初测   】的前提下,在STM32板子上可以玩玩例程,试着了解一下Mark3,

也加入了一点个人的想法,最终测试mian.cpp如下:

/*===========================================================================
Copyright (c) 2012 - 2019 m0slevin, all rights reserved.
See license.txt for more information
===========================================================================*/
#include "mark3.h"
using namespace Mark3;   // 可见OS内核命名空间


extern "C" {
void __cxa_pure_virtual(void) {}
void DebugPrint(const char* szString_);
}


namespace  // 类的命名空间,名字可以不写
{
  Thread clAppThread;                                // 任务创建一个线程对象
  Thread clIdleThread;
K_WORD awAppStack[PORT_KERNEL_DEFAULT_STACK_SIZE];
// 为每个线程分配堆栈,默认值 K_WORD awIdleStack[PORT_KERNEL_DEFAULT_STACK_SIZE]; //void AppMain(void* unused_); // 每个线程定义入口函数申明 //void IdleMain(void* unused_); //void Thread_start(void* unused_); // 线程初始后,加入调度器,简化main函数 //--------------------------------------------------------------------------- void AppMain(void* unused_) // AppMain入口函数定义 { while (1) { Thread::Sleep(1000); } } //--------------------------------------------------------------------------- void IdleMain(void* unused_) // IdleMain入口函数定义 { while (1); // 空闲任务,一搬是些低功耗操作 } } // anonymous namespace //--------------------------------------------------------------------------- void Thread_start(void) // 线程初始后,加入调度器 { clAppThread.Init( awAppStack, // 指向堆栈的指针 sizeof(awAppStack), // 堆栈的大小 1, // 线程优先级 AppMain, // 入口函数 nullptr ); // 入口函数参数 clIdleThread.Init(awIdleStack, sizeof(awIdleStack), 0, IdleMain, 0); clAppThread.Start(); // 将线程添加到调度程序 clIdleThread.Start(); } //--------------------------------------------------------------------------- int main(void) { Kernel::Init(); // 内核初始化 Thread_start(); // 线程初始后,加入调度器 Kernel::Start(); // 将系统控制权交给内核 return 0; }

大概流程: 用户先实现对应的线程,然后初始化内核,压入用户线程,开启内核调度器。

---- END ----

posted on 2022-02-16 09:00  木子剑  阅读(76)  评论(0编辑  收藏  举报