Code Composer Studio 是一种集成开发环境 (IDE),支持 TI 的微控制器和嵌入式处理器产品系列。Code Composer Studio 包含一整套用于开发和调试嵌入式应用的工具。它包含了用于优化的 C/C++ 编译器、源码编辑器、项目构建环境、调试器、描述器以及多种其他功能。直观的 IDE 提供了单个用户界面,可帮助您完成应用开发流程的每个步骤。熟悉的工具和界面使用户能够比以前更快地入手。Code Composer Studio 将 Eclipse 软件框架的优点和 TI 先进的嵌入式调试功能相结合,为嵌入式开发人员提供了一个引人注目、功能丰富的开发环境。
详细了解特定处理器系列的可用功能:
Code Composer Studio 支持 TI 的广泛的嵌入式处理器产品系列。
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt(组态档是用一种建构软件专用的特殊编程语言写的CMake脚本。内建C语言、C++、Fortran、Java的自动相依性分析功能。)。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。
CMake 可以编译源代码、制作程序库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。CMake 支持 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake 也支持静态与动态程式库的建构。
CMake的所有的语句都写在一个叫:CMakeLists.txt的文件中。当CMakeLists.txt文件确定后,可以用ccmake命令对相关 的变量值进行配置。这个命令必须指向CMakeLists.txt所在的目录。配置完成之后,应用cmake命令生成相应的makefile(在Unix like系统下)或者 project文件(指定用window下的相应编程工具编译时)。
其基本操作流程为:
$> ccmake directory
$> cmake directory
$> make
其中directory为CMakeList.txt所在目录;
CMake的执行就是这么简单,其难点在于如何编写CMakeLists.txt文件,下面结合例子简单介绍CMakeLists.txt的编写,看下面这个CMakeLists.txt
#project name // #表示大写, Cmake的命令全部用大写;
PROJECT(test_math) // 制定生成的工程名
#head file path
INCLUDE_DIRECTORIES( // 指定头文件目录为include
include
)
#source directory
AUX_SOURCE_DIRECTORY(src DIR_SRCS) // 指定源文件目录为src,并将其赋值给环境变量DIR_SRCS
#set environment variable
SET(TEST_MATH // 设定环境变量TEST_MATH的值为环境变量DIR_SRCS的值,此处用于显示
...如何用环境变量对环境变量进行赋值
${DIR_SRCS}
)
#set extern libraries //将数学函数库赋值给环境变量LIBRARIES
SET(LIBRARIES
libm.so
)
#add executable file // 用于指定生成文件,将环境变量TEST_MATH目录下的所有文件编译生
成../bin目录下的可执行文件bin
ADD_EXECUTABLE(../bin/bin ${TEST_MATH})
#add link library // 指定../bin/bin执行时的链接库为环境变量LIBRARIES的值-libm.so
TARGET_LINK_LIBRARIES(../bin/bin ${LIBRARIES})
gmake是GNU Make的缩写。
Linux系统环境下的make就是GNU Make,之所以有gmake,是因为在别的平台上,make一般被占用,GNU make只好叫gmake了。
比如在安装二进制文件进行编译时要使用make命令,但如果在Solaris或其他非GNU系统中运行,必须使用GNU make,而不是使用系统自带的make版本,这时要用gmake代替make进行编译。
GNU gmake在 make 文件中将调用的C编译器名称为 gcc,C++编译器的名称为 g++
make实用程序在make文件中将调用的C编译器名称为cc,C++编译器名称为CC
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
地址解析协议由互联网工程任务组(IETF)在1982年11月发布的RFC 826中描述制定。 [1] 地址解析协议是IPv4中必不可少的协议,而IPv4是使用较为广泛的互联网协议版本(IPv6仍处在部署的初期)。
OSI模型把网络工作分为七层,IP地址在OSI模型的第三层,MAC地址在第二层,彼此不直接打交道。在通过以太网发送IP数据包时,需要先封装第三层(32位IP地址)、第二层(48位MAC地址)的报头,但由于发送时只知道目标IP地址,不知道其MAC地址,又不能跨第二、三层,所以需要使用地址解析协议。使用地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行。
主机A的IP地址为192.168.1.1,MAC地址为0A-11-22-33-44-01;
主机B的IP地址为192.168.1.2,MAC地址为0A-11-22-33-44-02;
当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址,以下为工作流程:
第1步:根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2。然后A主机在自己的本地ARP缓存中检查主机B的匹配MAC地址。
第2步:如果主机A在ARP缓存中没有找到映射,它将询问192.168.1.2的硬件地址,从而将ARP请求帧广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。
第3步:主机B确定ARP请求中的IP地址与自己的IP地址匹配,则将主机A的IP地址和MAC地址映射添加到本地ARP缓存中。
第4步:主机B将包含其MAC地址的ARP回复消息直接发送回主机A。
第5步:当主机A收到从主机B发来的ARP回复消息时,会用主机B的IP和MAC地址映射更新ARP缓存。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。
文件类型:Makefile
TI还在TDA2x片上系统 (SoC)上提供了可用于其嵌入式视觉引擎(EVE)和数字信号处理器 (DSP) 的程序库。这些程序库包含了200多种用于EVE和DSP库的优化功能,从而为客户及第三方提供了旨在实现跨越式开发和加快产品上市进程的构件。EVE和DSP库可用于中低级和高级视觉处理。
整合了创新Vision AccelerationPac的TDA2x在低功耗封装中将高性能、视觉分析、视频、图形以及通用处理内核进行完美结合,可实现从入门级到高性能的广泛 ADAS 应用。此外,TI 独特的 Vision AccelerationPac 能够以相同的功率预算实现超过 8 倍的计算性能,从而在更低成本下充分满足高级视觉分析的需求。Vision AccelerationPac 建立在 TI 丰富的算法知识基础之上,并专为满足 ADAS 市场的动态需求而设计,其包含一个或多个嵌入式视觉引擎 (EVE),可提供目前市场上其他同类产品所无法提供的特制ADAS加速器。
稳健的第三方生态系统
TI SoC和软件产品库的壮大促使越来越多来自世界各地的ADAS第三方供应商在 TI 宽广的产品线上提供算法、服务和集成支持,从而使客户能够缩减内部投资和开发时间,并加速产品上市进程。该第三方生态系统中的很多厂商都使用了TI的ADAS处理器,并对最新TDA2x产品的发布表示极大的欢迎。ADASENS Automotive GmbH的研发总监Michael Stoecker说:“TI的EVE为诸多 ADAS机器视觉算法提供了令人印象深刻的性能,例如:根据运动来识别交通信号、车辆或行人以及建筑物。”
IAV Automotive Engineering的资深项目经理Rene Rollig说:“TDA2x SoC与SDK的组合使得我们能够开发下一代的 ADAS 系统,从而及时满足基于摄像头的视觉系统不断攀升的特性与性能要求。TI的生态系统让我们可以高效地实现算法和应用,这在以前是做不到的。新型EVE是一款功能强大的伙伴加速器,其运作既可与独立于 DSP,也可与 DSP并行。它在我们的目标应用中展现了其全面的性能,尤其是针对基于帧的图像处理。开发工具、库和文档都是最新的,由于其品质卓越,所以我们的工程师很喜欢使用这些工具。”
TCS的工程与工业服务全球总监Regu Ayyaswamy说:“凭借深厚的技术与汽车工业专长,Tata Consultancy Services (TCS) 公司在TI的ADAS SoC(包括最新推出的TDA2x)上为全球汽车OEM厂商及汽车零部件一级供应商提供了优化、集成服务和算法。在ADAS解决方案的开发方面,TI是我们的战略合作伙伴,我们期待不断地开发出市场最需要的解决方案。”
Supercomputing Systems AG的嵌入式与汽车产品部主管Felix Eberli说:“ 每一代TI ADAS SoC性能的大幅跃升都让我感到兴奋。已经证明:这对于我们针对不同的汽车零部件一级供应商和OEM厂商而移植到TI SoC的大量ADAS算法是有益处的。一个关键的差异化因素是具有高吞吐量和零开销背景数据传输特性的节能型 EVE 内核。”
CSSP Inc. 总裁Chao-Jung Chen博士说:“TI一直在为ADAS领域提供业界最佳的SoC,因而使得我们的团队能够在TI的SoC平台上开发出生产质量的ADAS算法以提供给TI的客户,如车道偏离告警、前部碰撞告警和盲点探测。今后,我们将致力于在TI的下一代TDA2x平台上提供我们的最新算法,以利用单颗芯片实现多重功能。”
D3 Engineering 的总裁兼首席技术官 (CTO) Scott Reardon 说:“TI TDA2x中的EVE以低功耗为ADAS应用中的视觉和视频分析算法提供了无与伦比的计算性能。EVE软件工具的集成连同 Code Composer Studio IDE一起简化了我们的工作流程,而其提供的范例则有助我们很快地在嵌入式ADAS应用中运用EVE所具备的强大功能。”
TDA2x正在按照ISO 26262功能安全性标准的相关要求开发。TI TDA2x及相关的视觉SDK和库面向的是高产量的汽车制造商。
TI此次推出的ADAS SoC分别有TDA2xA、TDA2xV和TDA2xF 3款芯片,分别对应前置摄像机、环绕视图和传感器融合应用,以让厂商能够更有针对性的选择芯片,它们的高性能、高可靠、可扩展性、更低功耗和高集成度让汽车厂商无后顾之忧。说了这么多,现在开始揭秘TDA2x的内部结构,如图1所示。其属于多核异构的SoC,有两个C66x DSP 内核、多达4个视觉加速器内核AccelerationPac(每核10.4 GMAC)、两个ARM Cortex-A15内核、两个双ARM Cortex-M4内核、内部存储器、6 个摄像机输入和多个显示输出,采用28 nm工艺技术,功率范围约为2 ~ 5 W。
实现众多汽车视觉功能,无疑需要很多可靠、快速的算法,其中大部分都是矢量运算,计算量很大。视觉AccelerationPac可以说是TDA2x实现众多汽车视觉性能的杀手锏。其有多个嵌入式视觉引擎(EVE),通过在中低级内核上运行对DSP实现有力补充。在相同功率预算下,每个EVE的计算性能是Cortex-A15的8倍以上。EVE的内部主要包括优化的矢量协处理器和32位可编程RISC内核。蒋宏先生把EVE概括为:“是TI DSP的精髓,是量化的提升。”
提到Cortex-A15时,蒋宏先生表示:“汽车中,汽车导航采用Android系统与ADAS融合;在ADAS内部,Cortex核采用Linux操作系统,DSP采用BIOS操作系统,这些都就需要虚拟化,Cortex-A15可以实现虚拟化,而Cortex-A9不能。此外,很多传感器和子系统需要用以太网传输数据,这牵涉到很多协议,Cortex-A15可以轻松应对。”
TDA2x系列在研发时已经和一些国际知名汽车厂商合作,TI的芯片作为它们项目中的一部分,因此TDA2x SoC的一些性能是这些厂商的需求。现在把TDA2x SoC引入中国,可以帮助中国本土汽车厂商缩短与国际知名厂商的差距(如帮助驾驶员判断的应用)。蒋宏先生强调:“TI此次推出ADAS SoC的目标十分明确,让中国制造的普通车也能有顶级车的ADAS体验。TDA2x的上一代产品已经在比亚迪汽车中应用。值得一提的是,为了帮助中国汽车厂商降低开发难度,让产品早日上市,TI首次在中国设立了专门支持TDA2x产品线的应用工程师团队,他们更偏向于研发,专注做参考设计,在这个方面,相信很多独立的设计公司也大有可为。”
蒋宏先生最后透露:“未来,TI的一个重要方向就是汽车电子,而汽车电子的重点就是ADAS。现在,汽车的控制权在驾驶员手上,属于被动安全,下一步将是主动安全技术,在一些情况下,汽车可以获得控制权,最终我们期待实现无人驾驶,当然这对汽车本身的性能要求极高,这也是ADAS能被行业接受的公司并不多的原因。”
Protobuf是一种平台无关、语言无关、可扩展且轻便高效的序列化数据结构的协议,可以用于网络通信和数据存储。
protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/addressbook.proto
-I 编译源文件的目录
--java_out 编译目录文件
通过这个命令会自动编译出java代码,目前protobuf支持以下语言
Language | Source |
---|---|
C++ | src |
Java | java |
Python | python |
Objective-C | objectivec |
C# | csharp |
JavaNano | javanano |
JavaScript | js |
Ruby | ruby |
Go | golang/protobuf |
PHP | php |
Dart | dart-lang/protobuf |
Debug 和 Release 并没有本质的区别,他们只是VC预定义提供的两组编译选项的集合,编译器只是按照预定的选项行动。如果我们愿意,我们完全可以把Debug和Release的行为完全颠倒过来。当然也可以提供其他的模式,例如自己定义一组编译选项,然后命名为MY_ABC等。习惯上,我们仍然更愿意使用VC已经定义好的名称。
总的来说,Debug和Release只是两个编译的选项而已,是编译器所要进行工作的一系列指令,它们只是编译指令的集合的名称。
Debug版本包括调试信息,所以要比Release版本大很多(可能大数百K至数M)。至于是否需要DLL支持,主要看你采用的编译选项。如果是基于ATL的,则Debug和Release版本对DLL的要求差不多。如果采用的编译选项为使用MFC动态库,则需要MFC42D.DLL等库支持,而Release版本需要MFC42.DLL支持。Release不对源代码进行调试,不考虑MFC的诊断宏,使用的是MFC Release库,编译时对应用程序的速度进行优化,而Debug则正好相反,它允许对源代码进行调试,可以定义和使用MFC的 诊断宏,采用MFC Debug库,对速度没有优化。
总结:Debug允许对源码进行调试,而Release则不对源码进行调试
二者的详细区分:
Debug:Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,以为开发人员提供强大的应用程序调试能力。
Release:Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。
evaluation module.
IPU:
Image Prossing Unite.
ISA:
Industry Standard Architecture. ISA总线
GPU:
图形处理器(英语:Graphics Processing Unit,缩写:GPU)
IPU: Image Processing Unit // 跟Camera,Display, 图像相关
VPU: Video Processing Unit // 跟视频播放相关,主要包括HW codec和视频后处理等
GPU:Graphics Processing Unit // 跟2D(OpenVG)和3D(OpenGL)相关
Enhanced Direct Memory Access Controller
SDMA:
System Direct Memory Access Controller
VLIW DSP:
very long instruction word 超长指令集
(Microprocessor Unit) 微处理器
微处理器的功能结构主要包括:运算器、控制器、寄存器三部分:
运算器的主要功能就是进行算术运算和逻辑运算。
控制器是整个微机系统的指挥中心,其主要作用是控制程序的执行。包括对指令进行译码、寄存,并按指令要求完成所规定的操作,即指令控制、时序控制和操作控制。
寄存器用来存放操作数、中间数据及结果数据。
DSP:
DSP(digital singnal processor)是一种独特的微处理器,有自己的完整指令系统,是以数字信号来处理大量信息的器件。一个数字信号处理器在一块不大的芯片内包括有控制单元、运算单元、各种寄存器以及一定数量的存储单元等等,在其外围还可以连接若干存储器,并可以与一定数量的外部设备互相通信,有软、硬件的全面功能,本身就是一个微型计算机。DSP采用的是哈佛设计,即数据总线和地址总线分开,使程序和数据分别存储在两个分开的空间,允许取指令和执行指令完全重叠。也就是说在执行上一条指令的同时就可取出下一条指令,并进行译码,这大大的提高了微处理器的速度。另外还允许在程序空间和数据空间之间进行传输,因为增加了器件的灵活性。
DSP芯片,由于它运算能力很强,速度很快,体积很小,而且采用软件编程具有高度的灵活性,因此为从事各种复杂的应用提供了一条有效途径。其主要应用是实时快速地实现各种数字信号处理算法。根据数字信号处理的要求,DSP芯片一般具有如下主要特点:
(1)在一个指令周期内可完成一次乘法和一次加法;
(2)程序和数据空间分开,可以同时访问指令和数据;
(3)片内具有快速RAM,通常可通过独立的数据总线在两块中同时访问;
(4)具有低开销或无开销循环及跳转的硬件支持;
(5)快速的中断处理和硬件I/O支持;
(6)具有在单周期内操作的多个硬件地址产生器;
(7)可以并行执行多个操作;
(8)支持流水线操作,使取指、译码和执行等操作可以重叠执行。
MMU:
Memory Management Unit 内存管理单元