硬汉嵌入式论坛

 找回密码
 立即注册
查看: 6693|回复: 17
收起左侧

[AliOS] 吐槽GitHub上刚放出来的阿里AliOS物联网操作系统,顺便聊下原创一条龙的重要性

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
发表于 2017-10-21 00:18:17 | 显示全部楼层 |阅读模式
GitHub:https://github.com/alibaba/AliOS-Things
本帖仅代表个人观点,仅仅如同一个球迷看完一场足球或者篮球比赛的感受一样,并没有要黑那个球队或者球员的意思。AliOS刚开源发布,我们就泼冷水了,不太好,本文欲扬先抑。
前言:
    首先,我们强调一下原创的重要性,在这个软件资源满天飞的年代,保持原创还是有重大意义的。
    相信大家都被全几天阿里推的物联网系统AliOS兴奋到了,因为我们可以全套方案都用阿里的,毕竟阿里云已经搞了好些年了。针对这次阿里发布AliOS操作系统,我们表示热烈的庆祝,但是看了他们在GitHub放出的工程,却开心不起来,首先他们的RTOS好几处参考了uCOS的实现,这将是AliOS最大的槽点。作为物联网系统最重要的网络协议栈,他们没有做到原创,使用的是大家熟知的LwIP,而文件系统也是用的开源FatFS。如果是这样的话,怎么能自信的与ARM推出的mbed os进行PK,这差距稍大了些。
    在原创的道路上,即使是FreeRTOS,都没有放弃,推出了自己的网络协议栈FreeRTOS-TCP和文件系统FreeRTOS-FAT。而SEGGER的embOS及其中间件,uCOS-II和III及其中间件,RTX系统及其中间件(后期放弃了自己的GUI,采用了emWin),ThreadX及其中间全都做到了原创一条龙。我们的AliOS为什么就不能也做一个原创一条龙。这个又不像Android,iOS那种庞大的系统,完全可以自己的做的,只是稳定性和完善性需要不断的时间积累。不可否认,像SEGGER的embOS和Micrium的uCOS都在今年过完了25周年生日。AliOS要发展起来也需要几年的积累,希望他们早日实现自己的原创一条龙。
==============================
(一)AliOS的槽点,借鉴uCOS的地方有点多了,一两处还可以理解。
1. 底层移植几乎就是uCOS就的方案,有兴趣大家可以对比他们的底层汇编文件。而且底层的浮点寄存器处理有问题(M4内核移植),没有判断此任务是否使用了浮点寄存器,就统一所有的任务进行了浮点寄存器的入栈和出栈处理,这个处理欠妥了。
2. 临界段的处理方式基本是uCOS的方案。
3. 也做了一个统计任务,这个有点太明显了。现在的RTOS中,以RTX,FreeRTOS,embOS和uCOS为例,仅uCOS是这种方式。
4. 也像uCOS-III那样搞了一个滴答任务,处理方式也相似。
5. 任务列表的处理思路跟uCOS如出一辙。
6. 定时器组的实现也是相似的。
7. 更多“相似点”,就不再往外汇报了,大家有精力了可以自己读读。
说到借鉴,我这里再举一个FreeRTOS和uCOS-III事迹,uCOS-III是2008年推出的,好像是2010年在他们的官网才对外提供的下载,发布的时候,他们就提供了任务信号量,任务消息队列机制。而FreeRTOS的任务信号量,任务消息队列机制是2015年3月份的8.2.0版本才发布了这个功能,大家觉得FreeRTOS是否借鉴了uCOS-III的这种思想。ps:我们的AliOS在文件k_task_sem.c也搞了个。。。
(二)不完善的地方,由于是刚发布,这个都可以理解。
1. 源码缺少必要的注释,不求像uCOS-II或III那么专业,像FreeRTOS即可。因为很多时候,我们不需要了解这段代码的细节,只想知道他实现了什么。
2. 仅GCC的移植,无MDK和IAR,不过也可以照葫芦画瓢搞个。
3. 文档,当前的文档非常简陋,可以认为没有文档,希望他们以后的文档可以像FreeRTOS,RTX和uCOS看齐,离线版和在线版各一套,含用户手册和API手册,最重要的是每个API函数都有个举例,并且注明使用注意事项,这个应该是RTOS文档中最最重要的,不能让客户去猜这个函数怎么用,而且做了大量的测试才摸清这个函数的脾性。
4. 简单易上手在RTOS的推广中占有举足轻重的作用,希望他们在这块做的更好,也可以像华为的liteOS那样,先整到MDK里面再说。
(三)吐槽了这么多,AliOS还是有很多值得我们去学习的地方。
特别是上层应用,AT指令解析,CoAP,MQTT,WFS,FOTA,云端访问,网关等都是纯C编写的,而且开源的,值得称赞。
1.png
不过加密算法都是库,这个可以理解(其中mbedTLS是有源码的,这个可以在MDK软件包中获取)
2.png
=======================
总结,说了这么多,依然希望AliOS坚持做几年,争取做到原创一条龙,近期有精力,我也将推出AliOS的专题教程,先将内核跑起来,转接扩展到应用层。毕竟阿里的上层应用和云端还是值得去搞一搞的。
回复

使用道具 举报

17

主题

121

回帖

172

积分

初级会员

积分
172
发表于 2017-10-21 00:22:56 | 显示全部楼层
版主还没休息?真是值得敬重。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
 楼主| 发表于 2017-10-21 00:24:31 | 显示全部楼层

回 王小波 的帖子

王小波:版主还没休息?真是值得敬重。 (2017-10-21 00:22) 
刚编辑好帖子[s:130]
回复

使用道具 举报

6

主题

231

回帖

249

积分

高级会员

积分
249
发表于 2017-10-21 08:32:11 | 显示全部楼层
蛮拼搏的[s:151]
回复

使用道具 举报

29

主题

181

回帖

268

积分

高级会员

积分
268
发表于 2017-10-21 08:54:48 | 显示全部楼层
[s:151] [s:151]
回复

使用道具 举报

3

主题

54

回帖

63

积分

初级会员

积分
63
发表于 2017-10-21 21:40:13 | 显示全部楼层
看了下。。里面有些RTOS的信号量是用庆科的MiCO系统。搞不懂了。。这叫AliOS?
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2017-10-23 09:34:37 | 显示全部楼层
不错, 分析的挺多的.  感觉阿里可能在应用上有创新,  内核方面的应该都差不多了,稳定性是要靠时间打磨的
回复

使用道具 举报

36

主题

2039

回帖

2147

积分

至尊会员

积分
2147
发表于 2017-10-24 01:31:19 | 显示全部楼层
[s:151]  [s:151]
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.
回复

使用道具 举报

6

主题

65

回帖

83

积分

初级会员

积分
83
发表于 2017-10-27 21:48:23 | 显示全部楼层
好贴,分析到位,看出作者满满的诚意。
回复

使用道具 举报

0

主题

2

回帖

0

积分

新手上路

积分
0
发表于 2017-10-31 10:08:07 | 显示全部楼层
如果要讲原创一条龙,据我所知,国内只有djyos符合要求。感兴趣的可以了解下。
回复

使用道具 举报

0

主题

2

回帖

0

积分

新手上路

积分
0
发表于 2017-10-31 10:10:10 | 显示全部楼层
与其说alios是操作系统,说是自带内核的物联网解决方案更贴切些。
回复

使用道具 举报

2

主题

19

回帖

64

积分

初级会员

积分
64
发表于 2017-11-7 09:17:17 | 显示全部楼层
虽然看不懂,看起来很厉害的样子
回复

使用道具 举报

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2017-11-7 20:04:52 | 显示全部楼层
Alios支持smp多核,还有很多创新,阅读内核源码就知道了。
回复

使用道具 举报

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2017-11-7 20:17:41 | 显示全部楼层
最深切的感受是很容易上手
回复

使用道具 举报

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2017-12-6 22:15:59 | 显示全部楼层
可以看到Github上的AliOS kernel已经有更新:
1 新版本的内核已经看不到滴答任务,滴答任务除了耗费任务的栈外并没有任何优势。
2 任务链表等的处理方式并没有和ucos有任何相似的地方,如果有仔细阅读源码。
3 统计是开了一个任务,但是处理方式和ucos完全不同。
4 ucos的定时器组的实现思路有问题,实现不了真正的dyntick。
5 临界区的处理无非是开关中断处理,除了这之外还能如何处理?
6 移植这块的思路无非是任务切换以及中断切换,浮点数的问题可以看到已经在这版新的基础上修正问题了。ucos的浮点数移植也是全压的也并没看到有什么判断。
7 任务信号量的思想既然freertos也有为啥AliOS不能有,而且实现的简洁程度远超ucos。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106771
QQ
 楼主| 发表于 2017-12-6 22:25:31 | 显示全部楼层

回 jorya_txj 的帖子

jorya_txj:可以看到Github上的AliOS kernel已经有更新:
1 新版本的内核已经看不到滴答任务,滴答任务除了耗费任务的栈外并没有任何优势。
2 任务链表等的处理方式并没有和ucos有任何相似的地方,如果有仔细阅读源码。
3 统计是开了一个任务,但是处理方式和ucos完全不同。
4 ucos的定时器组 .. (2017-12-06 22:15) 
4 ucos的定时器组的实现思路有问题,实现不了真正的dyntick。
6 移植这块的思路无非是任务切换以及中断切换,浮点数的问题可以看到已经在这版新的基础上修正问题了。ucos的浮点数移植也是全压的也并没看到有什么判断。
回复:你看的版本太低了额,估计已经是2年前的了,要看新版。

其它的5点没有什么讨论的价值了。希望你们可以越做越好[s:142]
回复

使用道具 举报

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2017-12-10 22:21:34 | 显示全部楼层
AliOS更新太快了,建议把每次更新的新特点写出来,方便学习应用推广。
回复

使用道具 举报

56

主题

904

回帖

1072

积分

至尊会员

积分
1072
发表于 2018-4-20 21:32:16 | 显示全部楼层
ucos好似所有的浮点都没有判断。 之前有人移植用了判断,测试一直没问题。后来移植到F7没搞定,只好换官方的IAR改过去就是所有都入栈了。


以下是M4  ucos3.01版本的,不需要全部入栈。

CPU_STK  *OSTaskStkInit (OS_TASK_PTR    p_task,
                         void          *p_arg,
                         CPU_STK       *p_stk_base,
                         CPU_STK       *p_stk_limit,
                         CPU_STK_SIZE   stk_size,
                         OS_OPT         opt)
{
    CPU_STK  *p_stk;


    (void)opt;                                              /* Prevent compiler warning                               */

    p_stk = &p_stk_base[stk_size];                      /* Load stack pointer                                     */
                                                                /* Align the stack to 8-bytes.                            */
    p_stk = (CPU_STK *)((CPU_STK)(p_stk) & 0xFFFFFFF8);               

               
                                                            /* Registers stacked as if auto-saved on exception        */
    *--p_stk = (CPU_STK)0x01000000u;                        /* xPSR                                                   */
    *--p_stk = (CPU_STK)p_task;                             /* Entry Point                                            */
    *--p_stk = (CPU_STK)OS_TaskReturn;                      /* R14 (LR)                                               */
    *--p_stk = (CPU_STK)0x12121212u;                        /* R12                                                    */
    *--p_stk = (CPU_STK)0x03030303u;                        /* R3                                                     */
    *--p_stk = (CPU_STK)0x02020202u;                        /* R2                                                     */
    *--p_stk = (CPU_STK)p_stk_limit;                        /* R1                                                     */
    *--p_stk = (CPU_STK)p_arg;                              /* R0 : argument                                          */

               
                                                            /* Remaining registers saved on process stack             */
    *--p_stk = (CPU_STK)0x11111111u;                        /* R11                                                    */
    *--p_stk = (CPU_STK)0x10101010u;                        /* R10                                                    */
    *--p_stk = (CPU_STK)0x09090909u;                        /* R9                                                     */
    *--p_stk = (CPU_STK)0x08080808u;                        /* R8                                                     */
    *--p_stk = (CPU_STK)0x07070707u;                        /* R7                                                     */
    *--p_stk = (CPU_STK)0x06060606u;                        /* R6                                                     */
    *--p_stk = (CPU_STK)0x05050505u;                        /* R5                                                     */
    *--p_stk = (CPU_STK)0x04040404u;                        /* R4                                                     */

    //============ FPU register=====================
                #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
                *--p_stk = (CPU_STK)0xFFFFFFFDUL;                        /*  (1)这句话最重要,这里是将 EXC_RETURN也进行了入栈处理。   */
                #endif
               
                return (p_stk);
}






    ;=====================================================================
    ;           USE FPU register..  version 2
    ;=====================================================================                
        TST      LR, #0x10                                                               ; (1)
        IT       EQ
        VSTMDBEQ R0!, {S16-S31}  
     
        MOV      R3, LR                                                                   ;(2)
        STMDB    R0!,{R3-R11}   
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 18:46 , Processed in 0.311465 second(s), 34 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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