RT-Thread Studio创建项目,基于芯片stm32f103c8t6

1.新建项目

在这里插入图片描述
在这里插入图片描述

2.main.c

将以下代码直接拷贝至main.c

/* 
 * 2019-09-09     RT-Thread   
 */

#include <rtthread.h>
#include <board.h>
#include <rtdevice.h>

#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>

/* PLEASE DEFINE the LED0 pin for your board, such as: PA5 */
#define LED0_PIN    GET_PIN(C, 13)



#define THREAD_PRIORITY         25
#define THREAD_STACK_SIZE       512
#define THREAD_TIMESLICE        5

static rt_thread_t tid1 = RT_NULL;

/* 线程1的入口函数 */
static void thread1_entry(void *parameter)
{
    rt_uint32_t count = 0;

    while (1)
    {
        /* 线程1采用低优先级运行,一直打印计数值 */
        rt_kprintf("thread1 count: %d\n", count ++);
        rt_thread_mdelay(500);
    }
}

ALIGN(RT_ALIGN_SIZE)
static char thread2_stack[1024];
static struct rt_thread thread2;
/* 线程2入口 */
static void thread2_entry(void *param)
{
    int count = 1;
       /* set LED0 pin mode to output */
       rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);

       while (count++)
       {
           /* set LED0 pin level to high or low */
           rt_pin_write(LED0_PIN, count % 2);
           LOG_D("Hello RT-Thread!");
           rt_thread_mdelay(100);
       }


//    rt_uint32_t count = 0;
//
//    /* 线程2拥有较高的优先级,以抢占线程1而获得执行 */
//    for (count = 0; count < 10 ; count++)
//    {
//        /* 线程2打印计数值 */
//        rt_kprintf("thread2 count: %d\n", count);
//        rt_thread_mdelay(500);
//    }
//    rt_kprintf("thread2 exit\n");
//    /* 线程2运行结束后也将自动被系统删除
//    (线程控制块和线程栈依然在idle线程中释放) */
}

/* 删除线程示例的初始化 */
int thread_sample(void)
{
    /* 创建线程1,名称是thread1,入口是thread1_entry*/
    tid1 = rt_thread_create("thread1",
                            thread1_entry, RT_NULL,
                            THREAD_STACK_SIZE,
                            THREAD_PRIORITY-1, THREAD_TIMESLICE);

    /* 如果获得线程控制块,启动这个线程 */
    if (tid1 != RT_NULL)
    {
        //启动线程
        rt_thread_startup(tid1);
    }

    /* 初始化线程2,名称是thread2,入口是thread2_entry */
    rt_thread_init(&thread2,
                   "thread2",
                   thread2_entry,
                   RT_NULL,
                   &thread2_stack[0],
                   sizeof(thread2_stack),
                   THREAD_PRIORITY - 1, THREAD_TIMESLICE);
    //启动线程
    rt_thread_startup(&thread2);

    return 0;
}


int main(void)
{
       thread_sample();
   
    return RT_EOK;
}


3.运行结果

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章