搜索
bottom↓
回复: 145

应邀去华南理工大学演讲两场,这是讲稿(以及PPT)

  [复制链接]

出0入0汤圆

发表于 2010-6-3 21:53:13 | 显示全部楼层 |阅读模式
点击此处下载 ourdev_559384.rar(文件大小:1.72M) (原文件名:华南理工演讲PPT.rar)


1.        都江堰操作系统项目介绍
同学们好,非常感谢同学们在紧张的学习生活中抽出时间,来和我一起,分享我们的都江堰操作系统(简称DJYOS)。DJYOS是我主持的一个开源项目,从概念酝酿到现在,已经6年是,头5年是我一个人闭门开发,于2009年年初发布。这6年间,共设计了一个操作系统和一本400多页的配套的书,书和代码都在都江堰操作系统的主页提供下载。与windows、linux、Android等名门贵族不一样,DJYOS是一个草根工程师开发的草根操作系统,也首先在草根民间传播、发展。我们期待着,DJYOS从草根长成参天大树。
DJYOS源于2004年的一个灵感一现,但决定实现这个灵感,是一个艰难的选择,在知识不受尊重的社会,在金钱至上的社会,在理想迷失的社会,在浮躁的IT届,低下头来,花5~十年时间,放弃许多许多的东西,做一件前途未卜的事情,这个决心,真的很难下,这几年来,我的家庭和我自己,都付出了很大的代价,我非常非常非常的感谢我妻子的理解和支持。
DJYOS的定位和目标:
1.        DJYOS 是一个嵌入式操作系统,没有考虑在PC/服务器上与windows、linux、unix竞争。
2.        在嵌入式领域,DJYOS 既要进入非实时操作系统领域;又要涉足实时操作系统领域。
3.        DJYOS的目标,是改变中国没有有影响力的操作系统局面,在不久的将来,世界上流行的操作系统中,有一个来自中国。
DJYOS的应用范围将涵盖从单片机到高性能的移动计算设备,涵盖实时应用和通用计算。DJYOS将有三个分支:
djysi分支:这是面向单片机的分支,特点是全部应用程序代码和操作系统编译在一个可执行文件中,不能动态加载。
djydlsp分支:这是面向复杂实时嵌入式系统的分支,使用单一寻址空间,但支持动态加载应用程序模块。用在资源比较丰富的嵌入式系统上,实现复杂的实时控制系统。
djymp分支:mp分支支持多进程,这是面向通用嵌入式计算分支,适合与移动计算,比如手机、pda等。
为什么命名为都江堰:
可能有人会问,作者来自深圳,为什么要取名都江堰,为啥不命名为长江长城黄山黄河?
都江堰是2000多年前全世界唯一留存的大型水利工程,欲走向世界的、来自中国的操作系统,取一个来自中国的世界性工程为名字,岂不顺理成章?
都江堰水利工程可靠稳定,无坝引水,都江堰工程作为一个舞台,让水成为演员、导演,演绎了成都平原千年富饶的大戏,这正是DJYOS的设计理念,我愿效法先人,让稳定可靠的DJYOS,作为程序员的舞台,演绎出灿烂多彩的嵌入式产品世界。
操作系统是信息产业的发动机
回想当年,建国之初,我们前辈们花了很大力气找矿找石油炼钢铁,为什么?因为这是工业发展的发动机,没有这两个东西,我们工业化发展就会受制于人。当时中国是一个落后的农业国,要崛起,要强大,就必须发展工业。
6、7十年代,我们在那么艰苦的条件下,硬是把导_弹、原子_弹、卫星造出来了,为什么?因为那是国防安全的基石,我们那段时间受够了美帝和苏帝的核讹诈,没有它们,国家_安全就得不到保障,国家建设也无从谈起。
今天,信息技术已经深入各行各业,下到农民种大米,上到卫星空间站,无所不在,信息技术日益成为国家竞争力的核心,信息产业的发动机是什么?是CPU和操作系统,没有它们,我们的信息技术就会永远被别人牵着鼻子走。
今天,我们要讨论的,就是操作系统,我们要打造一流的操作系统,让这个操作系统在产业环境中扮演重要角色,使我们不再受制于人。
我希望:
若干年后,当你买手机等个人信息产品时,当你在考虑是买iPhone还是买Android抑或是windows mobile时,能够多一个选项:DJYOS。
当你设计嵌入式设备时,你在考虑选择VxWorks还是nucleus或者是qnx的时候,能够多一个选项:DJYOS。
当你设计单片机系统,你在考虑选用ucosii还是rtx或者freertos的时候,同样能够多一个选项:DJYOS。
如此,我的辛苦就没有白费了。
振兴信息产业,匹夫有责,我等草根工程师亦不能外!
为什么只做嵌入式
也许有人会问,既然DJYOS的志向如此远大,为啥要限制在嵌入式呢?
我认为,PC正在没落,嵌入式方兴未艾,DJYOS将迎接初升的太阳,送别夕阳西下。
逆水行舟,不进则退,这句话可以用在PC和嵌入式的比较上:PC未见进步,但嵌入式却在大踏步前进,日益进逼传统PC的地盘。以前基本上只能在PC上使用的QQ、网络游戏、上网、收发邮件等功能,日益朝手机转移。
PC的程序员也在分流,不少程序员已经或者正在转向iPhone,Android,OMS等嵌入式应用程序开发。
在嵌入式系统的低端,单片机的性能日益提升,设备网络化、智能化趋势的推动下,操作系统的应用也日益普及。
2.        生于有效创新,死于盲目仿制
学习→仿制→消化→超越,这向来是后来者跟踪并超越先进的捷径,然而,这种方法在操作系统(PC或嵌入式)上却行不通,为什么呢?
ucosii的作者Labrosse先生在其书中说“写个实时内核那么难吗?不就是不断地保存、恢复CPU的那些寄存器嘛” 。这句话并不全面,而且误导了不少人,他们引而伸之地认为:“写个操作系统那么难吗?不就是实现线程和进程管理、通信等API函数嘛” 。
按Labrosse先生的话写出来的操作系统,不叫“写”,只能叫仿制,“写”这个字包含的是创作的意思。你拿一个现成的产品,找着样子做一个,你把圆的按钮改成方的,盒子上印的蝴蝶改成蜜蜂,这叫创新吗。操作系统也一样,你用类似的底层算法,实现一套与现有操作系统功能大同小异的API函数,即使每一行代码都是你自己写的,也叫仿制。目前世界上五花八门的操作系统,我估计不下几百种,但我所知道的操作系统,核心部分都差不多,主要是功能的多少,实现的细节有些不同。虽然API函数的函数名不一样,但功能却大同小异,比如创建一个线程,在ucosii中叫做OSTaskCreate,在Vxworks中的名字是taskspawn,。不外乎就是线程的创建、删除、销毁、启动、休眠,信号量、互斥量、邮箱、消息服务等功能。
所以,Labrosse先生的话应该改为“仿制个实时内核那么难吗?不就是不断地保存、恢复CPU的那些寄存器嘛” 。引而伸之地可以说,“仿制一个操作系统那么难吗?不就是实现线程和进程管理、通信等API函数嘛” 。然而,仿制只能仿一个外形,并不能复制他们在市场上的成功,操作系统业界多年没有成功的新苗冒出来了,也是这个原因。
为什么说仿制必败呢?不可否定,新编写的操作系统,在前人的基础上,可能可以写出更精巧的上下文切换函数、更高效的API函数、更低的资源消耗、更快的中断响应。在网上,如果你仔细留意,就会发现经常有新的操作系统冒出来,列出其上下文切换速度、中断响应速度,占用资源多少多少云云,证明其性能如何出色。但是,一个操作系统的质量并不完全由这些因素构成,数十年、海量用户的使用和反馈为基础的稳定性和可靠性,以及用户长期积累的信心才是根本。
(PPT)这是个简化的软件项目研发过程图,一个软件从概念到完成,需要无数次的反馈,方案和代码要经过无数次的修改,最终发布到用户手中的,只是总工作量的一小部分,花了5年时间设计,才初具雏形,时间就是花在这里。而仿制的操作系统,调度策略、API设计都是享用现成的操作系统策略,只完成“代码编写”部分的工作。即使发布以后,还要通过用户长期使用过程中不断收集用户的需求、软件缺陷,并加以修改完善,由于操作系统的特殊性,用户长期的验证尤为重要。只要不是直接抄袭,仿制者就不可能完全复制这些长期积累的经验,以及长期验证所获得的可靠性和稳定性。
新操作系统在某些方面指标出色,也许你的算法确实比人家高明,但更可能的是,有些情况你可能没有考虑到,偷工减料了。比如有些数据合法性检查,人家考虑了10种出错的情况,你没有经验,只考虑到5种情况,那当然你的要快些了。如果一个新出的操作系统,只是实现现有操作系统类似的功能,谁愿意用你来开发产品呢?你到哪里捕捉你的第一只螃蟹?即使有了第一只,那第二只、第三只呢?
所以说,如果没有根本性的创新,仿制一个操作系统是死路一条,还不如找一个现成的操作系统改改,添加点新特性,这也是linux为基础的操作系统风行不休的原因。即使以谷歌的实力,也只是在Linux基础上开发Adroid,而不是新仿制一个操作系统。中移动更绝,直接站在google的肩膀上做OMS。
仿制必败,并不意味着创新必胜,创新只是必要条件而非充分条件,只有能为用户创造价值,才是充分条件。我们来看看linux和windows的恩怨,linux的创新不可谓不多,但普通电脑用户仍然愿意掏钱买windows,而不愿意使用linux。不要归咎于盗版,人家宁可冒险用盗版的windows也不用免费的linux,本身就说明问题,况且,在严厉打击盗版的西方,linux和windows的格局也是一样的。所以说,linux的创新,对于市场和普通用户来说,是无效的创新。也可以说linux是件艺术品,只是linux艺术家手中的瑰宝,老百姓嘛,远观可矣。然而,这些创新使得linux专家们倍加推崇linux,明明是艺术品,却想当作日常用品推广之,专家的意见使许多项目盲目选择linux,把企业置于巨大的技术风险中,成就了大量高薪的linux工程师,企业却在消耗了大量研发经费和时间后,离成功仍然遥遥无期。这就是linux从业者众但市场占有率低的根本原因,前车之鉴,DJYOS需要防止重蹈覆辙。
DJYOS不做艺术品,要做日用品,要走入市场,走入平常百姓家,DJYOS的目标,是要形成一个产业。DJYOS的创新,从来不是为了创新而创新,它的每一个创新都是为了给用户创造价值,解决普通用户的实际问题。
DJYOS是一个全新的操作系统,它在操作系统的几个重要方面:调度器、中断管理、设备管理、资源管理等方面,都又非常突出的创新。由于DJYOS在构成操作系统的多数主要方面都跟现有操作系统有着巨大的不同,因此很难参考现有系统的设计,反而为了在创新的同时尽可能照顾现有习惯而不得不有所顾忌。别人写操作系统,可能会尽可能地突出自己的特点,DJYOS恰恰相反,是尽可能地减少创新。我们略举几例说明DJYOS的创新是如何解决用户的实际问题的。
(1)        以事件为核心的调度方式,改变了过去操作系统要求程序员模拟计算机的思维方式的编程模式,使之可以按人类的思维方式编写应用程序;它使程序员可以摆脱线程和进程的束缚,DJYOS没有跟线程相关的API。特别是在嵌入式领域的程序员,有许多是行业背景很深的专家,但往往缺乏计算机操作系统方面的知识,他们在DJYOS下编程,则可以无须学习晦涩难懂的线程知识。它使得程序员可以在单片机上实现事件触发式编程,而过去只能在windows、linux等环境下才能实现。
(2)        在中断管理方面,传统操作系统极少有对中断做有效的管理,大多数只是把开中断、关中断等操作用标准的函数包装起来,再给中断服务程序(ISR)做一个外壳。在传统操作系统中,中断是“调皮捣蛋鬼”,面对中断显得不知所措,处处设防,动辄关中断,以防捣蛋鬼破坏核心数据,对ISR程序也作出种种限制,文档比较完备的操作系统,会有长长的一个列表,列出不能在ISR中使用的功能。特别是,他们所有中断一视同仁,只要是中断,就当作紧急任务处理,这使得像键盘中断这些紧急程度非常低的任务,也按紧急任务处理,而真正的紧急任务则被无辜地、傻傻地等待键盘处理完成。DJYOS则对中断进行了科学的管理,它把中断划分为“异步信号”和“实时中断”,异步信号的响应速度低于传统操作系统下的中断,但编写ISR时更加从容,有更多的系统服务可以使用,甚至可以完全不编写ISR,纯粹用事件实现中断的功能;实时中断则永远不会因操作系统运行而被禁止,实时中断则获得更高的响应速度,这种架构,理论上,DJYOS的实时中断的响应速度,比我所知道的所有OS都快。我们知道,实时系统中,实时性要求很高的任务,多数是用中断实现的。DJYOS比别的操作系统都快的中断响应速度,等同于其实时性高于其他操作系统。
(3)        众多周知,目前CPU正往多核化发展,嵌入式CPU甚至DSP也是如此,比如ADI公司的blackfin561就是一颗只有几十KB内存的双核DSP。嵌入式操作系统支持多核cpu是必然的发展方向,DJYOS的调度算法是以事件为核心的,应用程序只管为事件编制处理程序,而线程和CPU核则被当做处理事件必须的资源,由操作系统分配给事件,这种算法天生使多核编程更加简单,多核利用率更高。DJYOS有计划移植到blackfin561上,有望成为第一个在只有几十KB内存的CPU上实现对双核的完美支持的RTOS。
(4)        创新的加载方式,在CPU启动后数十uS以内,应用程序的关键部分就可以实现对目标系统的控制,在操作系统加载过程中,就可以响应应用程序的中断ISR。软件界有句名言,叫“缺陷是永恒的”,任何系统都要考虑软件崩溃重启的问题,对有些不能容许短暂失控的系统来说,是不容许在操作系统“漫长”的加载和启动过程中失去响应的。DJYOS的加载方式,使得系统在加载过程中依然能对一些紧急情况作出反应。举例……
(5)        …………还有许多特性,时间关系,就不一一罗列了。
3.        DJYOS事件调度系统
3.1.        传统操作系统的线程调度
传统的操作系统,是以线程为调度目标的,无论是简单的ucosii,还是复杂的windows、linux,无论是单进程还是多进程的系统,调度器所调度的,都是线程。调度器的作用,简单地说,就是决定哪个线程、什么时候占有CPU、什么时候让出 CPU,如何决定由哪个线程占有CPU的方法很多,不同的操作系统都有自己的策略,这里暂且不提。
传统操作系统提供了大量的用于创建、控制、删除、销毁线程的API函数,程序员用这些API控制线程运行。
3.2.        都江堰操作系统的事件调度
计算机处理的是现实世界中的具体任务,有因才有果,现实生活中的任务不会无缘无故地产生,人们做某一件事肯定是因为发生了某种事件使其需要去做这件事情,这就是事件。计算机中的事件与现实生活中的事件是一致的,CPU不会无缘无故地执行某一段代码,就算是一段包含在一个if语句里的代码被执行,肯定是因为发生了使该条件成立的事件。人走到沙发前是一个事件,智能沙发上的计算机发现这个事件后然后处理这个事件,处理结果是执行调整坐垫到合适位置的操作;人转身面对电视机是一个事件,智能电视机里的计算机发现这个事件然后处理这个事件,处理结果是执行打开电视机的操作;人躺在床上并闭上眼睛,智能家居的计算机发现这个事件然后处理这个事件,处理的结果是执行关灯的操作。以上所述的事件,就是DJYOS操作系统中“事件”的原型。所有这些原型中,都有一个“发现”(或称“检测”)事件和执行一定操作以处理事件的过程,现实系统中,这两个过程可能非常复杂,甚至处于两个不同的学科,其软件实现模块可能会由两个不同专业方向的程序员编写。DJYOS软件模型是:由一个软件模块专门用于监测人的行为,另外一些模块执行开关灯、开关电视机、调整沙发坐垫的操作。检测模块发现人靠近沙发的事件后,不是去调整沙发坐垫,而是把“事件”报告给操作系统了事。操作系统收到该事件后,把该事件记录在调度队列中,根据调度算法,决定要处理该事件时,就分配或创建用于处理该类型事件的线程,并启动线程,再由这个线程去执行调整沙发坐垫的操作。这样,就使“检测”和“执行”相互独立开来。进程、线程之类的东西只是操作系统内部的秘密,线程作为一个资源,是创建新资源还是使用现有资源来处理事件,完全由操作系统自动完成,应用程序的程序员不知道也不需要关心这些。
DJYOS的调度是以事件为目标的,也就是说,调度器直接决定哪条事件应该被处理,在内核中,只有事件队列,没有线程队列。DJYOS提供的API,也全部是针对事件的,没有针对线程的。
3.3.        线程调度不符合面向对象编程思想
先抽象一下,看看用几种不同的方法解决同一个问题,假设一个软件使用了三个模块,三个模块分别是不同的团队开发,model1、model2、model3分别是三个模块的入口函数,如下:
void model1(parameter list)
{
    //函数体
}
void model2(parameter list)
{
    //函数体
}
void model3(parameter list)
{
    //函数体
}
当在裸奔环境下编程时,用户会这样安排程序结构:
int main(void)
{
    while(1)
    {
        model1(parameter list);
        model2(parameter list);
        model3(parameter list);
    }
}
如果在OS下编程实现相同的功能,最典型的编程方法如下:
void thread1(parameter list)
{
    while(1)
    {
        model1(parameter list);
    }
}
void thread2(parameter list)
{
    while(1)
    {
        model2(parameter list);
    }
}
void thread3(parameter list)
{
    while(1)
    {
        model3(parameter list);
    }
}
void os_init(void)
{
    //初始化代码
    create_thread(...thread1);  //创建第一个线程
    create_thread(...thread2);  //创建第二个线程
    create_thread(...thread3);  //创建第二个线程
    start_os();
}
也可以这样编程:
void thread1(parameter list)
{
    while(1)
    {
        model1(parameter list);
        model2(parameter list);
    }
}
void thread2(parameter list)
{
    while(1)
    {
        model3(parameter list);
    }
}
void os_init(void)
{
    //初始化代码
    create_thread(...thread1);  //创建第一个线程
    create_thread(...thread2);  //创建第二个线程
    start_os();
}
还可以这样编程:
void thread1(parameter list)
{
    while(1)
    {
        model1(parameter list);
    }
}
void thread2(parameter list)
{
    while(1)
    {
        model2(parameter list);
        model3(parameter list);
    }
}
void os_init(void)
{
    //初始化代码
    create_thread(...thread1);  //创建第一个线程
    create_thread(...thread2);  //创建第二个线程
    start_os();
}
从上面我们看到,裸奔编程时,是依次调用model1~3三个函数,而在OS下编程时,则在线程中调用这三个函数,以model1为例,可以用独立的线程调用该函数,也可以在一个线程中依次调用model1和model2两个函数。编写model1~3的人,并不知道这三个模块是裸奔的形式在main函数中调用的,还是在OS中用线程的方式调用的。也就是说,编写model1~3三个模块的人,他们只关心模块本身的逻辑,使用编程语言实现该逻辑。是否在线程中调用该三个函数,是软件组织者需要决定的。
在座的同学们,都应该学过面向对象的编程思想吧,上述例子中,从宏观上思考,可以抽象出两类对象。
        一类是模块对象,这是模块程序员所面对的,他们要用编程语言实现模块的功能。
        另一类是系统对象,即如何组织系统中的各模块使之流畅地运行,是由软件组织者面对的。
很显然,是在main函数中依次调用三个模块呢?还是为系统选用一个OS,在线程中调用这些模块,即使已经确定了使用OS,模块和线程依然有多种组合方式。所有这些,应该是系统对象内部的实现过程,从面向对象角度,模块程序员不应该为此操心的。
线程只是使模块对象能够获得CPU处理时间的手段之一,程序员学习、关注和操作线程,仅仅是因为唯有这样才能够驱使计算机处理事件。从面向对象角度,创建线程、线程调度、线程休眠、线程销毁等操作,均是系统对象的内部实现过程,系统对象的外部接口只有一个:模块对象在适当的时候被CPU运行。应用程序程序员只需要知道这个外部接口即可,不应该去操作系统对象的内部过程和数据:线程。
而传统的OS下编程,线程的创建、启动、暂停、休眠、销毁、同步等操作,都是由程序员控制的,实际上是犯了面向对象编程的大忌:在模块对象中操作系统对象的数据和过程。这是典型的面向过程编程。
即使你用C++写程序,你写出来的程序,也只是微观上面向对象,宏观上面向过程的。
如果以上说的还比较抽象的话,我们再举一个直观的例子。
老张需要换一部电话,想让秘书下午2点去买,可以去专卖店买,也可以去超市买,那他怎么给秘书安排工作呢?老张面对的是“要买电话机”这个对象,秘书面对的是“如何去买电话机”这个对象,去超市买或者去专卖店买,是这个对象内部的事情,相当于前面所说的在main中调用函数,还是在线程中调用函数的区别,跟老张是没有关系的。但按照线程调度的思路的话,秘书的工作安排就应该这样写:
下午两点,去超市,或者写:下午两点,去专卖店。
如果按照DJYOS的事件调度思路,就应该写:下午两点,买电话机。

3.4.        事件调度可以减少应用程序bugs
先讲一个成语故事,宋朝的一位丁氏,家里没有井,要到很远的地方去担水,便请人到他家钻井,钻井以后,省事了很多,他告诉别人说:“我钻一口井就像多了一个人。” 有听说的又传给别人说:“丁氏钻井啊,得到一个人。”就这样传啊传,就传成了“丁氏从井里钻出了一个人”,还传到县衙去了,县官便派人向丁氏询问这件事。丁氏对询问的人说:“是一口井使我减少了一个人的工作量,并非从井中挖出一个人 ”。
这说明什么?信息在传递的过程中,是会产生错误的,即使是原样传递!如果在传递的过程中还要转换,比如翻译成别的语言,更加容易出错。程序员面对的是事件,按事件编程是最直接的,而按线程编程,程序员编程时,则需要把处理事件的过程,转换为线程运行过程,比直接按事件编程,信息就多转换了一次,自然产生bug的可能性也增加了。
我们再来比较一下用C编程和用汇编编程的差别。
C编程:工作量少,错误少,可读性高。
汇编编程:工作量大,错误多,可读性低。
为什么这样呢?因为C比较比较直观,比较接近人类语言,接近人类的思维方式,而汇编则接近计算机执行方式,相当于按计算机的执行过程来思考。
同样的道理,程序是解决现实问题的,人类在思考问题解决方案的时候,使用的是人类的自然思维,编程过程越接近人类的自然思维,出错的可能性就自然会少一些。人类自然思维一般是这样的:发生什么事件,就处理什么事件,哪个事件紧急些,就先处理,如果条件不具备,就等一等。事件是程序员直接面对的、需要计算机解决的对象,按事件编程,直观性搞,而线程,则是在OS环境下计算机多道程序执行过程的抽象,按线程和按事件编程的差别,类似于汇编和C的差别,事件接近人的思维,而线程接近计算机执行方式。
就像前面老张买电话机的例子,如果按照线程思路,老张一不小心,“去专卖店”就会被写成“去大排档”,而写“买电话机”的话,就不容易写成“买糖醋排骨”,为啥?因为老张能看到自己座位上没有电话机,也不用管哪里有电话机卖。越是直观,出错的概率就越低,这是永恒不变的道理。
人们在选择嵌入式操作系统时,总是在考虑操作系统本身的可靠性,通过xxx认证什么的。殊不知,产品中的缺陷,多数是跟应用程序有关的:
1、应用程序和操作系统磨合不好,或者没有正确使用操作系统,这跟操作系统本身的友好性、易用性有关,linux本身安全,但开发出来的产品缺陷很多,就是这个造成的。
2、应用程序本身的问题,操作系统有责任引导程序员编写无错的代码,在API设计上,不是功能越多越好的,DJYOS在这方面做了充分的考虑。
操作系统再赖,经过无数次用户使用反馈后,都会比一般的应用程序缺陷少一些的。
3.5.        传统OS下,事件触发编程是奢侈品
前面讲到,按事件编程能是编程变得更直观易学,软件更少缺陷,这是一个很大的需求,有什么样的需求就会有什么样的产品,在可视化编程工具支持下,我们可以实现事件触发式编程。大家用过VC吧,往桌面上放置一个按钮,程序要处理鼠标点击按钮的事件,我们只需要编写按钮点击事件的处理函数,当点击事件发生后,该函数就自动执行。
敲破寒冰,冰面的海水深不见底,我们穿上潜水服,看看VC是怎样实现的。原来,应用程序启动时,由VC自动加入的代码创建了一个或多个线程一直在后台候着,等待操作系统弹出鼠标点击事件。操作系统则负责检测并弹出事件,潜伏的线程一旦收到鼠标点击事件,便被唤醒执行。我们可以看到,无论该按钮是否被点击,甚至一辈子都不点击,该线程依然要占用系统资源。很明显地,是开发工具在操作系统的线程调度外面,包了一层外壳,把应用程序对事件的操作,转换成操作系统能理解的线程操作。
可是,可视化编程工具是在PC上首先出现的工具,在嵌入式编程中能不能使用呢?我们知道,wince、嵌入式linux等大型操作系统下是可以实现的,但什么样的平台才适合运行wince、嵌入式linux这些操作系统呢?单片机可以吗?过去,不可以,事件触发式编程只能在高速、大内存的环境中才可以实现,是不折不扣的奢侈品!今天,我要告诉大家一个好消息,有了DJYOS,事件触发式编程就从奢侈品变成日用品了,单片机上就可以实现。
有句名言叫“只选贵的,不选对的”,但贵的奢侈品不一定就好,传统OS上,奢侈的可视化开发工具,并不能涵盖所以需求。windows下开发过串口通信软件的同学应该知道,如果你希望开发高质量的串口通信程序,VC的控件就用不上了,就必须创建独立的线程用于串口收发,这时候,VC等工具是无能为力的,你只能自己调用windows的线程相关API函数,这就要学习windows下的多线程编程知识。
还有,传统的事件触发式编程,开发工具要生成一些代码,来监视事件的发生、分发事件、激活线程,把事件操作转换成线程操作,最后才调用操作系统提供的线程API,执行用户编写的处理函数,这一系列复杂的过程,无论是时间还是空间的开销都很大,导致代码的效率低下,这在高速大内存的PC上还可以容忍,如果在单片机上,是不可接受的。
3.6.        DJYOS下,事件触发编程是日用品
传统操作系统,需要在VC之类的工具支持下,才能够做事件触发式编程,究其原因,是因为操作系统是按照线程调度的,必须经过开发工具的包装后,才能转换成事件触发。我们可以看到,人们需要计算机处理的是客观世界的具体任务,我们把它抽象成事件,程序员关注的也是事件,并没有任何人需要关注线程,用线程编程,是被迫的,因为操作系统只提供了线程API。为什么操作系统不能直接以事件为核心进行调度呢?回答这个问题,DJYOS应运而生!
DJYOS直接以事件为调度目标,虽然操作系统内部是用线程来调用程序员提供的事件处理函数的,但是,DJYOS在选中应该被处理的事件后,是直接切换到事件相关联的线程,中间并无转换操作,故效率很高。DJYOS提供的API都是针对事件的,没有任何线程相关的API,无论用户使用什么开发工具,都可以,而且只能是事件触发式编程。
现代计算机已经进入“ubiquitous/Pervasive Computing”时代,即普适计算。触手可及的计算产品里面也包含着触手可及的计算机程序,这些程序由大量的嵌入式程序员编写。设计这些产品需要大量的软件工程师,这使得嵌入式程序员的队伍迅速增大,新增的程序员,可能来自各行各业,他们原来在各自的行业中,可能都是非常了不起的专家,比如化工专家、医疗专家等。这些不同领域的专家,却未必是计算机领域的专家,让他们去掌握晦涩难懂的线程技术并灵活应用,恐怕要花费不少的人才培养成本,而使用传统的操作系统开发嵌入式产品,不理解这些复杂的概念根本就寸步难行。DJYOS操作系统不要求程序员操纵线程和进程,程序员只需把需要计算机处理的任务划分为一个个事件类型,并为各种不同类型的事件编写独立的事件处理函数,并且把它登记到系统中就可以了。当事件发生时,发现(检测到)该事件的模块只要告诉操作系统“某类型事件发生了”,不需要管劳什子的线程。从这个角度,DJYOS降低了程序员培训要求,客观地为企业节约了人力资源费用。
再回头看看VC下的编程过程和DJYOS编程的对应关系:
放置一个按钮——登记事件类型
编写鼠标点击处理函数——编写事件处理函数
不同的是,传统OS要通过VC等工具转换为线程操作,才能为操作系统接受,而DJYOS则直接就是按照事件调度的,可以用普通文本编辑器完成。
4.        发展优势
4.1.        系统整合
目前,PC正日渐式微,而嵌入式的移动计算正风起云涌。就嵌入式操作系统来说,主要分三大类。
4.1.1.        微小型系统
单片机系统为代表,单片机上用操作系统由来已久,目前呈快速增长趋势。由于32位单片机成本下降,设备联网化、智能化的趋势,使单片机应用复杂程度迅速增加,使得单片机系统对操作系统的需求大大增加,单片机系统的软件特点:
1、        一般由一个人或者少数几个几个人密切联系的小团队开发。
2、        代码规模比较小,研发成员间可以密切交流,软件可以整体合在一起进行编译和链接,甚至连OS也在一起编译。
3、        硬件上资源很紧张,一般只有几十K的内存、几百K的flash。
4、        实时性要求高,对图形界面的需求不高,或者不需要图形界面。
5、        典型代表是ucosii。
4.1.2.        复杂实时系统
这种系统一般有一颗或者多个比较强劲的CPU,实现复杂的实时控制功能,由于强调实时性,在特定的环境中运行,使得其与通用的移动计算系统有很大的差别。
以VxWorks为代表,授权费用非常昂贵,因为这些系统的应用范围很小,而厂家也只有收取昂贵授权费才能生存。
复杂实时系统的特点:
1、        有比较大的开发团队,并且可能分成多个小团队,这些小团队甚至可能分布在不同的地域,团队间充分沟通和协调已经比较困难。
2、        系统中只运行特定的程序,一般不允许运行外来的程序,因此无需应对外来的恶意攻击,一般不要求多进程。
3、        实时性要求高,对图形界面的需求高于微小型系统。
4、        由于团队的分散,项目经理往往要求操作系统提供动态加载能力,使得团队间能够独立开发、独立编译各自负责的模块。
5、        典型代表有VxWorks,nucleus等。
4.1.3.        通用移动计算系统
高性能移动终端,最具代表性的是智能手机,即使一些非智能手机,里面也未必没有操作系统。这类系统的特点是:
1、        要运行外部程序,必须要求操作系统实现多进程管理。
2、        对人机界面的用户体验要求极高。
3、        既对cpu的运算能力要求很高,又有严格的低功耗要求。
4、        软件的实时性要求不高,但逻辑可能非常复杂。
5、        典型代表是wince、嵌入式linux等。
4.1.4.        现状:三类系统泾渭分明
这三类系统,操作系统的特性、开发工具、开发方法,都是完全不一样的。从业者掌握的技能几乎完全不通用,掌握了其中一类的研发技术后,要想研发另一类产品,几乎要从头学起。这限制了人才的流动,客观地也提高了企业的人才招聘和培养的成本。再者,有些企业可能同时有三类产品,但其应用程序的代码却完全不能复用,即使相同的功能,也要重复开发。
4.1.5.        DJYOS涵盖三类系统
DJYOS从设计之初,就同时考虑到了微小型系统、复杂实时系统、高性能移动计算三种应用场合。在三种应用中使用DJYOS,使用相同或相似的开发工具,API设计也相同,也就是说,你只要会使用DJYOS开发单片机的应用程序,就会用DJYOS开发手机!这样带来的好处却巨大的。
1、        IT产品之争,很大程度是人才之争,三者兼容,会用DJYOS做单片机可发者,就会用DJYOS做手机应用,使得DJYOS的研发人才倍增,使企业人才招聘和培养的成本大大下降,这个优势是目前所有操作系统都不具备的。
2、        代码资源将大大丰富,三类系统用同一个操作系统,使得其代码可以相互通用。对于有些复合型企业来说,他们可能三类系统都在使用,这使得他们不同部门的人才可以相互流动、而且代码也可以相互通用,解决问题的经验通用,其节省的成本是非常可观的。比如,有些企业可能同时使用ucosii、VxWorks、wince,用于企业内不同的产品,这些产品可能都有以太网通信功能,那么,他们就必须为3个操作系统分别编写以太网通信程序,单独维护三份代码,工作量就要*3.,而DJYOS呢,由于其涵盖了三类系统,所以,如果该企业使用DJYOS的话,就只需要编写和维护一份以太网通信程序。
4.2.        从单片机出发
在软件领域,创新的另一个拦路虎是惯性,作为创新的操作系统,你将很难做到与现有应用程序的兼容,你将立即面对行业惯性的压力,这种惯性来自于用户以及工程师的使用习惯和应用程序的兼容程度。如果在桌面系统上,这个压力尤其显著,移动设备次之,工业产品却几乎不受这个惯性影响。诚如我在《都江堰操作系统与嵌入式系统设计》一书中指出,开发高可靠的产品,对使用外来代码会非常谨慎,而且,由于这些产品的特异性大,甚至很多是定制产品,直接可用的公共代码资源很少,即使有,也不是应用程序的形式提供,而是源代码或者库函数的方式提供。再者,高可靠性工业控制产品中,一般只运行一个程序,而这个程序的绝大多数代码,都是产品研发组自己开发的,对运行外来应用程序的需求几乎没有。所以,在工业领域,操作系统只要把常用的中间件如网络模块、gui模块做好了,就基本满足用户需求了。这就给了后起之秀一个机会,只要你的产品好,工程师认同,你就有机会。
一个新生的操作系统,直接去撞击高端应用,无异于找死。
在高端市场里,对工具链的完整方便性要求很高,对中间件和应用软件资源要求很高,而新生的操作系统在这方面是不占优势的,即使有非常方便的工具,学习推广也需要周期。
在低端市场,培育用户群,提高知名度,验证可靠性和可用性,然后逐步向高端渗透,将能起到事半功倍的效果。这方面,我们正面临前所未有的契机,我们知道,操作系统有惯性,企业现有代码的继承和OS的使用习惯,是非常顽固的。如果一个企业,原来使用VxWorks开发产品,那他们就会有大量的历史代码,是基于VxWorks的,换新的操作系统,就会面临移植大量历史代码的压力,这是巨大的历史包袱。但单片机应用于特定的专业控制,随着单片机系统的日益复杂化,以及硬件能力的迅速发展,大量的单片机软件,正从裸机转向RTOS。这里面有大量是新兴的需求,许多企业是第一次使用过操作系统,没有历史包袱,正是新生事物渗透的好机会。
4.3.        形成完整的开发平台
目前我所做的工作,只能算一个“引子”,DJYOS应该建立一个稳定的、强有力的团队进行开发,实现一个完备的图形界面、协议栈、文件系统、可视化开发环境等,它应该包括:
1、        图形化、可视化的开发环境。
2、        编译和调试系统。
3、        硬件仿真调试器。
4、        应用程序资源库。

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入0汤圆

发表于 2010-6-3 21:56:44 | 显示全部楼层
牛人!支持你!

出0入0汤圆

发表于 2010-6-3 21:59:20 | 显示全部楼层
支持一下!

出0入46汤圆

发表于 2010-6-3 22:03:47 | 显示全部楼层
顶!

出0入0汤圆

发表于 2010-6-3 22:06:01 | 显示全部楼层
顶,怎么也是中国的OS

出0入0汤圆

发表于 2010-6-3 22:20:07 | 显示全部楼层
支持!!!

出0入0汤圆

发表于 2010-6-3 22:29:07 | 显示全部楼层
那天本来想去听,结果大暴雨。。加上电信宿舍在北区甚远,遗憾。

出0入0汤圆

发表于 2010-6-3 22:31:16 | 显示全部楼层
强烈支持DJYOS!
就为DJYOS的真正的创新精神喝彩!
面向事件的编程思想很独特!COOL!

出0入0汤圆

发表于 2010-6-3 22:49:53 | 显示全部楼层
顶!

出0入0汤圆

发表于 2010-6-3 23:00:58 | 显示全部楼层
有演讲录像吗

出0入0汤圆

发表于 2010-6-3 23:08:27 | 显示全部楼层
华工主动联系你的么?强人!

出0入8汤圆

发表于 2010-6-3 23:09:11 | 显示全部楼层
jihao

出0入0汤圆

发表于 2010-6-3 23:31:06 | 显示全部楼层
頂禮膜拜。

出0入0汤圆

发表于 2010-6-3 23:45:45 | 显示全部楼层
什么时候来啊?我去捧场啊。

出0入0汤圆

发表于 2010-6-3 23:48:07 | 显示全部楼层
回复【13楼】firegl99 智豪
-----------------------------------------------------------------------

貌似是上周5的34号楼 机器人协会弄的/

出0入0汤圆

发表于 2010-6-3 23:52:23 | 显示全部楼层
录像不完全,2个文件,共3G,不知怎么传。。。

出0入0汤圆

发表于 2010-6-3 23:59:29 | 显示全部楼层
不错,支持!!

出0入0汤圆

发表于 2010-6-4 00:01:31 | 显示全部楼层
牛 支持····

出0入0汤圆

发表于 2010-6-4 00:27:24 | 显示全部楼层
好牛啊!希望我过去的时候也能听听你的讲座

出0入0汤圆

发表于 2010-6-4 07:21:56 | 显示全部楼层
最初不太理解楼主:在知识不受尊重的社会,在金钱至上的社会,在理想迷失的社会,在浮躁的IT届,低下头来,花5~十年时间,放弃许多许多的东西,做这事。
   现在,非常佩服楼主的毅力和恒心!!!

出0入0汤圆

发表于 2010-6-4 07:39:52 | 显示全部楼层
回复【19楼】guopingsh
  最初不太理解楼主:在知识不受尊重的社会,在金钱至上的社会,在理想迷失的社会,在浮躁的it届,低下头来,花5~十年时间,放弃许多许多的东西,做这事。
   现在,非常佩服楼主的毅力和恒心!!!
-----------------------------------------------------------------------

同样佩服

出0入0汤圆

发表于 2010-6-7 12:53:06 | 显示全部楼层
mark

出110入12汤圆

发表于 2010-6-8 08:56:40 | 显示全部楼层
PF!支持!!!

出0入0汤圆

发表于 2010-6-8 09:15:53 | 显示全部楼层
精神可嘉!

出0入0汤圆

发表于 2010-6-24 16:12:10 | 显示全部楼层
详看了你的DJYOS,技术上的创新我不清晰,因为我不是技术出身,但是你做的是一个全新的市场中出来的东西,应该会有大好前途!

希望有一天我能在你的系统上开发嵌入式应用程序!

也希望有一天一个高中生经过简单的逻辑培训就能用你的DJY开发好用的应用程序!

希望你的系统做好安全性工作,这样才能走的长远!

好运!

出0入0汤圆

发表于 2010-6-24 16:30:17 | 显示全部楼层
哎。。。。。。。

出0入0汤圆

发表于 2010-6-24 16:36:18 | 显示全部楼层
支持支持

出0入0汤圆

发表于 2010-6-25 16:14:29 | 显示全部楼层
支持

出0入0汤圆

发表于 2010-7-5 09:34:16 | 显示全部楼层
有机会在我的项目中试试
有个现象不知大家注意到没有,大部分情况我们只有几个任务的要求,所以把基本要求做好即可

出0入0汤圆

发表于 2010-7-5 10:12:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-5 10:46:03 | 显示全部楼层
希望对此有详细的说明,

出0入0汤圆

发表于 2010-7-5 10:47:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-9 10:35:42 | 显示全部楼层
想想自己......

出0入0汤圆

发表于 2010-7-9 15:20:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-9 16:45:48 | 显示全部楼层
没去可惜啊,不知道李继平师兄讲得如何了。希望DJY系统越做越好~

出0入27汤圆

发表于 2010-7-9 17:12:30 | 显示全部楼层
支持!!!!

出0入0汤圆

发表于 2010-7-9 18:51:27 | 显示全部楼层
收藏学习了!顶起!

出0入0汤圆

发表于 2010-7-22 17:30:26 | 显示全部楼层
这ppt做得不错

不过,有一点疑问,有这么多精力写这么好的ppt,是否有更多精力写好djyos?

出0入0汤圆

发表于 2010-7-22 17:47:46 | 显示全部楼层
强,支持

出0入0汤圆

发表于 2010-7-22 23:22:10 | 显示全部楼层
记下 谢谢

出0入0汤圆

发表于 2010-7-23 00:08:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-23 05:25:18 | 显示全部楼层
看了一下开源协议,允许修改但不允许发布修改这条很疑惑.....
我觉得可以参考一下QT的开源协议...

出0入0汤圆

发表于 2010-7-23 09:51:56 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-5 23:05:40 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-9-19 12:08:03 | 显示全部楼层
衷心希望楼主的系统能占有市场。

出0入0汤圆

发表于 2010-9-19 12:46:03 | 显示全部楼层
不错

出0入0汤圆

发表于 2010-9-19 13:02:32 | 显示全部楼层
顶!!!!!!!!!!!!!!

出0入0汤圆

发表于 2010-9-19 14:21:01 | 显示全部楼层
mark!

出0入0汤圆

发表于 2010-9-24 11:52:02 | 显示全部楼层
支持楼主,支持DJYOS!

出0入0汤圆

发表于 2010-9-28 03:36:07 | 显示全部楼层
回复【50楼】adriangong
-----------------------------------------------------------------------

软件懂的不会用,不懂的又不会用,这就是现状,

出0入0汤圆

发表于 2010-9-29 17:10:10 | 显示全部楼层
强势贴~~~

出0入0汤圆

发表于 2010-10-14 20:04:06 | 显示全部楼层
支持

出0入0汤圆

发表于 2010-11-17 00:01:28 | 显示全部楼层
顶,支持中国人自己的os

出0入0汤圆

发表于 2010-12-5 17:35:34 | 显示全部楼层
学习了。崇拜一下

出0入0汤圆

发表于 2010-12-5 19:19:39 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2010-12-5 19:29:38 | 显示全部楼层

出0入0汤圆

发表于 2010-12-6 12:31:59 | 显示全部楼层
崇拜一下

出0入0汤圆

发表于 2010-12-6 13:04:48 | 显示全部楼层
支持,奈何只是不到位,有些看不懂,不过以后会懂的

出0入0汤圆

发表于 2010-12-6 22:15:24 | 显示全部楼层
当初我去了现场听演讲。作者虽然普通话不是很好,但是讲的很有激_情,很有感染力,可惜的话华工去听老师讲座的人太少了。
老师很有抱负,也有激_情去实现自己的抱负,想做出我们中国自己的嵌入式系统。当我知道这个系统是老师一个人自己业余时间写的时,首先是吃惊,老师很有才,但是我想,一个好的系统,就算一个人是天才,也不能全部做的十分美好,希望老师以后找到志同道合的朋友,一起做出我们自己的嵌入式系统。

出0入0汤圆

发表于 2010-12-18 20:21:04 | 显示全部楼层
很佩服前辈的精神,独自静下来研究不是每个人都有勇气的,加油!也许转角就会出现一片新天地!

出0入0汤圆

发表于 2010-12-21 09:36:25 | 显示全部楼层
支持!!学习一下!

出0入0汤圆

发表于 2010-12-21 12:35:43 | 显示全部楼层
顶起!

出0入0汤圆

发表于 2010-12-24 17:48:00 | 显示全部楼层
小弟佩服。。。

出0入0汤圆

发表于 2011-4-2 14:57:30 | 显示全部楼层
真強。。。後生的同樣也要有自己的抱負啊。

出0入0汤圆

发表于 2011-4-28 23:06:51 | 显示全部楼层
加油,我也在努力学习中,希望以后能有自己的一份贡献

出0入0汤圆

发表于 2011-5-12 15:22:13 | 显示全部楼层
佩服前辈,很敬佩

出0入0汤圆

发表于 2011-5-28 23:34:41 | 显示全部楼层
晚生膜拜

出0入0汤圆

发表于 2011-6-15 12:10:57 | 显示全部楼层
支持!

出0入0汤圆

发表于 2011-6-15 14:18:28 | 显示全部楼层
闭门造车出门不合辙,LINUX的作者只是开了个头 呵呵

出0入0汤圆

发表于 2011-6-17 02:17:08 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-7-30 15:34:51 | 显示全部楼层
以前在一个嵌入式群里,群里分享就有一个《都江堰操作系统》,当时还纳闷呢,怎么把一个具体工程整上来了?原来这是一个新兴系统啊!支持lz这种精神!顶你!!!!!

出0入0汤圆

发表于 2011-8-23 09:58:04 | 显示全部楼层
哇,中国的os,一定要顶啊!

出0入0汤圆

发表于 2011-8-23 10:27:35 | 显示全部楼层
hao .我在关注ing

出0入0汤圆

发表于 2011-8-29 18:58:19 | 显示全部楼层
敢问楼主,支持51内核单片机吗

出0入0汤圆

发表于 2011-11-6 21:19:17 | 显示全部楼层
学习。

出0入0汤圆

发表于 2011-11-6 22:19:52 | 显示全部楼层
以后就学都江堰了!!!

出0入0汤圆

发表于 2011-11-6 22:57:50 | 显示全部楼层
强人,,膜拜了

出0入0汤圆

发表于 2011-11-6 23:02:04 | 显示全部楼层
我也希望能听听您的讲座.
可惜我们小学校呀

出0入0汤圆

发表于 2011-11-7 13:10:18 | 显示全部楼层

出0入0汤圆

发表于 2011-11-7 13:54:08 | 显示全部楼层
顶!
果断CTRL+D!

出0入0汤圆

发表于 2011-11-7 13:58:10 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-9 10:18:56 | 显示全部楼层
要的就是这个!!

出0入0汤圆

发表于 2011-11-21 10:58:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-21 12:33:37 | 显示全部楼层
so cool

出0入0汤圆

发表于 2011-11-21 12:34:57 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-11-21 12:42:53 | 显示全部楼层
顶!

出0入0汤圆

发表于 2011-11-21 13:09:22 | 显示全部楼层
敬佩楼主的忍耐力。。

出0入0汤圆

发表于 2011-11-21 14:35:08 | 显示全部楼层
学习了

出0入0汤圆

发表于 2011-11-25 23:42:48 | 显示全部楼层
我孤陋寡闻了 第一次听到这个操作系统

出0入0汤圆

发表于 2011-12-22 15:54:26 | 显示全部楼层
强烈支持

出0入0汤圆

发表于 2011-12-22 16:03:18 | 显示全部楼层
mark 学习

出0入0汤圆

发表于 2011-12-22 17:29:19 | 显示全部楼层
好,支持

出0入0汤圆

发表于 2011-12-22 19:14:20 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-12-22 19:34:58 | 显示全部楼层
衷心祝福国产的OS能发扬广大!

出0入0汤圆

发表于 2011-12-22 22:09:02 | 显示全部楼层
不错,很久之前听说过,好像销声敛迹了一段时间

出0入0汤圆

发表于 2011-12-28 21:08:59 | 显示全部楼层
回复【99楼】XL_J
-----------------------------------------------------------------------

不错

出0入0汤圆

发表于 2012-1-3 21:51:45 | 显示全部楼层
强大!支持!

出0入0汤圆

发表于 2012-2-21 23:41:50 | 显示全部楼层
支持都江堰操作系统,现在去看咯

出0入0汤圆

发表于 2012-3-3 20:49:41 | 显示全部楼层
牛人啊  以后要玩玩这个看看

出0入0汤圆

发表于 2012-3-3 23:44:09 | 显示全部楼层
膜拜下!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-28 22:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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