[STM32F1]

FreeRTOS不用死循环可以吗?

[复制链接]
2303|9
手机看帖
扫描二维码
随时随地手机跟帖
Developerliu|  楼主 | 2017-11-16 12:08 | 显示全部楼层 |阅读模式
最近用一个wifi芯片(ESP8266),看了别人的程序,用了FreeRTOS系统。对这个系统不熟,只是了解吧。看的这个程序没有while(1)这样的死循环,只有一个定时器,请问是不是开了定时器,不用while(1),程序也不会结束。
Developerliu|  楼主 | 2017-11-16 12:09 | 显示全部楼层
#include "ets_sys.h"
#include "osapi.h"

#include "user_interface.h"

#include "user_devicefind.h"
#include "user_webserver.h"

#include "gpio16.h"
#include "gpio.h"

#include "c_types.h"

#if ESP_PLATFORM
#include "user_esp_platform.h"
#endif

/** 定时器结构体 */
static os_timer_t os_timer;

/** LED操作命令 */
void Led_Cmd( bool status )
{
    if ( status == true )
    {
        gpio16_output_set( 0 );
    }
    else
    {
        gpio16_output_set( 1 );
    }
}

/** LED任务运行程序 */
void Led_Task_Run( void )
{
    static bool status = false;

    if ( status == true )
    {
        status = false;
    }
    else
    {
        status = true;
    }
    Led_Cmd( status );
}

/** LED模块初始化程序 */
void Led_Init( void )
{
    gpio16_output_conf();
    Led_Cmd( false );

    /** 关闭该定时器 */
    os_timer_disarm( &os_timer );
    /** 配置该定时器回调函数 */
    os_timer_setfn( &os_timer, (ETSTimerFunc *) ( Led_Task_Run ), NULL );
    /** 启动该定时器 */
    os_timer_arm( &os_timer, 500, true );
}

/** 初始化程序 */
void user_init(void)
{
    Led_Init();
}
user_init(相当于main)

使用特权

评论回复
戈卫东| | 2017-11-16 12:19 | 显示全部楼层
这个只是用了定时器回调函数。
定时器回调函数不可以是无限循环。

使用特权

评论回复
mmuuss586| | 2017-11-16 12:33 | 显示全部楼层
任务就是个循环;

使用特权

评论回复
Developerliu|  楼主 | 2017-11-16 12:59 | 显示全部楼层
戈卫东 发表于 2017-11-16 12:19
这个只是用了定时器回调函数。
定时器回调函数不可以是无限循环。

这样的话,执行一遍就结束了吗?

使用特权

评论回复
Developerliu|  楼主 | 2017-11-16 13:00 | 显示全部楼层
mmuuss586 发表于 2017-11-16 12:33
任务就是个循环;

有点不是很明白,能不能说的更具体一点

使用特权

评论回复
kingkits| | 2017-11-16 13:40 | 显示全部楼层
总会有个地方需要while(1) 这样的循环的

使用特权

评论回复
Developerliu|  楼主 | 2017-11-16 14:24 | 显示全部楼层
kingkits 发表于 2017-11-16 13:40
总会有个地方需要while(1) 这样的循环的

这样说就明白了,谢谢

使用特权

评论回复
戈卫东| | 2017-11-16 16:11 | 显示全部楼层
Developerliu 发表于 2017-11-16 12:59
这样的话,执行一遍就结束了吗?

定时器回调函数是OS提供的工具,会根据你指定的时间间隔重复调用。
如果它是无限循环将会破坏系统的运行。

使用特权

评论回复
Ryze| | 2017-11-21 17:42 | 显示全部楼层
定时器回调函数不可以是无限循环

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

97

帖子

0

粉丝