111111111111111

/*
 * RT-Thread Application
 */

#include <time.h>

#include "rtthread.h"

//-------------------------------------------------------------------------------------------------
// BSP
//-------------------------------------------------------------------------------------------------

#include "bsp.h"
#include "ls1b_gpio.h"
//-------------------------------------------------------------------------------------------------
// Simple demo of task
//-------------------------------------------------------------------------------------------------



#define LED1 54
#define LED2 55
#define LED3 2
#define LED4 3

#define ON  0
#define OFF 1


//LED初始化
 void LED_IO_Config(void)
 {
  
    gpio_enable(LED1,DIR_OUT);
    gpio_enable(LED2,DIR_OUT);
    gpio_enable(LED3,DIR_OUT);
    gpio_enable(LED4,DIR_OUT);
 }


//LED控制
 void LED_Waterfall1(void)
 {
    gpio_write(LED1,ON);
    gpio_write(LED2,OFF);
    rt_thread_delay(500);

    gpio_write(LED1,OFF);
    gpio_write(LED2,ON);
    rt_thread_delay(500);

 }
//LED控制
 void LED_Waterfall2(void)
 {

    gpio_write(LED3,ON);
    gpio_write(LED4,OFF);
    rt_thread_delay(200);

    gpio_write(LED3,OFF);
    gpio_write(LED4,ON);
    rt_thread_delay(200);
 }



static rt_thread_t m_demo_thread = NULL;
static rt_thread_t m_demo_thread2 = NULL;

static void demo_thread(void *arg)
{
	unsigned int tickcount;

    for ( ; ; )
    {
        LED_Waterfall1();
        rt_thread_delay(500);
    }
}

static void demo_thread2(void *arg)
{
	unsigned int tickcount;

    for ( ; ; )
    {
        LED_Waterfall2();
        rt_thread_delay(500);
    }
}

//-------------------------------------------------------------------------------------------------

int main(int argc, char** argv)
{
	rt_kprintf("\r\nWelcome to RT-Thread.\r\n\r\n");
LED_IO_Config();
	/*
     * Task initializing...
     */
    m_demo_thread = rt_thread_create("demothread",
                                      demo_thread,
                                      NULL,         // arg
                                      1024*4,       // statck size
                                      11,           // priority
                                      10);          // slice ticks

    if (m_demo_thread == NULL)
    {
    	rt_kprintf("create demo thread fail!\r\n");
	}
	else
    {
    	rt_thread_startup(m_demo_thread);
    }

    m_demo_thread2 = rt_thread_create("demothread2",
                                      demo_thread2,
                                      NULL,         // arg
                                      1024*4,       // statck size
                                      11,           // priority
                                      10);          // slice ticks

    if (m_demo_thread2 == NULL)
    {
    	rt_kprintf("create demo thread fail!\r\n");
	}
	else
    {
    	rt_thread_startup(m_demo_thread2);
    }


	/*
	 * Finsh as another thread...
	 */

    return 0;
}

 

这段代码是一个嵌入式系统中使用 RT-Thread 操作系统的示例代码,看起来是在配置两个线程,并分别运行 demo_thread 和 demo_thread2 函数。下面是对代码的详细解释:

1.static rt_thread_t m_demo_thread = NULL; 和 static rt_thread_t m_demo_thread2 = NULL;:


2.定义了两个线程句柄,m_demo_thread 和 m_demo_thread2,并初始化为 NULL。


3.static void demo_thread(void *arg) 和 static void demo_thread2(void *arg):


4.这两个函数是线程的入口函数。demo_thread 中执行 LED_Waterfall1() 函数,而 demo_thread2 中执行 LED_Waterfall2() 函数。
5.每个线程都在一个无限循环中运行,每次循环都调用相应的 LED 控制函数,并通过 rt_thread_delay(500) 函数让线程延迟 500 个时钟节拍。


6.int main(int argc, char** argv):


7.main 函数是程序的入口点。
8.rt_kprintf("\r\nWelcome to RT-Thread.\r\n\r\n"); 用于在终端输出欢迎信息。
9.LED_IO_Config(); 调用了一个 LED IO 配置的函数,可能是初始化 LED 控制的硬件设置。


10.创建和启动线程:


11.使用 rt_thread_create 函数创建两个线程,分别是 demothread 和 demothread2。
12.每个线程的配置包括线程名字、入口函数、传递给入口函数的参数(在这里是 NULL)、栈大小、优先级和时间片大小。
13.在创建线程后,通过判断线程句柄是否为 NULL 来检查线程是否创建成功,如果成功则调用 rt_thread_startup 函数启动线程。


14.return 0;:


15.main 函数返回 0,这是标准的 C 语言程序退出方式。

总体来说,这段代码通过 RT-Thread 操作系统创建了两个线程,每个线程执行一个 LED 控制函数,实现了 LED 灯的瀑布效果。这样的设计可以使 LED 的控制与其他任务并发执行,提高系统的响应性。在嵌入式系统中,使用多线程可以更充分地利用处理器的性能,同时处理多个任务。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值