打印
[LOOK]

LOOK—RTOS中没有钩子函数?

[复制链接]
9650|40
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
刘前辈|  楼主 | 2011-6-29 09:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
来自 2楼
lxyppc| | 2011-7-7 18:02 | 只看该作者
看来刘前辈把C++给神化了。Linus就说他不会C++,但是这世界上会C++的恐怕没几个能比Linus更有优越感

会玩C++的人属于高层工作,例如研究生层次,他们喜欢看《编程之美》或者《优雅人生》,《黑客与画家》,《编程……修炼之道》这类书,玩单片机的有几个研究生?喜欢看这类书?
刘前辈 发表于 2011-7-7 13:26

照这样的逻辑,那会玩Java的就是属于博士生的层次了。因为Java比C++隐藏得更彻底,更高层。用VB的属于博士后了。
你说的这类书讲的更多的是一种思想,而不是某种语言。正如《Design Patten》里的例子是用Java写的,但这并不妨碍"低级别"的C++程序员阅读它。并将众多的模式用C++来实现。而这些思想完全可以运用在C语言中。
语言只是一种工具,无所谓高级与低级,其后包含的思想才是关键,思想的高度才是决定因素。

9#喜欢看什么书?
刘前辈 发表于 2011-7-7 13:26

我看得最多的书是金庸的武侠小说。那里面对知识产权的保护很到位。但现实中就不行了,这也正是现在搞技术不吃香的原因。

例如数码相机,我是用户,是你软件成果的享用者。我难道要知道数码相机软件是怎么做的?里面有RAM和固态硬盘?
刘前辈 发表于 2011-7-7 13:26

这个你不用知道,但是你要知道快门在哪儿,电池怎么换。用操作系统也是如此,你要知道不同的系统钩子如何装。

使用特权

评论回复
来自 3楼
john_lee| | 2011-7-7 21:18 | 只看该作者
LOOK的设计,首要原则是效率和扩展性,然后是程序的易用性。基于我当前的认知水平,C++这三方面都胜过了C。所以我选择了C++作为开发语言,同样基于效率的考虑,也要求基于LOOK的应用程序也必须使用C++编写。

继承基类、覆盖虚函数是基于LOOK应用程序设计的基石,在应用程序中,必须继承、覆盖虚函数的地方很多:定时器,中断处理,调度器扩展等等。

而“钩子”函数的模式,在C++中也可以由覆盖虚函数来实现,而且更加高效和优雅。所以LOOK在设计时就没有考虑实现“钩子”函数。

俗话说:二十四拜都拜过了,也不差这一哆嗦了。(在LOOK应用程序中,既然都已经使用了继承、覆盖。也就不差“钩子”函数这一哆嗦了)

使用特权

评论回复
地板
john_lee| | 2011-6-29 10:46 | 只看该作者
本帖最后由 john_lee 于 2011-6-29 10:52 编辑

所谓的“钩子(hook)”,在C中是很常用的。但钩子有个缺点:但在没有钩子函数的时候,还是需要调用一个空函数,效率不高(回调函数也类似,需要判断回调函数指针是否为空)。

在LOOK中,并不使用钩子函数,而使用C++中常用的继承(inheritance)和覆盖(overriding)机制。在派生类中覆盖基类的虚函数,在覆盖的函数中实现类似钩子函数的逻辑,并根据需要调用被覆盖的基类函数。

例如,systick设置为10ms周期中断:
 class mysystick_t : public systick_t {    // 继承systick_t
public:
    inline mysystick_t()                 // 构造函数
    : systick_t(计数器重装值, 中断优先级)
    {
    }
protected:
    bool isr(int vector);               // 覆盖isr()
};

bool mysystick_t::isr(int vector)
{
    // TODO: 你需要实现的10ms/次的代码逻辑
    return systick_t::isr(vector);        // 调用原isr()
}

使用特权

评论回复
5
刘前辈|  楼主 | 2011-6-29 11:04 | 只看该作者
基本明白了。谢谢。

使用特权

评论回复
6
hotpower| | 2011-6-29 11:08 | 只看该作者
老师有空在和大家讲讲look和其他rtos有什么区别和优势和不足。

使用特权

评论回复
7
刘前辈|  楼主 | 2011-7-3 19:23 | 只看该作者
2楼老师讲的恐怕一般用户看不懂。
把这么复杂的问题留给用户?

有几个人有HOTpower 的水平?

使用特权

评论回复
8
lxyppc| | 2011-7-4 10:58 | 只看该作者
呵呵,刘前辈言重了。
这种用法在C++中根本就不是什么问题,就像在C中用Hook一样自然

使用特权

评论回复
9
刘前辈|  楼主 | 2011-7-4 13:22 | 只看该作者
呵呵,C写的RTOS 函数钩子是给用户的一个接口,仅需要用户写一条语句,类似汇编语言
ACALL  user( )。甚至仅需要在一个宏中填写用户函数,这样用户函数就可以在每个系统节拍中得到运行。——根本不需要用户懂C/ASM ;用户也根本不知道这个钩子是怎么做出来的、用什么语言做出来的,或者以何种方式原理如何得到运行的。

6楼说得“不是什么问题”的用法、机制,还要求用户自己用C++来玩什么继承、覆盖、派生基类虚函数?——用户如果懂这些,早就不在这玩单片机了。

所以,一个RTOS交给平台(上面)用户的,应该仅仅是一个使用接口,根本不要求用户会玩C++,或者还需要用户自己来编写系统服务函数。也不可能要求每个使用LOOK的用户都会用C++来填写类似C语言RTOS钩子函数。——那是软件专家的工作,是平台下面的工作。

、、

使用特权

评论回复
10
lxyppc| | 2011-7-4 14:04 | 只看该作者
6楼说得“不是什么问题”的用法、机制,还要求用户自己用C++来玩什么继承、覆盖、派生基类虚函数?——用户如果懂这些,早就不在这玩单片机了
刘前辈 发表于 2011-7-4 13:22

用户如果不用C++来玩什么继承、覆盖、派生基类虚函数,就干脆别用啥C++,直接用C得了

使用特权

评论回复
11
lxyppc| | 2011-7-4 14:19 | 只看该作者
所以,一个RTOS交给平台(上面)用户的,应该仅仅是一个使用接口,根本不要求用户会玩C++,或者还需要用户自己来编写系统服务函数。也不可能要求每个使用LOOK的用户都会用C++来填写类似C语言RTOS钩子函数。——那是软件专家的工作,是平台下面的工作。
刘前辈 发表于 2011-7-4 13:22

既然用了C++写的RTOS,就要遵守C++的原则,至少要会用C++。
而且,会C++和软件专家没有联系,C++的精通与否 和 是否玩单片机没有必然联系。

使用特权

评论回复
12
hotpower| | 2011-7-5 08:35 | 只看该作者
钩子和回调都是系统调用。即系统认为可以在某处为用户提供的普遍常用的服务即调用。
用户可以覆盖这个函数或安装函数指针。
否则系统执行空调用或默认服务。

总之系统提供了才有。

使用特权

评论回复
13
刘前辈|  楼主 | 2011-7-7 13:26 | 只看该作者
本帖最后由 刘前辈 于 2011-7-7 13:36 编辑
9#
既然用了C++写的RTOS,就要遵守C++的原则,至少要会用C++。
而且,会C++和软件专家没有联系,C++的精通与否 和 是否玩单片机没有必然联系。


那你学C++为了干啥?做软件的谁都知道,越高层的软件,越隐藏下层的东西。——你用word 的时候,需要你会编程吗?你知道你正在使用的软件(word 之类)是用什么语言写的? 你会写吗?

会玩C++的人属于高层工作,例如研究生层次,他们喜欢看《编程之美》或者《优雅人生》,《黑客与画家》,《编程……修炼之道》这类书,玩单片机的有几个研究生?喜欢看这类书?
9#喜欢看什么书?

10#Hot说的对:“系统为用户提供的普遍常用的服务即(钩子)调用。”所以,LOOK是系统,是为用户做服务函数以供用户调用的。不是让用户自己来为自己写服务函数的。——我是用户,是消费者,不是生产者。
     例如数码相机,我是用户,是你软件成果的享用者。我难道要知道数码相机软件是怎么做的?里面有RAM和固态硬盘?

     编程工作的人,应该自有优越感,美国只有1%不到的人从事编程高级工作。中国恐怕0.01%(万分之一)都不到。——所以,像我这样从事单片机控制已经达到顶尖级工作的人,根本入不了万分之一的编程层次的门。
     我要是会C++ ,早就不在这玩单片机了。—— 一点优越感,美感都没有。

    同事损我说:在美国,玩单片机的找不到饭碗。(LOOK要求玩单片机的会使用C++。)     我的意思是:我若到了美国,仅凭我会C++就能找到饭碗啦;单片机控制仅仅是业余爱好,像玩航模风筝一样。

、、

使用特权

评论回复
14
hotpower| | 2011-7-7 17:31 | 只看该作者
是的,钩子必须由系统提供。
如同单片机的中断服务程序,在裸奔时,用户直接编写。
但是假若被rtos等封装,那么它必须为用户提供安装或卸载回调函数的接口程序。
或回调函数指针。
钩子函数雷同,也需要rtos等系统提供。
用c的人估计习惯于钩子函数,我想未来
look也可考虑将来任务类封装起来。
可在构造函数和任务例程中给出回调即钩子。
这样人就不太畏惧look了,我这么想不知对否?

使用特权

评论回复
15
刘前辈|  楼主 | 2011-7-7 20:00 | 只看该作者
本帖最后由 刘前辈 于 2011-7-7 20:13 编辑
13#
这个你不用知道,但是你要知道快门在哪儿,电池怎么换。用操作系统也是如此,你要知道不同的系统钩子如何装


举个例子,C51写的RTOS根本不用安装,但是它就有钩子函数的位置。——这年头谁能比别人简约一分,谁就是赢者。

前几天刚帮别人解决了一个问题:由于任务太多,他的键盘任务不能20ms 及时响应;——把键盘任务作为钩子函数就行了。只用了半天时间。很得意。

    很简约的解决方法。如果还需要什么安装,您要花多少时间来写说明书?——我要花时间看说明书?何时能解决问题?半天时间?——如果一个数码相机的使用说明书需要学习3天,恐怕卖不出去了。我是在柜台上就会用的。

 创造即连接,创造的每一小点为我们连接出更广大的世界,这世界要靠我们自己去走,却不妨看看这些领袖的GUIDE BOOK,我对于技术创新深深敬仰,更崇敬这些为大众解除技术屏障,能寥寥数语教导新知的可爱人们。

   我相信晦涩绝不是技术的形容词,而技术是扫除我们脑子里自由障碍的三板斧。
  “程序是写出来给人看的,附带能在机器上运行。”



、、

使用特权

评论回复
16
lxyppc| | 2011-7-7 22:09 | 只看该作者

很简约的解决方法。如果还需要什么安装,您要花多少时间来写说明书?——我要花时间看说明书?何时能解决问题?半天时间?——如果一个数码相机的使用说明书需要学习3天,恐怕卖不出去了。我是在柜台上就会用的。
刘前辈 发表于 2011-7-7 20:00

不同的相机针对不同的人群,因为各自需求不同。所以我认为专业人士会花三天或更多时间学习专业的相机使用方式和摄影知识。
这里的LOOK系统,因其是由C++编写的,因此会使用C++是运用这个系统基本要求。像继承与重载,这是C++的基本内容。就像天黑要开闪光灯,拍星星要加长曝光时间这些用相机的基本常识一样。



   我相信晦涩绝不是技术的形容词,而技术是扫除我们脑子里自由障碍的三板斧。
  “程序是写出来给人看的,附带能在机器上运行。”

刘前辈 发表于 2011-7-7 20:00

晦涩不是技术的形容词,拒绝新事物更不是技术的口头禅。
这里还得再说一次,LOOK是由C++编写,你不能因为其使用了C++的语言特性而就此否定它的便利性。新事物需要学习和尝试,而不是拒绝。如果认为C++的学习带来了额外的负担,那完全可以选择一个不是由C++编写的系统。
“程序是写出来给程序员看的,附带能在机器上运行。”

使用特权

评论回复
17
hotpower| | 2011-7-7 23:02 | 只看该作者
本帖最后由 hotpower 于 2011-7-7 23:03 编辑
LOOK的设计,首要原则是效率和扩展性,然后是程序的易用性。基于我当前的认知水平,C++这三方面都胜过了C。所以我选择了C++作为开发语言,同样基于效率的考虑,也要求基于LOOK的应用程序也必须使用C++编写。

继承基 ...
john_lee 发表于 2011-7-7 21:18


我认为确实没加钩子函数的必要,开始我也是用C的RTOS的思维去想的。
例如应该有个初始化任务,这个任务里应该创建其他任务。

但是学习了LOOK后,感觉确实没必要。
LOOK每个任务主要由两个函数组成:
1.任务的构造函数,它可以负责对该任务的初始化工作。
2.任务的例程,它就是其他RTOS的任务函数,在编译时就静态安装了,故没必要再创建任务。

使用特权

评论回复
18
murex| | 2011-7-7 23:02 | 只看该作者
刘前辈和lxyppc继续PK,俺们在旁边学习

使用特权

评论回复
19
hotpower| | 2011-7-8 08:06 | 只看该作者
rtos的实时并非事件立即响应,而是响应时间间隔的固定。

使用特权

评论回复
20
原野之狼| | 2011-7-8 15:20 | 只看该作者
搬个凳子围观高手论道~

使用特权

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

本版积分规则

个人签名:做自己所热爱的,并热爱自己所做的。

24

主题

1038

帖子

4

粉丝