当前位置:首页 » 编程软件 » ceva的编译器

ceva的编译器

发布时间: 2022-07-15 10:21:18

⑴ 如何利用C和汇编语言混合编程实现DSP软件设计

其中绝大部分功能不属于标准C语言,因此被称为C语言扩展。下面列出的是其中有益于DSP编程的一些功能。 内联汇编(inline assembly):该功能可以帮助编程人员将汇编指令插入C代码。 硬件寄存器绑定C变量:该功能经常与汇编指令内联功能结合在一起,帮助内联汇编代码访问C语言级的变量(见图3)。图3:结合内联汇编和硬件寄存器绑定功能的代码示例。 存储区属性:该功能允许编程人员将上述变量和函数分配到独特的用户定义存储区,可以让编程人员将C语言级单元分配到实际的存储器位置,这对DSP应用来说非常关键。 用户定义的调用约定:在某些情况下,汇编函数可以通过用户定义的调用约定取得更好的优化效果。 编译器内部函数(Compiler intrinsics):是指能够使用专门的宏或函数调用触发的内建编译器功能总称。没有内部函数支持的编译器必须调用用户定义的函数,这样做可能会令用户定义函数可能会在一个环路里产生函数调用和返回(见图4),从而产生巨大的开销。图4:ETSI的mult_r(乘法和取整)基本操作的C代码实现(左)和对应的由CEVA-TeakLite-III编译器生成的汇编代码(右)。 汇编内部函数:是将汇编代码内联进C代码的一种先进方法,下文将有详细介绍。把汇编指令当作C语句一样来编写内联汇编功能具有显着的缺点。它会破坏各种编译器优化操作,因为编译器不了解内联代码的内容,会使用最坏假设;以及它可能迫使编程人员处理底层问题,如寄存器分配和指令调度。汇编内部函数可以帮助编程人员实现内联汇编代码,并且不存在这些缺点。从编程人员的角度看,汇编内部函数就像是C语言宏或函数。它们接收C语言变量,返回C语言输出结果,同时表现为单个汇编指令。由于涉及该功能的所有代码都在C语言等级,因此编程人员不必担心寄存器分配、指令调度和其它底层问题。汇编内部函数不仅不会妨碍编译器优化操作,还会参与优化过程,就像它们是编译器正常产生的汇编指令一样。这些特征使得汇编内部函数的功能非常强大。利用汇编内部函数,编程人员可以从编译器不可能产生的独特汇编指令中受益。例如,CEVA-X1641的bitrev(位反向)指令就是为FFT等算法定制的。由于编译器不太可能把一个程序看作一个FFT并使用bitrev指令,因此编程人员可以完全把bitrev汇编内部功能嵌入到C代码中。结合对应用的透彻了解,编程人员还可以使用C应用程序的性能决定段里的精确序列汇编内部函数,从而能够确保编译器生成的代码效率就像手工编写的一样高。图5是CEVA-X1641编译器与汇编内部函数一起使用的例子。汇编内部函数还受益于由CEVA-X1641编译器处理的问题所决定的机器,如寄存器分配、指令调度和硬件单元分配。图5:CEVA-X1641编译器支持的汇编内部函数的使用。 调试混合代码的应用程序汇编代码的调试需要对延迟和存储器对齐限制等架构和机器级问题有深入的了解。只是简单地把C代码和汇编代码放在一起会使事情更麻烦,因为编程人员现在还必须调试C代码和汇编代码之间的连接。调试混合代码应用程序的第一步就是分隔问题。假设保持汇编代码的C语言实现不变以及C语言实现方案工作正常,那么将汇编函数转换成C语言实现并重新测试应用程序就相对比较容易。为了迅速检测出问题,编程人员可以在每一步把受怀疑函数的一半转换为相应的C语言实现方案。一旦有问题的汇编函数被确定,它就应该同时作为独立的汇编问题和C与汇编的连接问题加以分析。调试独立的汇编问题对汇编编程人员来说十分简单明了,但C与汇编的连接问题就有点麻烦。在考虑汇编函数本身时,C与汇编的连接问题是不可见的,这与独立的汇编问题有所不同。为了找出这些问题,编程人员必须检查编译器的约定,比如调用约定和寄存器使用约定。编程人员还必须检查编译器假设,比如汇编指令的行踪。为了节省调试时间,编程人员应该在第一次实现汇编函数时验证是否遵循所有的编译器约定和假设。

⑵ CEVA法国诗华是家什么样的公司

说到ceva,很多人想到的是一家国际物流公司。但是,如果你对养殖行业有一定的了解,就不会想到是国际物流公司了,CEVA,中文名:法国诗华,在养殖圈子里真的很有名,属于全球动物保健品行业前十大品牌之一,主要生产家禽、生猪、宠物等方面的疫苗及化药制品

⑶ 如何将汇编语言与C语言整合至DSP

随着DSP处理器性能的提升以及编译器最佳化技术的进步,曾经红极一时、仅用汇编语言编写DSP应用程序的作法已逐渐被淘汰。今天,几乎每个DSP应用程序都使用C语言程序代码和汇编程序码混合的方式。对于一些性能需求极高的关键功能,DSP工程师会继续使用高度最佳化的汇编程序码;而一些次要的功能现在也使用C语言编写,使程序代码更容易维护和移植。对于C语言和汇编程序码的结合,每位DSP工程师都需要掌握特殊的工具和方法。 众所皆知,汇编语言编码具有更高的性能优势,而用C语言编码则较容易且速度也更快。为了解其中原因,以下我们进一步比较汇编语言编码与C语言编码的优缺点: 汇编语言编码的优点: 汇编语言编码可以充分利用处理器的独特指令以及各种专门的硬件资源。而C语言程序代码是通用型程序代码,必须支持各种硬件平台,因此很难支持特殊平台程序代码。 汇编程序设计人员通常对应用程序非常熟悉,可以作出编译器无法作出的假设。 汇编程序设计人员可以发挥人类的创造性;而再先进的编译器也只是一个自动化的程序。 汇编语言编码的缺点: 汇编程序设计人员必须解决耗时的机器级问题,如缓存器分配和指令排程。若使用C语言程序代码,这些问题可以由编译器解决。 使用汇编语言编码的程序设计人员必须了解DSP架构及其指令集的专业知识;而C语言编码只需要掌握相当普及的C语言知识。 若使用汇编语言,将应用程序从一个平台移植到另一个平台非常困难也相当耗时;而C语言应用程序的移植相对而言非常容易。 图1显示了如何利用专用硬件机制来获得高度最佳化的汇编程序码。左边的C语言编码利用模块算法设计出一个循环缓冲区P1;右边高度最佳化的汇编程序码中,等效的缓冲区是利用CEVA-TeakLite-III DSP核心的模块运算机制(Molo Mechanism)设计产生的。只要缓冲区指标(本例中的r0)有更新,模块运算机制便会自动执行模块运算。这种运算与指针更新在同一个周期发生,因此汇编程序码比C语言程序代码更加高效,可为模块运算产生独立的指令。 点击看原图图1:右边的CEVA-TeakLite-III汇编程序码可以建置成左边的C语言程序代码。 为DSP应用选择C/汇编程序码 混合使用的问题就在于该如何划分C语言程序代码和汇编程序码的界限,而答案取决于剖析器提供的性能分析结果。然而在使用剖析器之前,DSP工程师需要为应用程序定义清晰的对象,一些典型的对象包括循环数、程序代码大小和数据大小。一旦这些对象确定后,所有应用程序都应该先以C语言编写和制作,随后使用剖析器来分析性能。 在一些极端情况下,如控制应用,用C语言层级的编码就足够了;但大多数情况下,原始C语言层级应用程序版本不会遵从一个或多个对象,这也意味着需要使用一些汇编程序码来完成。在求助于汇编语言编码之前,C语言编码可提供许多方法来提高性能,但这些方法不属于本文讨论的范畴。假设所有C语言级的方法全用完了,并且准备使用汇编语言编码,这时强烈建议将原始C语言程序代码保存起来。这样不仅方便除错,而且一旦条件许可(比如转移到更强大的平台)还可以回复原始的C语言。 程序代码中的汇编语言部份应尽可能维持在最少,这样便能分析从剖析器得到的性能结果,并定义应用程序中的关键函数。关键函数会占用大部份执行时间,必须用汇编语言重写才能满足性能对象。当两到三个最关键的函数重写后,需要重新进行性能测量,若应用程序仍然不能满足对象需求,那么必须使用汇编语言定义并重写额外的关键函数,这个过程需要不断地重复直到满足性能对象需求为止。 汇编语言设计师的编译器考虑 在编写会与C语言程序代码结合的汇编程序码时,汇编程序设计人员必须了解编译器的惯例和假设。其中有个重要的编译器惯例是函数呼叫惯例,也称为函数参数传递惯例。这个惯例描述了编译器如何在一个函数呼叫另一个函数时传递参数。为了使汇编语言函数能被C语言函数成功呼叫;反之亦然;汇编语言函数必须截取参数,然后将参数发送到由函数呼叫惯例定义的硬件资源上,通常为缓存器或堆栈内存。 汇编程序设计人员还必须了解编译器的缓存器使用惯例。这些惯例将硬件缓存器分成被呼叫者保存(callee-saved;或呼叫者使用,caller-used);以及被呼叫者使用(callee-used;或呼叫者保存,caller-saved)缓存器。编译器假设被呼叫者保存缓存器在函数呼叫过程中保持不变的值,若汇编程序设计人员希望使用这种缓存器,他们必须先将缓存器的值备份,然后在返回到C语言程序代码之前恢复这些缓存器的内容;相反的,被呼叫者使用缓存器被认为在函式呼叫过程中不会保持一定的值。这意味着汇编程序设计人员使用这些缓存器之前无需进行备份,不过他们必须记住,当汇编语言函数呼叫C语言函数时,被呼叫者可以对这些缓存器进行覆写。 图2为一个从CEVA-X1641 DSP核心FFT实作中截取的汇编程序码案例。其中以黄色标示的add指令遵循CEVA-X1641编译器的呼叫惯例,在r0地址缓存器中传递指针参数。标为蓝色的pushd指令用于备份,随后函数会使用的被呼叫者保存缓存器。

⑷ 如何将汇编语言与C语言整合至DSP

随着DSP处理器性能的提升以及编译器最佳化技术的进步,曾经红极一时、仅用汇编语言编写DSP应用程序的作法已逐渐被淘汰。今天,几乎每个DSP应用程序都使用C语言程序代码和汇编程序码混合的方式。对于一些性能需求极高的关键功能,DSP工程师会继续使用高度最佳化的汇编程序码;而一些次要的功能现在也使用C语言编写,使程序代码更容易维护和移植。对于C语言和汇编程序码的结合,每位DSP工程师都需要掌握特殊的工具和方法。 众所皆知,汇编语言编码具有更高的性能优势,而用C语言编码则较容易且速度也更快。为了解其中原因,以下我们进一步比较汇编语言编码与C语言编码的优缺点: 汇编语言编码的优点: 汇编语言编码可以充分利用处理器的独特指令以及各种专门的硬件资源。而C语言程序代码是通用型程序代码,必须支持各种硬件平台,因此很难支持特殊平台程序代码。 汇编程序设计人员通常对应用程序非常熟悉,可以作出编译器无法作出的假设。 汇编程序设计人员可以发挥人类的创造性;而再先进的编译器也只是一个自动化的程序。 汇编语言编码的缺点: 汇编程序设计人员必须解决耗时的机器级问题,如缓存器分配和指令排程。若使用C语言程序代码,这些问题可以由编译器解决。 使用汇编语言编码的程序设计人员必须了解DSP架构及其指令集的专业知识;而C语言编码只需要掌握相当普及的C语言知识。 若使用汇编语言,将应用程序从一个平台移植到另一个平台非常困难也相当耗时;而C语言应用程序的移植相对而言非常容易。 图1显示了如何利用专用硬件机制来获得高度最佳化的汇编程序码。左边的C语言编码利用模块算法设计出一个循环缓冲区P1;右边高度最佳化的汇编程序码中,等效的缓冲区是利用CEVA-TeakLite-III DSP核心的模块运算机制(Molo Mechanism)设计产生的。只要缓冲区指标(本例中的r0)有更新,模块运算机制便会自动执行模块运算。这种运算与指针更新在同一个周期发生,因此汇编程序码比C语言程序代码更加高效,可为模块运算产生独立的指令。 点击看原图图1:右边的CEVA-TeakLite-III汇编程序码可以建置成左边的C语言程序代码。 为DSP应用选择C/汇编程序码 混合使用的问题就在于该如何划分C语言程序代码和汇编程序码的界限,而答案取决于剖析器提供的性能分析结果。然而在使用剖析器之前,DSP工程师需要为应用程序定义清晰的对象,一些典型的对象包括循环数、程序代码大小和数据大小。一旦这些对象确定后,所有应用程序都应该先以C语言编写和制作,随后使用剖析器来分析性能。 在一些极端情况下,如控制应用,用C语言层级的编码就足够了;但大多数情况下,原始C语言层级应用程序版本不会遵从一个或多个对象,这也意味着需要使用一些汇编程序码来完成。在求助于汇编语言编码之前,C语言编码可提供许多方法来提高性能,但这些方法不属于本文讨论的范畴。假设所有C语言级的方法全用完了,并且准备使用汇编语言编码,这时强烈建议将原始C语言程序代码保存起来。这样不仅方便除错,而且一旦条件许可(比如转移到更强大的平台)还可以回复原始的C语言。 程序代码中的汇编语言部份应尽可能维持在最少,这样便能分析从剖析器得到的性能结果,并定义应用程序中的关键函数。关键函数会占用大部份执行时间,必须用汇编语言重写才能满足性能对象。当两到三个最关键的函数重写后,需要重新进行性能测量,若应用程序仍然不能满足对象需求,那么必须使用汇编语言定义并重写额外的关键函数,这个过程需要不断地重复直到满足性能对象需求为止。 汇编语言设计师的编译器考虑 在编写会与C语言程序代码结合的汇编程序码时,汇编程序设计人员必须了解编译器的惯例和假设。其中有个重要的编译器惯例是函数呼叫惯例,也称为函数参数传递惯例。这个惯例描述了编译器如何在一个函数呼叫另一个函数时传递参数。为了使汇编语言函数能被C语言函数成功呼叫;反之亦然;汇编语言函数必须截取参数,然后将参数发送到由函数呼叫惯例定义的硬件资源上,通常为缓存器或堆栈内存。 汇编程序设计人员还必须了解编译器的缓存器使用惯例。这些惯例将硬件缓存器分成被呼叫者保存(callee-saved;或呼叫者使用,caller-used);以及被呼叫者使用(callee-used;或呼叫者保存,caller-saved)缓存器。编译器假设被呼叫者保存缓存器在函数呼叫过程中保持不变的值,若汇编程序设计人员希望使用这种缓存器,他们必须先将缓存器的值备份,然后在返回到C语言程序代码之前恢复这些缓存器的内容;相反的,被呼叫者使用缓存器被认为在函式呼叫过程中不会保持一定的值。这意味着汇编程序设计人员使用这些缓存器之前无需进行备份,不过他们必须记住,当汇编语言函数呼叫C语言函数时,被呼叫者可以对这些缓存器进行覆写。 图2为一个从CEVA-X1641 DSP核心FFT实作中截取的汇编程序码案例。其中以黄色标示的add指令遵循CEVA-X1641编译器的呼叫惯例,在r0地址缓存器中传递指针参数。标为蓝色的pushd指令用于备份,随后函数会使用的被呼叫者保存缓存器。

⑸ 三角形 ceva线 什么是三角形的ceva线

ceva就是着名的塞瓦.ceva线就是塞瓦线
见图,点击放大:
BD比DC=三角BAD:三角CAD=三角BOD:三角COD=三角ABD:三角ACO
则:线段:AD.BE.CF称塞瓦线,点O为塞瓦点

⑹ 已知AD是三角形ABC 的角平分线,求证AD2=AB*AC-BD*DC. 不要用三角函数,可以用Ceva定理或Menelaus定理

延长AD交△ABC的外接圆于E,连接EC,在△ABD和△AEC中,∠ABD=∠AEC,∠BAD=∠EAC,所以△ABD∽△AEC,AB/AE=AD/AC,或AE*AD=AB*AC;其中AE*AD=(AD+DE)AD
=AD²+DE*AD,而在外接圆中DE*AD=BD*DC,于是AD²+BD*DC=AB*AC,就是
AD²=AB*AC-BD*DC。

⑺ 求DSP的C6600的汇编, 改变成汇编

随着DSP处理器性能的提升以及编译器最佳化技术的进步,曾经红极一时、仅用汇编语言编写DSP应用程序的作法已逐渐被淘汰。今天,几乎每个DSP应用程序都使用C语言程序代码和汇编程序码混合的方式。对于一些性能需求极高的关键功能,DSP工程师会继续使用高度最佳化的汇编程序码;而一些次要的功能现在也使用C语言编写,使程序代码更容易维护和移植。对于C语言和汇编程序码的结合,每位DSP工程师都需要掌握特殊的工具和方法。众所皆知,汇编语言编码具有更高的性能优势,而用C语言编码则较容易且速度也更快。为了解其中原因,以下我们进一步比较汇编语言编码与C语言编码的优缺点:汇编语言编码的优点:汇编语言编码可以充分利用处理器的独特指令以及各种专门的硬件资源。而C语言程序代码是通用型程序代码,必须支持各种硬件平台,因此很难支持特殊平台程序代码。汇编程序设计人员通常对应用程序非常熟悉,可以作出编译器无法作出的假设。汇编程序设计人员可以发挥人类的创造性;而再先进的编译器也只是一个自动化的程序。汇编语言编码的缺点:汇编程序设计人员必须解决耗时的机器级问题,如缓存器分配和指令排程。若使用C语言程序代码,这些问题可以由编译器解决。使用汇编语言编码的程序设计人员必须了解DSP架构及其指令集的专业知识;而C语言编码只需要掌握相当普及的C语言知识。若使用汇编语言,将应用程序从一个平台移植到另一个平台非常困难也相当耗时;而C语言应用程序的移植相对而言非常容易。图1显示了如何利用专用硬件机制来获得高度最佳化的汇编程序码。左边的C语言编码利用模块算法设计出一个循环缓冲区P1;右边高度最佳化的汇编程序码中,等效的缓冲区是利用CEVA-TeakLite-IIIDSP核心的模块运算机制(MoloMechanism)设计产生的。只要缓冲区指标(本例中的r0)有更新,模块运算机制便会自动执行模块运算。这种运算与指针更新在同一个周期发生,因此汇编程序码比C语言程序代码更加高效,可为模块运算产生独立的指令。点击看原图图1:右边的CEVA-TeakLite-III汇编程序码可以建置成左边的C语言程序代码。为DSP应用选择C/汇编程序码混合使用的问题就在于该如何划分C语言程序代码和汇编程序码的界限,而答案取决于剖析器提供的性能分析结果。然而在使用剖析器之前,DSP工程师需要为应用程序定义清晰的对象,一些典型的对象包括循环数、程序代码大小和数据大小。一旦这些对象确定后,所有应用程序都应该先以C语言编写和制作,随后使用剖析器来分析性能。在一些极端情况下,如控制应用,用C语言层级的编码就足够了;但大多数情况下,原始C语言层级应用程序版本不会遵从一个或多个对象,这也意味着需要使用一些汇编程序码来完成。在求助于汇编语言编码之前,C语言编码可提供许多方法来提高性能,但这些方法不属于本文讨论的范畴。假设所有C语言级的方法全用完了,并且准备使用汇编语言编码,这时强烈建议将原始C语言程序代码保存起来。这样不仅方便除错,而且一旦条件许可(比如转移到更强大的平台)还可以回复原始的C语言。程序代码中的汇编语言部份应尽可能维持在最少,这样便能分析从剖析器得到的性能结果,并定义应用程序中的关键函数。关键函数会占用大部份执行时间,必须用汇编语言重写才能满足性能对象。当两到三个最关键的函数重写后,需要重新进行性能测量,若应用程序仍然不能满足对象需求,那么必须使用汇编语言定义并重写额外的关键函数,这个过程需要不断地重复直到满足性能对象需求为止。汇编语言设计师的编译器考虑在编写会与C语言程序代码结合的汇编程序码时,汇编程序设计人员必须了解编译器的惯例和假设。其中有个重要的编译器惯例是函数呼叫惯例,也称为函数参数传递惯例。这个惯例描述了编译器如何在一个函数呼叫另一个函数时传递参数。为了使汇编语言函数能被C语言函数成功呼叫;反之亦然;汇编语言函数必须截取参数,然后将参数发送到由函数呼叫惯例定义的硬件资源上,通常为缓存器或堆栈内存。汇编程序设计人员还必须了解编译器的缓存器使用惯例。这些惯例将硬件缓存器分成被呼叫者保存(callee-saved;或呼叫者使用,caller-used);以及被呼叫者使用(callee-used;或呼叫者保存,caller-saved)缓存器。编译器假设被呼叫者保存缓存器在函数呼叫过程中保持不变的值,若汇编程序设计人员希望使用这种缓存器,他们必须先将缓存器的值备份,然后在返回到C语言程序代码之前恢复这些缓存器的内容;相反的,被呼叫者使用缓存器被认为在函式呼叫过程中不会保持一定的值。这意味着汇编程序设计人员使用这些缓存器之前无需进行备份,不过他们必须记住,当汇编语言函数呼叫C语言函数时,被呼叫者可以对这些缓存器进行覆写。图2为一个从CEVA-X1641DSP核心FFT实作中截取的汇编程序码案例。其中以黄色标示的add指令遵循CEVA-X1641编译器的呼叫惯例,在r0地址缓存器中传递指针参数。标为蓝色的pushd指令用于备份,随后函数会使用的被呼叫者保存缓存器。

热点内容
androidubuntu 发布:2024-09-17 03:50:27 浏览:701
识梦源码 发布:2024-09-17 03:50:18 浏览:26
诺基亚密码忘了打什么电话 发布:2024-09-17 03:27:09 浏览:555
树深度优先算法 发布:2024-09-17 03:26:58 浏览:472
跳转页源码 发布:2024-09-17 03:13:05 浏览:543
html文件上传表单 发布:2024-09-17 03:08:02 浏览:785
聊天软件编程 发布:2024-09-17 03:00:07 浏览:726
linuxoracle安装路径 发布:2024-09-17 01:57:29 浏览:688
两个安卓手机照片怎么同步 发布:2024-09-17 01:51:53 浏览:207
cf编译后没有黑框跳出来 发布:2024-09-17 01:46:54 浏览:249