当前位置: 首页 > news >正文

Android车载学习笔记1——车载整体系统简介

一、汽车操作系统

        汽车操作系统包括安全车载操作系统、智能驾驶操作系统和智能座舱操作系统。

1. 安全车载操作系统

        安全车载操作系统主要面向经典车辆控制领域,如动力系统、底盘系统和车身系统等,该类操作系统对实时性和安全性要求极高,生态发展已趋于成熟,其实时操作系统RTOS,主要应用对象是电子控制单元(ECU),嵌入式实时操作系统具有高可靠性、实时性、交互性以及多路性的优势,系统响应极高,通常在毫秒或者微秒级别,满足了高实时性的要求。

        目前,主流安全车载操作系统都兼容 OSEK/VDX 和 Classic AUTOSAR 这两类汽车电子软件标准。其中,Classic 平台基于 OSEK/VDX 标准,定义了安全车载操作系统的技术规范。

2. 智能驾驶操作系统

        智能驾驶操作系统主要面向智能驾驶领域,应用于智能驾驶域控制器,该类操作系统对安全性和可靠性要求较高,同时对性能和运算能力的要求也较高。基于 OSEK/VDX 和 Classic AUTOSAR 软件架构的安全车载操作系统已经不能满足未来自动驾驶汽车的发展需求,AUTOSAR 组织为面向更复杂的域控制器和中央计算平台的集中式电子电气架构推出 Adaptive AUTOSAR 平台。

        Adaptive AUTOSAR 定义采用了基于 POSIX 标准的操作系统,可以为支持 POSIX 标准的操作系统及不同的应用需求提供标准化的平台接口和应用服务,主要是为了适应汽车智能化的发展需求,不过,该类操作系统目前在全世界范围内日趋成熟,但生态尚未完备。

3. 智能座舱操作系统

        智能座舱操作系统主要为汽车信息娱乐服务以及车内人机交互提供控制平台,是汽车实现座舱智能化与多源信息融合的运行环境,对操作系统的实时性与可靠性要求并不严苛。

        主流车型的智能座舱操作主要包括QNX、Linux、Android等,传统智能座舱操作系统中QNX占据了绝大部分份额,近年来,智能座舱的娱乐与信息服务属性越发凸显,开源的Linux以及在手机端拥有大量成熟信息服务资源的Android被众多主机厂青睐,成为后起之秀。

二、车载操作系统

        汽车操作系统中的智能座舱操作系统不直接参与汽车行驶的控制决策,不会对车辆行驶性能和安全产生影响,通常统称为车载信息娱乐系统(IVI )。这也是 Android 程序员主要负责的领域,之后我们学习的重点所在。

1. 主流车载操作系统结构

                                                                                图1

        当前国内主流车载操作系统架构如图1所示,右侧是汽车的中控、副驾屏幕,操作系统一般是Android,左侧是汽车的仪表屏幕,一般是 QNX 系统。可对应图2理解,红框内是仪表嵌入式系统展示,黄框内是中控、副驾Android系统展示。

                                                                            图2 

 2. 车载系统分析

图3

        图3车载结构图中,红框内的架构与android手机系统相似,区别在于车载系统的大量Android系统Service(服务)会有所裁剪,并且增加了额外的大量专属车机Service(服务)。

        黄框为Native中间层,包含HAL(硬件抽象层)Android BSP(板级支持包),起到承上启下的作用。

        其中硬件抽象层是位于Android操作系统内核与图3中硬件系统之间的接口层,其目的在于将硬件抽象化。

        它隐藏了特定平台的硬件系统接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。

        HAL层是上层应用对底层硬件操作屏蔽的一个软件层次,就是上层应用不必关心底层硬件具体是如何工作的,只需要调用底层提供的统一接口即可。HAL层对接具体的硬件BSP接口,比如音视频接口、收音机接口、网络接口、spi接口等。

        板级支持包(BSP)(Board Support Package)是构建嵌入式操作系统所需的引导程序(Bootloader)、内核(Kernel)、根文件系统(Rootfs)和工具链(Toolchain) 提供完整的软件资源包。

        作为硬件抽象层的一种实现,板级支持包BSP(Board Support Package)是现有的大多数商用嵌入式操作系统实现可移植性所采用的一种方案。BSP隔离了所支持的嵌入式操作系统与底层硬件平台之间的相关性,使嵌入式操作系统能够通用于BSP所支持的硬件平台,从而实现嵌入式操作系统的可移植性和跨平台性,以及嵌入式操作系统的通用性、复用性。

        既然同属中间层,HAL层与BSP层有什么区别呢?

        可以试想一下,在大型项目开发中,若程序只有简单的函数封装,一旦硬件变动,我们将需要对BSP(板级支持层)进行大规模改动,无疑对程序的维护是一种巨大的负担。

        而引入HAL(硬件抽象层)的概念后,由HAL库对BSP库进一步的封装,形成统一的标准,下次再改动硬件电路部分时,我们就只需要改动BSP库的具体功能函数,而不需要对应用层进行任何的修改了。

        这就是分层思想的体现。

        继续往下就是绿色方框圈住的底层硬件及嵌入式系统了。

        其中,嵌入式系统一般采用的是QNX嵌入式系统,这是一种商业类Unix实时操作系统,主要针对嵌入式系统市场,系统采取微核心架构,其多数功能以小型的task来运行,它们被称为server,这样的架构可以让用户或开发者关闭不必要的功能,而不需要改变操作系统本身。

        QNX的应用十分广泛,被广泛应用于汽车、轨道交通、航空航天等对安全性、实时性要求较高的领域,在汽车领域的市场占有率极高。该产品开发于20世纪80年代初,后来改名为QNX软件系统公司,公司已被黑莓公司并购。

        图3左侧仪表上层应用也是通过QNX底层嵌入式系统来控制硬件的,不过QNX一般实现比较小型的功能,比如打开车窗,关闭空调等,不太适合用来制作漂亮的界面和复杂的操作等。

        因此,右侧中控台便加入了Android系统来进行界面的展示及人机交互功能的复杂操作。

        简而言之,Android车载系统可以看做是一个运行在 QNX 上的虚拟系统,其底层技术原理就是Hypervisor,一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件。也可叫做VMM( virtual machine monitor ),即虚拟机监视器。

        再往下,就到了硬件实现部分,让我们一起来研究一下,QNX嵌入式系统是如何实现控制硬件交互的吧。

        由图3可以看到与QNX系统交互的是SOC,那么什么是SOC呢?

        一般说来, SoC称为系统级芯片,也有称片上系统,意指它是一个产品,是一个有专用目标的集成电路,其中包含完整系统并有嵌入软件的全部内容。同时它又是一种技术,用以实现从确定系统功能开始,到软/硬件划分,并完成设计的整个过程,参看图4实物,高通骁龙8155SoC芯片。

图4 

        从狭义角度讲,它是信息系统核心的芯片集成,是将系统关键部件集成在一块芯片上;从广义角度讲,SoC是一个微小型系统,如果说中央处理器(CPU)是大脑,那么SoC就是包括大脑、心脏、眼睛和手的系统。

        车载SoC 和常见的手机SoC 非常类似,内部集成了 CPU 和 GPU 。

        目前最主流的车载 SoC 是高通的SA8155P(简称8155),它就是高通在手机SoC 骁龙 855 的基础上发展而来的。

        它采用7纳米工艺制造,具有八个核心,算力为8TOPS,也就是每秒运算8万亿次,它可以最多支持6个摄像头,连接4块2K屏幕或者3块4K屏幕,支持WiFi6,支持5G,支持蓝牙5.0。

        另外,8155相比820A还增加了NPU(神经网络处理单元),专门负责车辆AI计算部分任务,让CPU可以更专注于其他重要任务。

        我们知道MCU,微控制器单元,它负责着汽车很大一部分的功能,例如通过车载控制器对各项数据进行分析处理以做出最优决策;负责对车辆的信息娱乐交互和运动控制,如打开车窗,关闭空调等等,即,MCU可以应用于车辆的通讯、能源、存储、感知以及计算,对汽车行业有着重要作用。

        而SoC芯片集成了很多个MCU的功能,以前的由多个MCU协同干的事情被集成了,MCU没有了,取而代之的是对外的IO引脚,连接IO引脚就可以实现交互,完成以前MCU的功能。

        SoC通过SPI协议(串行外设接口)与MCU进行收发数据信号,MCU再通过CAN总线控制硬件执行动作,诸如打开车窗,关闭空调等。

        其中,CAN控制器局域网 (Controller Area Network,简称CAN或者CAN bus) 是一种功能丰富的车用总线标准。被设计用于在不需要主机(Host)的情况下,允许网络上的单片机和仪器相互通信。 它基于消息传递协议,设计之初在车辆上采用复用通信线缆,以降低铜线使用量,后来也被其他行业所使用。

        CAN 是车载领域很重要的一种串行通信总线,我们在中控屏上可以随时查看、设置车门、发动机、后备箱这些模块,其实就是借助CAN bus实现的,即使是Android程序员也经常要和它打交道,之后会详细讲讲这个东西。

三、Android Automotive平台

        Android Automotive是通过 Android 的通用框架,语言和 API来实现的一个全栈,开源,高度可定制的平台。

1. Android Automotive与整个Android生态系统的关系

  •         Android Automotive 就是 Android 平台

        它不是Android的分支或并行开发,它与手机,平板电脑等安卓设备上的Android具有相同的代码库,并且位于相同的存储库中。 它基于经过10多年开发的强大平台和功能集,可利用现有的安全模型,兼容性程序,开发人员工具和基础架构,同时继续具有高度可定制性和可移植性,完全免费和开源的特点。

  •         Android Automotive 扩展了 Android 平台

        在将 Android 打造为功能完善的信息娱乐平台的过程中,我们增加了对汽车特定要求、功能和技术的支持。Android Automotive 将是一个一站式的车载信息娱乐平台,就像现在的 Android 系统之于移动设备一样。

2. Android Automotive 架构

 图5

        Android Automotive 是在原先Android的系统架构上增加了一些与车相关的(图5中虚线框中绿色背景的)模块:

        1)Car App :包括OEM和第三方开发的App
        2)Car API :提供给汽车App特有的接口
        3)Car Service :系统中与车相关的服务,主要基于CarProperty实现Vechile相关的策略
        4)Vehicle Network Service :汽车的网络服务
        5)Vehicle HAL :汽车的硬件抽象层描述,定义 OEM 可以实现的车辆属性的接口

        可参看图6,绿色为Android原生功能模块,蓝色为Android Automotive增加功能模块。

图6

四、车载应用

1. SystemUI

        即系统的UI 。

        SystemUI 是一个标准的 android 应用程序,它提供了系统 UI 的统一管理方案。 常见的状态栏、导航栏、消息中心、音量调节弹窗、蓝牙连接弹窗等一系列后台弹窗都是由SystemUI 模块负责管理。

        开发难度: SystemUI 作为 Android 系统启动的第一个带有 UI 的应用程序,对启动性能和稳定性都有很高的要求。 SystemUI 需要管理的模块非常多,导致开发任务比较繁重,有的车载项目会要求 SystemUI 兼容原有的应用层API ,那么开发难度还会上升。开发人员需要对 Android 原生的 SystemUI 源码有一定的了解。

2. Launcher

        Android系统的桌面。

        开发难度:Launcher 是与用户交互最多的应用程序之一,同样对启动性能和稳定性都有很高的要求。Launcher开发难度主要集中在与 3D 车模的互动(如果有 3D 模型),可能需要支持 Widget 的显示(WidgetHost ),各种应用的拖动和编辑等。开发人员最好对 Android 原生的 Launcher 源码有一定的了解。

3. Settings

        系统设置。

        是车载Android 系统中非常重要的一个系统级应用,是整个车载 IVI 系统的控制中心,整车的音效、无线通信、状态信息、安全信息等等都是需要通过系统设置来查看和控制。

        开发难度:系统设置主要难度都集中在对Android Framework 层 API 的理解上,例如蓝牙、 Wi-Fi 设置就需要开发人员对系统级API 有一定的了解,这些内容往往都需要阅读 Android 原生应用的源码才能了解,所以系统设置也是一个开发难度比较大的车载应用。

4. CarService

        车载Android系统的核心服务之一。

        所有应用都需要通过 CarService 来查询、控制整车的状态。例如:车辆的速度、档位、点火状态等等。

5. VehicleSettings

        车辆设置,更常用的叫法是“车控车设”。

        负责管理整个车辆内外设置项的应用,主要与CarService 进行数据交互。可设置项非常多。驾驶模式、方向盘助力、后视镜折叠、氛围灯、座舱监测、无线充电等等。

        开发难度:主要难度集中在复杂多变的UI ,有的主机厂商会在 HMI 中引入 3D 化的交互模型,就还需要考虑与3D 模型间的通信,同时还需要熟练运用 CAN 工具来模拟汽车的 CAN 信号用于调试和开发。

6. HVAC

        空调。

        负责管理整个车辆空调的应用,主要与CarService 进行数据交互。

        开发难度:和『车控车设』类似。

7. Map

        地图。

        车载系统的核心功能之一,负责导航和语音提示等功能。不同的主机厂商有不同的开发方式。不外乎有三种:

        1)选择使用百度、高德的地图 SDK 自行开发导航应用;
        2)将导航模块外包给百度、高德,由地图供应商进行定制化开发;
        3)直接集成地图供应商已有的车载版本的应用;

        开发难度:主要集中在对地图SDK 的运用和理解上,而且地图应用属于对性能要求较高的模块。

8. Multi-Media

        多媒体应用。

        一般包含图片浏览、在线音视频播放器、USB 音视频播放器、收音机等。
车载的应用远不止以上说得这些,根据不同的需求,还有非常多的 Service 需要做定制化开发,这里只列 举了最常见的应用类型。

        汽车上还会有一些第三方的应用,常见的有QQ 音乐、微信、 QQ 、抖音、讯飞输入法等等,这些应用主机厂商不会获得源码,一般只会拿到一个apk ,直接集成到 Android 系统中即可。

参考资料:

【Android车载系列】第1章 车载系统整体介绍_android 车载___Yvan的博客-CSDN博客

soc(系统级芯片)_百度百科

芯片,SOC和MCU区别;裸机和带系统_soc mcu_Xueqian E的博客-CSDN博客

SPI(SPI协议)_360百科

车机系统开发——Android Automotive - 简书

汽车操作系统,你了解多少?

智能座舱SoC生命周期短,一代网红芯片高通8155是如何炼成的?_搜狐汽车_搜狐网

高通骁龙 8155 到底有什么魔力?_高通8155_aFakeProgramer的博客-CSDN博客

相关文章:

Android车载学习笔记1——车载整体系统简介

一、汽车操作系统 汽车操作系统包括安全车载操作系统、智能驾驶操作系统和智能座舱操作系统。 1. 安全车载操作系统 安全车载操作系统主要面向经典车辆控制领域,如动力系统、底盘系统和车身系统等,该类操作系统对实时性和安全性要求极高,生态…...

Apache Doris

Apache Doris教程 1.Doris 简介 1.1 Doris 概述 Apache Doris 由百度大数据部研发(之前叫百度 Palo,2018 年贡献到 Apache 社区后, 更名为 Doris ),在百度内部,有超过 200 个产品线在使用,…...

GB28181 对接海康平台,解决音视频卡顿问题

GB28181 对接海康平台,解决音视频卡顿问题 一、概述二、问题分析1、设备对比分析2、抓包对比分析3、验证分析结果三、总结四、讨论一、概述 设备使用GB28181协议对接海康平台时,发现音频和视频存在卡顿现象,不是一直卡顿,有时候卡有时候不卡,但是卡顿的时候音视频一起卡顿…...

Linux系统编程面试题

1. 什么是系统调用?它与普通函数调用有什么不同? 系统调用和普通函数调用的区别在于它们执行的上下文和权限不同。系统调用是操作系统内核提供的一组接口,允许用户程序请求操作系统执行特权操作,例如打开或关闭文件、创建新进程等…...

计算机网络 - 网络层的数据平面

Overview 首先Network Layer负责的是host to host的传输, 然后可以分为两个平面, 控制平面以及数据平面. 数据平面: 负责forward datagrams from input to output links 决定路由器从input到output 转发功能: 基于目标地址 转发表 SDN方式基于多个字段流表 控制平面: 调…...

《Spring Guides系列学习》guide41 - guide45

要想全面快速学习Spring的内容,最好的方法肯定是先去Spring官网去查阅文档,在Spring官网中找到了适合新手了解的官网Guides,一共68篇,打算全部过一遍,能尽量全面的了解Spring框架的每个特性和功能。 接着上篇看过的gu…...

数据库基础——1.数据库概述

从这篇文章我们开始学习数据库的相关知识 目录 1.为什么要使用数据库 2.数据库与数据库管理系统 2.1相关概念 2.2数据库与数据库管理系统的关系 ​编辑2.3常见的数据库管理系统 2.4常见的数据库介绍 3.MySQL介绍 3.1概述 3.2关于MySQL8.0 3.3 Oracle vs MySQL 4.RD…...

2023 光亚展|乐鑫将携 AI、Wi-Fi 6、私有云和 Matter 方案精彩亮相

2023 广州国际照明展览会(光亚展)将于 6 月 9 至 12 日在广州琶洲展馆启幕。本届展会以“光未来”为主题,畅想未来生活方式的无限可能。乐鑫科技 (688018.SH) 将在 B 区 9.2 号厅 D55 展位,带来具有前瞻性的智能照明解决方案和实体…...

用反射设计通用的实例化对象方案

需求 对象的相关信息存储在javabean.properties文件中,通过读取properties文件中的信息,实例化对象,要求程序不能硬编码,即程序可以通用,针对不同的对象,都可以实例化。仅需修改配置文件,不需要…...

破坏单例模式--存在的问题---问题的解决

目录 破坏单例模式--存在的问题---问题的解决 问题演示 破坏单例模式: 序列化 反射 序列化反序列化: 代码: 运行结果: 反射 代码: 运行结果: 问题的解决 序列化、反序列方式破坏单例模式的解…...

SpringCloud微服务踩坑系列-java.lang.IllegalStateException

异常如下: 2023-05-24 08:47:10.764 ERROR 118400 --- [nio-8084-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exceptio…...

Linux-地址空间

文章目录 问题引入操作系统宏观认识操作系统与进程程序地址空间进程地址空间问题解释 问题引入 在Linux操作系统中、vim编译器下,出现了变量同地址但不同值的现象。 下面以解释该现象产生的原因为主线,在过程中学习Linux操作系统的知识。 运行代码展示…...

【EKS】基于Amazon EKS搭建kubernetes集群

文章目录 前言 | 亚马逊云科技 re:Invent前沿资讯一、介绍篇🎨什么是AWS 云计算什么是Amazon EKS 二、部署篇🔨1、创建集群VPC2、创建集群子网3、创建IGW网关4、创建路由表与子网绑定5、EKS集群创建6、创建kubeconfig配置文件7、添加计算节点组8、查看EK…...

Tomcat安装与启动和配置

目录 Tomcat 简介 Tomcat 安装 Tomcat 启动和配置 文件夹作用 启动,关闭Tomcat; 常见问题 配置 环境变量 IDEA中配置Tomcat Tomcat 简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在…...

ruoyi-vue版本(十八)创建自己的项目,使用若依里面的技术,多数据源的实现

目录 1 创建自己的项目2 连接MySQL数据库(多数据源)2.1 若依实现多数据源2.1.1 主要思想2.2 第三方的依赖的实现1 创建自己的项目 1 创建一个空文件夹 2 idea 里面创建项目...

C++-stack题型->最小栈,栈的压入与弹出,逆波兰表达式

目录 最小栈 栈的压入与弹出 逆波兰表达式 最小栈 155. 最小栈 - 力扣(Leetcode) 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void …...

【计算机网络实验】BGP和OSPF协议仿真实验

实验内容  BGP和OSPF协议仿真实验 实验目的 (1)学习BGP协议的配置方法; (2)验证BGP协议的工作原理; (3)掌握网络自治系统的划分方法; (4)验证…...

提升日期处理效率:day.js 实战经验分享

theme: smartblue 本文简介 点赞 关注 收藏 学会了 本文主要介绍我在工作中使用 day.js 较多的方法。本文并不能代替 day.js 官方文档,日常工作中该查文档的还是要查文档。本文是写给刚接触 day.js 的工友,让这部分工友能更顺利上手 day.js。本文不涉…...

mysql中的count(1)、count(*)、count(id)哪个更快?

今天和大家聊一下mysql中的count()方法 我们日常开发中,经常会用到count()命令,有的人用count(*),有的人用count(1),还有的人用count(id),那么这几种写法都有什么区别呢?哪种方法效率更高呢?今…...

cf1750E Bracket Cost

前言: 好久没训练了,来做道计数题找找感觉。**期末毁我青春 大意: 定义对于一个括号串 s的值,为通过最小次数以下操作使 s 实现括号匹配的操作次数。 选择一个子串,循环右移一位。在任意一个位置插入一个任意括号。 求一个括…...

Vue+springboot医院住院挂号登记收费系统7ui9s

医院信息管理系统的开发过程中,采用B / S架构,主要使用java语言进行开发,结合最新流行的springboot框架。使用Mysql数据库和idea开发环境。该医院信息管理系统包括用户、医生和管理员。其主要功能包括用户管理、医生管理、医生信息管理、预约…...

大前端之Koa2学习

Koa2框架介绍 Koa2是一个基于Node.js的Web框架,它使用了ES6的语法和async/await特性,使得编写异步代码更加简单和优雅。Koa2的核心思想是中间件,它允许开发者将应用程序拆分成小的、可重用的部分,从而使得代码更加模块化和易于维…...

Qml实现Dock浮动、停靠功能

纯Qml实现Dock浮动、停靠功能 效果展示github地址:介绍环境Demo代码参数说明API说明 效果展示 Qml Dock效果演示 github地址: https://github.com/longtwilight/QmlDock 介绍 这是一个使用纯qml实现的Dock组件,它支持停靠、浮动、窗体分离、窗体独立、大小调整等…...

最新版本 Stable Diffusion 开源 AI 绘画工具之微调模型篇

✨ 目录 🎈 模型种类🎈 变分自动编码器 / VAE🎈 美学梯度 / Aesthetic Gradients🎈 大型语言模型的低阶自适应 / LoRA🎈 超网络模型 / Hypernetwork🎈 微调模型 / LyCORIS 🎈 模型种类 当你打开…...

路径规划算法:基于哈里斯鹰优化的路径规划算法- 附代码

路径规划算法:基于哈里斯鹰优化的路径规划算法- 附代码 文章目录 路径规划算法:基于哈里斯鹰优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化…...

Web 应用程序防火墙 (WAF) 相关知识介绍

Web应用程序防火墙 (WAF) 如何工作? Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称:WAF)。利用国际上公认的一种说法:Web应用防火墙是通过执…...

docker快速部署hue+hue集成hive

首先需要安装hive,hive的安装在HIVE的安装与配置_EEEurekaaa!的博客-CSDN博客 安装完成之后,使用脚本命令启动hdfs和hive的相关服务。 一、安装docker # 安装yum-config-manager配置工具 $ yum -y install yum-utils # 设置yum源 $ yum-co…...

基于java SpringBoot和Vue uniapp的校园信息交流小程序

随着信息社会的网络化和计算机科学的广泛普及和迅速普及应用,具有综合智能的我国校园信息教育网络已成为推动中小学科学教育及其实践科学发展的信息技术手段。迅速推进了信息化改革,改善了高校信息交流的网络环境,提高了信息教育平台的管理水…...

数据包伪造替换、会话劫持、https劫持之探索和测试

(一)数据包替换攻击 该攻击过程如下:伪造服务器响应客户端的数据包。监听客户端的数据包,用预先伪造的数据包,伪装成服务器返回的数据发送给客户端。 因为攻击者跟目标在同一个局域网,所以攻击者发送的数…...

正则表达式集合

目录 一、校验数字的表达式 1. 数字 2. n位的数字 3. 至少n位的数字 4. m-n位的数字 5. 零和非零开头的数字 6. 非零开头的最多带两位小数的数字 7. 带1-2位小数的正数或负数 8. 正数、负数、和小数 9. 有两位小数的正实数 10. 有1~3位小数的正实数 11. 非零的正整…...