d****i 发帖数: 4809 | 1 所有操作系统都是C写的啊,UNIX, Linux, Windows,Mac OS, iOS, Android, 还有几
百种用于实时系统的RTOS。 |
|
T********i 发帖数: 2416 | 2 呵呵,说太多也有不好的地方。mimisoft当然知道很多。但是像goodbug和zhaoce那样
的可能只知道能run web的。RTOS就不要跟他们说了。 |
|
d****i 发帖数: 4809 | 3 用过几种不同的RTOS,真是世界之大,无奇不有,各有特色,精妙不已。 |
|
T********i 发帖数: 2416 | 4 和你握一下手。
我现在正在玩SiliconLabs和TI的RF chips。其实RTOS的优势就是简单。 |
|
|
c******e 发帖数: 545 | 6 也不能这么绝对,解决方案好的话普及也有可能。联发科好像是用Nucleus RTOS的吧。
解决方案齐全,通吃山寨机 |
|
d****i 发帖数: 4809 | 7 可以啊,Lua可以做embedded Linux上的script, 某些RTOS也支持Lua吧,忘了,好像
QNX就可以。 |
|
d****i 发帖数: 4809 | 8 所以嵌入式上面的C编程和一般台式机上的有很大的不同,比如不能用递归,尽量少用
或不用动态内存分配等等。另外,由于所有嵌入式操作系统都是C写的,只支持C,有的
甚至连C++都不支持或支持的不好,而且很多RTOS除了标准的ANSI C和POSIX API以外还
有自己一套适合自己操作系统特色的C API,这样就只有用厂商自己提供的SDK开发工具
了。 |
|
d****i 发帖数: 4809 | 9 功耗,overhead太大,并且embedded system千奇百怪,五花八门,光OS就有几百种,
各种硬件架构又有几百种,除了现在出来的Anroid几乎没有支持JVM的,其实安卓也只
是linux加了一层dalvik皮而已,对于其他非linux的RTOS完全没用。其实C++在嵌入式
系统里面用的也不如C多,很多嵌入式系统只有C编译器,甚至没有C++编译器,更不用
说要另外再往上加一层Java虚拟机了,这样就最直接,不用隔靴搔痒了。
Gosling |
|
d****i 发帖数: 4809 | 10 symbian, blackberry这样的系统严格的说已经不属于传统的嵌入式系统了, 可以称为
mobile OS。一般说的嵌入式系统的RTOS是指的象VxWorks, QNX, uC/OS, Integrity,
ThreadX, Nuclues等等这样的,一般都有很高的实时性要求,而且用在各种不同的工业
领域,而非手机操作系统。 |
|
T********i 发帖数: 2416 | 11 这个多大项目算大项目?
Unlike previous aircraft, such as the F-22, all software for the F-35 is
written in C++ for faster code development. The Integrity DO-178B real-time
operating system (RTOS) from Green Hills Software runs on COTS Freescale
PowerPC processors.[115] The final Block 3 software for the F-35 is planned
to have 8.6 million lines of software code.[116]
wiki确实提到了crisis。
问题是,上Java就行吗? |
|
d****i 发帖数: 4809 | 12 很对,mission safety critical system用的OS都是需要认证的,所以象embedded
Linux这种是不能用的,都要上VxWorks, QNX, Integrity这种RTOS。
OS |
|
S*A 发帖数: 7142 | 13 对啊,要不然 RTOS 用什么写啊,都用汇编也太弱了。
难维护也不能跨平台。 |
|
d****i 发帖数: 4809 | 14 看看其他操作系统就知道为什么Linus说的有道理了,从各种UNIX flavor(AIX, HP-UX,
Solaris, FreeBSD, NetBSD, OpenBSD, IRIX, Tru64, UnixWare, OS X),到Windows
,到多达数百种RTOS,内核无一不是C,确实没有C++的影子。 |
|
x**l 发帖数: 64 | 15 linux下的一段代码,single thread,可以独占一个cpu 100%的资源。最主要部分就是
这个loop
for (uint32_t i = 0; i < 10; i++)
{
working(pBuf, bufferNum);
gap(gapLoops);
}
working()会做一些有business 意义的操作,
gap()就是很简单的一个双循环去制造一些时延在两次working()之间。
如果gap()只运行很短的时间,例如34个cpu clock cycles,则working()在iteration
2~10次时用的时间很短,例如,1100个cycles
如果gap()只运行较长时间,两次working()之间的时延有1个second,则working()在
iteration 2~10次的运行时间会double甚至2.5倍,例如会达到2500个cycles
我已经用numactl和chrt让这个程序充分独占一个cpu core,而且用cpuset把其他
threads移开这个core上.
我的问题是:
... 阅读全帖 |
|
x****u 发帖数: 44466 | 16 这些东西不是为了实时系统设计的,你不应该在普通Linux上做RTOS的事情啊。 |
|
x**l 发帖数: 64 | 17 我知道在某些real time kernel或者一些RTOS下,没有这种差异. 但对更大型的复杂程
序,在RT kernel下则仍然有这种差异. 由于不能理解其中的原因,所以无法调制. 所以
我主要想理解为什么,而不是怎样为这个小程序避免这个差异. |
|
x****u 发帖数: 44466 | 18 楼主说
“我知道在某些real time kernel或者一些RTOS下,没有这种差异. 但对更大型的复杂程
序,在RT kernel下则仍然有这种差异.” |
|
S*A 发帖数: 7142 | 19 这个程序测量 TSC 的方法就是错的,无论什么 OS 都需要改过来再说,
不然结果没有意义。如果 RTOS 频繁中断或者中断里面有 serialize
instruction 完全有可能使结果看上去更接近。
杂程 |
|
d****i 发帖数: 4809 | 20 你这个显然不对,各种工业上用的实时操作系统,既不是UNIX, 也不是Linux,更不是
Windows, 而是专用的实时操作系统,RTOS有几百种,常见的几种有比如
VxWorks
QNX
Greenhills Integrity
Nucleus
ThreadX
RTX
当然实际上他们的设计都深受UNIX设计思想和架构的影响,就是把普通台式机和服务器
的操作系统迷你化,实时化,和专用化后的一个个专用的操作系统。至于你说的多数都
是windows的,都是给人用的控制台程序,带有UI界面的,和实时操作系统完全是两码
事。 |
|
m********5 发帖数: 17667 | 21 sigh, OK, OK, RTOS都是UNIX的儿孙
大家都在用VxWorks和RTX做控制界面
我真的错了 |
|
d****i 发帖数: 4809 | 22 没错,我试过好几种用在embedded system上的各种RTOS和各种CPU architecture下面
的编译器,C的完全没有问题,C++的代码就会出现这样那样的问题,基本都是chip
vendor的编译器出了问题,不要说C++11,就是老的版本C++98用到一些不常用的fancy
功能的时候都会有点小问题。所以我们现在还是大部分用C,少量的地方必须用C++的地
方才用C++。 |
|
b*****e 发帖数: 1193 | 23 很多ARM MCU的internal flash和ram就足够应用了,比如1M flash,256KB RAM。
但是一涉及linux,就不得不上DDR ram。128M都常常紧张。
所以很多产品级的应用就是一个简单的RTOS,挂上file system,GUI,比linux开发起来
快的的多。 |
|
b*****e 发帖数: 1193 | 24 很多ARM MCU的internal flash和ram就足够应用了,比如1M flash,256KB RAM。
但是一涉及linux,就不得不上DDR ram。128M都常常紧张。
所以很多产品级的应用就是一个简单的RTOS,挂上file system,GUI,比linux开发起来
快的的多。 |
|
s******7 发帖数: 350 | 25 Raspberry Pi有好多东西可以借用或直接使用,PHP和Python都可用,需要数据库的话
可用sqlite甚至MySQL,只装需要的基本模块就可以,ARM做这个足够Powerful了,也不
是要在单片机搞。
当然如果要求是实时操作系统RTOS那是另外一回事,一般的Linux也玩不转这个 |
|
d****i 发帖数: 4809 | 26 这个是ANSI/ISO C standard的官方标准。另外有一个是UNIX/Linux的官方标准C API的
文档:
http://pubs.opengroup.org/onlinepubs/9699919799/
所有POSIX compliant的操作系统大都遵循,包括Linux(all distro), FreeBSD,
NetBSD, OpenBSD, Solaris, AIX, HP-UX, Tru64, IRIX, UnixWare, OS X等等一众
Unix和Unix-like OS。Windows除外,它有自己的一套Win32 API。嵌入式系统上的RTOS
一般除了自己的一套API外,也包括了POSIX API的一部分子集,比如VxWorks, QNX,
Greenhills Integrity, RTX等等。 |
|
w***g 发帖数: 5958 | 27 Windows NT有一套原生的Posix Subsystem,和Win32 Subsystem处于相同的地位。
两者都直接跑在内核上,而不是用Win32实现的Posix。
这事情没多少人知道。技术被商业绑架了。
RTOS |
|
d****i 发帖数: 4809 | 28 Smart pointer isn't GC at all. For the code I have ever encountered, smart
pointers in C++ are used sparsely particularly on server side . But for
other use cases such as embedded system, Android, iOS, RTOS,... whatsoever,
they are never used. |
|
d****i 发帖数: 4809 | 29 来自主题: Programming版 - 语言与产品 你这个讨论太肤浅了,C/C++/Java这三个主流语言几十年以来几乎涵盖了所有的主流的
重量级基础软件,这也是为什么tiobe排名这三个老是前三的原因之一。C的产品一大推
,所有的操作系统都是C写的,Unix/Linux/Windows/Mac/Android/iOS/各种RTOS。。。
还有所有的基础底层系统软件像Apache, Ngnix,所有语言的runtime, interpreter,
VM等等。C++的也一大堆,KDE, Gnome, office, google search, 几乎所有的database
, Oracle, MySQL, MongoDB, DB2, SQL Server, Sybase。。。Java的也一大堆,
Eclipse, Tomcat, Weblogic, Hadoop,Cassandra。。。Lisp? 没有,除了emacs,就
是emacs也算不上主流,大部分人都默认用vi。 |
|
d****i 发帖数: 4809 | 30 大牛高,赞详解。我做了那么多年,不管是当年的Solaris, 还是现在的Linux,还是那
些众多的RTOS, 清一色的preemptive。pthread确切的说应该是user space created的
thread,但是under the hood由kernel thread来support的吧, |
|
d****i 发帖数: 4809 | 31 魏老师一看就是自己写过这个的明白人,我们以前自己写过一个完整的RS232的C的串口
程序,非常复杂,因为先是在没有OS的裸板环境下,后来用到了RTOS下面,所以各种
case处理非常复杂,最后终于有了一套通用的库,然后用C++ wrap了一下,才算正本归
元。network stack应该比串口更复杂,如果不用lib都自己写的话。 |
|
d****i 发帖数: 4809 | 32 arduino还算好了,毕竟是Linux,要是那些RTOS的话,有些连device driver都没有现
成的要自己写。 |
|
T********i 发帖数: 2416 | 33 我20年前就写过GPIO模拟串口的。
RTOS, MCU,Linux,Windows串口都写过。
串口恶心就在于一根线叫UART,两根线双向,增加其他I/O针脚就有RS232和485之类的
。485还是半双工。232为了当年modem设计的,有什么响铃线之类的现在的小年轻估计
很难理解。当年俺还有过电传打字机当显示器玩basic,一个list命令打印出一张纸的
神奇体验。
标准确实有。具体实现遵守多少就是另外一回事。
至于flow control,buffer,时序之类的要考虑的比TCP/IP还多。至少TCP/IP还不会丢
数据。你串口那一边要是一个蠢货写的,啥事都能发生。
写一个随便插拔,两边都能自我恢复的。比TCP/IP困难多了。大多数情况,是根本不可
能的。 |
|
s********k 发帖数: 6180 | 34 要用非常严格的RTOS,很多都是microcode,时序要求极其严格那种 |
|
x**********i 发帖数: 658 | 35 请问github上有没有人分享类似的code,对这种real time的code很感兴趣
:要用非常严格的RTOS,很多都是microcode,时序要求极其严格那种
:【 在 hyhl (hehe) 的大作中提到: 】 |
|
s********k 发帖数: 6180 | 36 基本这种RTOS都还是够呛,主要两大问题:一是涉及到conext switch,哪怕就是简单
的stack上的状态变量push,pop都不行,用有timer INT,还是overhead大,第二是
memory management headache,必须手动静态分配为主。
所以最好的就是microcode基础上的state machine,用个while loop然后偶最多加
branch之后return,低功耗,时序严格可控,而且debug好办 |
|
g****t 发帖数: 31659 | 37 我的代码在街上的汽车里就有。真正生产是多层协作。
不是一块的专家,谈论其他块的细节没有意义。本身我是做算法的。按道理轮不到我写
c代码。c代码有专门的人写。
但是当年有个问题是我跨界解决的。就是前面谈到的类似数值稳定性问题。所以我略知
一二。
最关键的一点,十年前我在EE就讲过。这些都是低端产业。
别做梦了。
纠结底层毫无意义。底层软件多数实际上是半导体硬件公司卡死的。然后半导体有期货
性质,有金融属性。这些都不是技术的事。这一行利润不高,shit hole 倒是很多。
汽车技术我觉得不如看看tsla新update的Autopilot软件。网上很多评测。merge 进高
速也有很多人在放video。
: 基本这种RTOS都还是够呛,主要两大问题:一是涉及到conext switch,哪怕就
是简单
: 的stack上的状态变量push,pop都不行,用有timer INT,还是overhead大,第
二是
: memory management headache,必须手动静态分配为主。
: 所以最好的就是microcode基础上的state machi... 阅读全帖 |
|
g****t 发帖数: 31659 | 38 最好的办法是把business case卡死。把代码当机械设备做。不要设计多余的
flexibility
: 基本这种RTOS都还是够呛,主要两大问题:一是涉及到conext switch,哪怕就
是简单
: 的stack上的状态变量push,pop都不行,用有timer INT,还是overhead大,第
二是
: memory management headache,必须手动静态分配为主。
: 所以最好的就是microcode基础上的state machine,用个while loop然后偶最多加
: branch之后return,低功耗,时序严格可控,而且debug好办
|
|
发帖数: 1 | 39 他家的QNX被NVDA大推啊,Android和Linux太复杂,不可能通过ASIL D,其他的RTOS又
太简单,只能搞搞仪表盘,很难支持集成GPU的高端SoC(Xavier)做自动驾驶。
另一个对手VxWorks太高端了,价格很贵,主要做飞机的(有DO-178C认证),做汽车OS
没有必要,而且VxWorks属于intel,对NVDA的ARM系统来说是敌人。目前VxWorks在汽车
领域很少用。
苹果/谷歌做汽车OS都不太在行,即使不收购QNX,自己重造轮子,通过ISO 26262
ASIL D也需要时间。而且这两个公司太大,汽车企业不喜欢。微软Auto OS已经被Ford
抛弃,说明Auto OS有门槛。
BB/QNX有没有可能做成自动驾驶领域的Android或航空领域的VxWorks?
另外BB有很多服务器端的安全系统,是不是未来也可以用在汽车上?
大家怎么看? |
|
s********k 发帖数: 6180 | 40 汽车需要OS,并不等于自动驾驶核心部分需要OS啊,OS还可以连接中控,蓝牙,导航啥
的,未来还会更多应用。
自动驾驶核心部分基本硬件上while loop写死,每个command都有固定时间,靠timer或
者sensor做INT中断。别说自动驾驶,很多比自动驾驶要求低的都是这么做。为啥自动
驾驶系统不能一个公司写?iOS都能一个公司写,你看看open的android花样多多少就知
道open的系统在critical时候不能用
你说的需要OS,是因为设计上就复杂化需要把很多信息集成进来,然后信息的处理,优
先级,context switch,memory management又都进来,不确定增大很多成了headache。
选择加法去用更多的问题解决已有问题,开始开起来容易,其实很难。OS是可以做很多
,但是关键时候得怎么裁剪才行。你要是把所有比如信号处理,图像处理都加进来,是
需要不同的SOC做不同的工作,也许有些做barebone,有些RTOS,有些Linux类似的,但
是核心的控制部分很难用到OS |
|
s********k 发帖数: 6180 | 41 不知道你做过雷达和Lidar没有,这些sensor上的核心部分部分都不是用RTOS,信号处
理部分直接SOC硬件芯片级别实现,外加辅助的microcode。各个不同的perception系统
都是自己带SOC。OS做法是需要提供很多flexible和第三方软件或者plugin的支持才需
要,但是flexible和开放很多第三方恰好是自动驾驶初期避免的。自动驾驶如果做这种
开放协议,基本就是各家乱战,现在google都不愿意在做Android这样的开放到自动驾
驶上。iOS是历史从freeBSD上,但是apple totally own,不需要任何第三方依赖,这
才是正确的做法。 |
|
发帖数: 1 | 42 sensor”本身“用不用RTOS是我這個樓要討論的麼?
那你怎麼不說nand和dram裡面沒有os,所以自動駕駛就也不需要OS?
我就問,集成”自動駕駛“那一整套東西,需不需要OS? |
|
发帖数: 1 | 43 CUDA目前只有Linux的SDK,一般RTOS沒有CUDA驅動,你怎麼開發?你可能搞到Nvidia的
驅動的源代碼麼?
未來CUDA可能支持QNX,這就是和baremetal的區別。假如你搞中斷代碼,你有Nvidia
SoC的硬件架構手冊麼?哪個中斷?什麼寄存器?寫什麼值?
目前Waymo、Tesla、Baidu自動駕駛都是Linux就說明問題了。
我只想確定為什麼最好是QNX,不是VxWorks或Integrity罷了。
你有回答問題麼? |
|
发帖数: 1 | 44 這是我前面提到的NVDA大力支持QNX的原因。
大力支持就能看友商的代碼和文檔,系統才穩定高效。
不大力支持的系統就像現在的Linux那樣,Frankenstein,可怕得很,全是漏洞。
還有全力唱反調的,譬如Windows不支持IA64。
我想知道VxWorks因為Intel的關係,是不是會被NVDA唱反調?
那未來L5自動汽車RTOS不就只剩QNX了?
。。 |
|
|
发帖数: 1 | 46 > : 那未來L5自動汽車RTOS不就只剩QNX了?
我先去买点股票
爱你 |
|
j******g 发帖数: 1098 | 47 只有很简单的microcontroller上面跑的code,连stdlib都没有的才这么干,
比如这个code每秒钟要处理上万次的interrupt,那的确是baremetal的IRQ handler +
while loop + 静态变量。
没有stdlib会让开发很不方便,
如果只是每秒钟几十次或者几百次的响应,RTOS + 裁剪过的C++都可以。 |
|
s********k 发帖数: 6180 | 48 为啥自动驾驶要等同于CUDA做啥,CUDA又不做Lidar,不做雷达,不做sensor fusion,
不做控制系统,again,你根本在鸡同鸭讲,我从来没说车里面不需要RTOS或者linux,
我是说自动驾驶核心控制系统用LInux或者其他类似QNX的overhead太大。
你口口声声说Waymo、Tesla、Baidu自動駕駛都是Linux,结果连TSLA现在啥级别都不知
道,那我问你,这些公司拿Linux难道是做real time系统? |
|
发帖数: 1 | 49 第三方代碼當然有機會咝校愕腛TA都用娛樂系統來升級自動駕駛系統的固件,這不是
找死是什麼?
聽過secured booting和TPM麼?固件不可能讓你隨便就通過非加密總線升級,這樣的系
統分分鐘被破解。
如果使用Linux,那漏洞海了去了,meltdown只是其中之一。如果不用OS用你說的
baremetal,那安全隱患更多,就像海康攝像頭一樣,明目張膽留後門。你在Cortex M3
上的加密實現都是你做的?還是用第三方的庫,調調API?
你不用Linux,也不用RTOS,我就不相信能做自動駕駛。baremetal前提條件就是擁有第
三方的源代碼,你的系統估計連GPU的門都打不開。 |
|
g****t 发帖数: 31659 | 50 鍝庛鍓嶆鏃堕棿鏈変釜榛戝锛屽氨鏄互鍓嶉粦浜唅phone閭e摜浠
缁戜簡涓憚鍍忓ご鍜岀數鏈哄湪鏂瑰悜鐩橈紝鎵惧埌浜嗛挶鍦ㄥ仛鑷姩椹鹃┒銆br />
鑰侀瓘鐨勮娉曚笉涓畾瀵广浣嗕綘鐢ㄨ嚜宸变竴鐭ュ崐瑙g殑澶у叕鍙稿悕瀛楀
拰buzz words缁戝湪鑷繁韬笂鐨勫姙娉曟潵鎵硅瘎鍒汉鐨勭嫭绔嬫鑰冿紝杩欎
細璁╀綘鏃犳硶鍓嶈繘鐨勩
銆鍦magagop(magagop) 鐨勫ぇ浣滀腑鎻愬埌: 銆br />
: 绗笁鏂逛唬纰肩暥鐒
舵湁姗熸渻鍜濇牎顑熸剷鑵汿A閮界敤濞涙▊绯荤当渚嗗崌绱氳嚜鍕曢椐涚郴绲辩殑
鍥轰欢锛岄涓嶆槸
: 鎵炬鏄粈楹硷紵
: 鑱介亷secured booting鍜孴PM楹硷紵鍥轰欢涓嶅彲鑳借畵浣犻毃渚垮氨閫氶亷
闈炲姞瀵嗙附绶氬崌绱氾紝閫欐ǎ鐨勭郴
: 绲卞垎鍒嗛悩琚牬瑙c
: 濡傛灉浣跨敤Linux锛岄偅婕忔礊娴蜂簡鍘讳簡锛宮eltdown鍙槸鍏朵腑涔嬩竴
銆傚鏋滀笉鐢∣S鐢ㄤ綘瑾殑
: baremetal锛岄偅瀹夊叏闅辨偅鏇村锛屽氨鍍忔捣搴锋敐鍍忛牠涓ǎ锛屾槑
鐩嫉鑶界暀寰岄杸銆備綘鍦–ortex M3
: 涓婄殑鍔犲... 阅读全帖 |
|