OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5389|回复: 5

使用rtthread感觉很迷惑,求大神解决,指点

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-11-13
在线时间
1 小时
发表于 2016-11-13 22:02:30 | 显示全部楼层 |阅读模式
1金钱
一个关于rtthread的问题,typedef rt_err_t( ind)(rt_device_t,rt_size_t);这行代码如何理解,还有就是怎么才能用好rtthread

最佳答案

查看完整内容[请看2#楼]

这代码来自哪里? RT-Thread发布版中好像没搜到这样的代码。 [mw_shl_code=c,true]typedef rt_err_t( ind)(rt_device_t,rt_size_t);[/mw_shl_code] 应该是定义一个函数指针,ind 估计是 indicate 的缩写。 C语言中很常见的回调函数(callback)的写法. 只能说多读多写代码,然后实际多做项目了。 像上面这个属于基本C语言常识。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

1044

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3722
金钱
3722
注册时间
2011-5-23
在线时间
2013 小时
发表于 2016-11-13 22:02:31 | 显示全部楼层
这代码来自哪里? RT-Thread发布版中好像没搜到这样的代码。
[mw_shl_code=c,true]typedef rt_err_t( ind)(rt_device_t,rt_size_t);[/mw_shl_code]
应该是定义一个函数指针,ind 估计是 indicate 的缩写。
C语言中很常见的回调函数(callback)的写法.

还有就是怎么才能用好rtthread
只能说多读多写代码,然后实际多做项目了。
像上面这个属于基本C语言常识。
RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-11-13 22:41:08 | 显示全部楼层
帮顶
回复

使用道具 举报

11

主题

1044

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3722
金钱
3722
注册时间
2011-5-23
在线时间
2013 小时
发表于 2016-11-14 10:19:40 | 显示全部楼层
idle.c里面的示例。

idle.c[mw_shl_code=c,true]#ifdef RT_USING_HOOK
static void (*rt_thread_idle_hook)();

void rt_thread_idle_sethook(void (*hook)(void))
{
    rt_thread_idle_hook = hook;
}

static void rt_thread_idle_entry(void *parameter)
{
    while (1)
    {
        #ifdef RT_USING_HOOK
        if (rt_thread_idle_hook != RT_NULL)
            rt_thread_idle_hook();
        #endif
    }
}
#endif /* RT_USING_HOOK */
[/mw_shl_code]

用法
[mw_shl_code=c,true]static void idle_hook(void)
{
    __WFI(); /* CPU睡眠 */
}

void rt_hw_board_init()
{
        /* other initial.... */

        rt_thread_idle_sethook(idle_hook);
}[/mw_shl_code]
RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

11

主题

1044

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3722
金钱
3722
注册时间
2011-5-23
在线时间
2013 小时
发表于 2016-11-14 10:31:02 | 显示全部楼层
本帖最后由 aozima 于 2016-11-14 10:35 编辑

上面这写法要使用typedef 的话就是


idle.c[mw_shl_code=c,true]
typedef void(hook_fun)();

#ifdef RT_USING_HOOK
static hook_fun rt_thread_idle_hook;

void rt_thread_idle_sethook(hook_fun hook)
{
    rt_thread_idle_hook = hook;
}

static void rt_thread_idle_entry(void *parameter)
{
    while (1)
    {
        #ifdef RT_USING_HOOK
        if (rt_thread_idle_hook != RT_NULL)
            rt_thread_idle_hook();
        #endif
    }
}
#endif /* RT_USING_HOOK */
[/mw_shl_code]

这么写的好处就是
[mw_shl_code=c,true]typedef rt_err_t( ind)(rt_device_t,rt_size_t);[/mw_shl_code]
这样写之后,以后定义函数指针直接使用
[mw_shl_code=c,true]ind ind_fun1;[/mw_shl_code]

而可以不像下面这样写
[mw_shl_code=c,true]rt_err_t (*ind_fun1)(rt_device_t,rt_size_t)[/mw_shl_code]




RT-Thread RTOS 音频,WIFI,蓝牙
回复

使用道具 举报

1

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2015-5-28
在线时间
149 小时
发表于 2016-11-14 10:35:02 | 显示全部楼层
就是个rtos,跟ucos,freertos都是类似的操作系统~可以去学习ucos的知识,资料多
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-16 16:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表