草庐IT

EMBEDDED

全部标签

c++ - 注册为模板参数

我正在寻找一种使用gcc4.8.4将嵌入式设备寄存器传递给C++模板的方法。在描述嵌入式设备的数据表中,寄存器的地址通常作为原始内存位置给出(例如0x40008000)。当我测试软件时,我想使用静态整数作为寄存器来查看寄存器值是否设置正确。所以基本上一些设备外围设备的包装器归结为一个类,它的寄存器地址作为模板参数给出:templatestructperipheral{};测试工作正常:std::uint32_treg;peripheralmocked;但是当我想用给定地址的固定数据表实例化模板时:peripheral(0x40008000)>mocked;gcc提示:无法将模板参数'1

c++ - 如何使用 DSP 加速 OMAP 上的代码?

我正在为OMAP3430开发视频编解码器。我已经有用C++编写的代码,我尝试修改/移植它的某些部分以利用DSP(我拥有的SDK(OMAPZOOM3430SDK)有一个额外的DSP)。我尝试移植一个小的for循环,该循环在非常少量的数据(~250字节)上运行,但在不同的数据上运行了大约200万次。但是CPU和DSP之间的通信带来的过载远远超过yield(如果我有的话)。我认为此任务很像为普通计算机中的GPU优化代码。我的问题是移植什么样的部分会有好处?GPU程序员如何处理此类任务?编辑:GPP应用程序分配一个大小为0x1000字节的缓冲区。GPP应用程序调用DSPProcessor_Re

c++ - 与 at() 或索引相比,为什么使用 C++ 迭代器会显着增加代码大小?

我一直在考虑在嵌入式系统(16KBSRAM和64KB闪存,CortexM4)上使用更新的C++语言功能,例如迭代器,但遇到了令人惊讶的障碍。为什么迭代器如此庞大?我的印象是它们基本上是一些指针运算或索引。STL是否引入了一些意外代码?这些是在Windows上使用KinetisDesignStudio和来自here的gcc-arm-none-eabi-4_9工具链使用以下标志。arm-none-eabi-g++-mcpu=cortex-m4-mthumb-mfloat-abi=hard-mfpu=fpv4-sp-d16-Os-fmessage-length=0-fsigned-char-

c++ - 从只读内存中读取结构

我正在开发一个嵌入式系统,其中一些校准数据存储在闪存中。校准数据存储在一个结构中,该结构位于链接器知道要放置在闪存中的特殊部分中:structdata_block{calibration_datamData;uint16_tmCheckSum;};//Definetocompilethefixedflashlocationforimagedataconstdata_block__attribute__((section(".caldata")))gCalibrationData{};其中calibration_data是另一个包含实际值的POD结构。问题是,如果我现在简单地写下以下内容

c++ - 从 Atmel Studio 6 运行单元测试

我目前正在AtmelStudio6中开发一个嵌入式C++项目。这个项目有相当重要的嵌入式部分和重要的业务逻辑部分。理想情况下,我想为业务逻辑代码运行一些单元测试。能够方便地构建然后运行这些测试将使单元测试更有可能被使用。如果我尝试使用默认的avr-gcc编译器使用Boost单元测试进行编译,我会收到错误消息,因为无法找到各种头文件。我知道这些header没有为我使用的AVR芯片组实现,因为在这种情况下它们太贵了。然而,这些header仅用于对非嵌入式部分进行单元测试,因此已放置在它们自己的专用单元测试项目中。我是否需要设置不同的编译器来编译单元测试?是否可以使用不同的编译器工具链将单元

const 类实例的 C++ 内存地址

我在带有-O2的CORTEX-M4上使用GCC6.3.1forARM。如果我有一个像这样的简单类实例:classTest{public:voidPrint(void)const{printf("Test");}};conststaticTesttest;在某个地方我引用了那个对象的地址,比如:printf("Address:%X",&test);然后我可以在映射文件中看到编译器为.bss段中的该地址保留了一个字节:.bss._ZL4test0x200053080x1保留一个字节是合乎逻辑的,因为每个被寻址的对象都必须有一个地址。另一方面,我假设对于像这样简单的事情,编译器会在.text

c++ - 主要针对 C++ 的持续构建基础架构建议;格林希尔诚信

我需要您为大型(1-2MLOC)软件开发项目持续构建产品的建议。特点:ClearCase修订控制大约80%C++;15%Java;5%脚本或低级为GreenHillsIntegrityOS编译,也为一些窗口和JVMblock编译主要是嵌入式系统;还包括一些UI部分和一些开发支持(模拟工具、配置工具等...)可交付成果的每个概念“版本”都包括许多板、UI机器等的部署图像……(约10个单独的图像;5个不同的操作系统)需要维护/跟踪多个同步版本,尤其是为各种不同的板级支持包构建的版本构建周期时间是项目中的一个主要问题,需要支持任何有助于解决此问题的功能(我想主要是需要管理大型构建机器农场..

c++ - 不用调试工具的调试技巧

我发现自己处于几乎没有任何调试工具的情况下不得不调试Qt应用程序的困难境地:应用程序似乎开始使用越来越多的CPU,因为它一次又一次地运行相同的操作;许多小时后CPU完全饱和。该应用程序在ARMLinux嵌入式设备上运行,其中gdb似乎无法工作,可能很难通过提供的工具链发现问题。strace似乎只报告计时器事件(这是一个OpenGL应用程序,所以这是预期的)。ltrace不可用,编译它导致了一项艰巨的任务,也许毫无用处。我没有编写应用程序,但源代码可用。我还能做些什么来发现应用程序在消耗那么多资源时忙于做什么吗?我必须以任何方式跟踪应用程序执行的所有方法调用吗?我可以使用任何其他技术来尝

使用paho.mqtt.embedded-c和openssl实现MQTT的单向认证功能

1、背景  由于项目有需求在一个现有的产品上增加MQTT通信的功能,且出于安全考虑,MQTT要走TLS,采用单向认证的方式。2、方案选择  由于是在现有的产品上新增功能,那么为了减少总的成本,故选择只动应用软件的来实现需求。  MQTT的功能直接选择PahoMqtt这个第三方库来实现,因为以前用过,比较熟悉。由于只想动应用软件,那么只能选择他的embedded-c分支,这样才可以直接集成代码,而不需要编译成so放到固件里,同时也减少程序体积的增加。   embedded-c分支不支持TLS,那么就要想办法自己给embedded-c实现TLS的功能,经过考虑,现有的产品里有openssl库,故使

c++ - 从文字字符串生成编译时常量整数

我对在ARMRealView编译器上按预期工作的不可移植代码有问题,但VC++、GCC拒绝编译它并且QAC++(一种静态分析工具)发出警告。问题我有一个系统需要解析消息中的助记符。助记符都是三个字符的8位ASCII字符串。为了简化和优化解析而不是对助记符字符串执行字符串比较,我将字符串打包成32位整数并执行整数比较。此外,为了能够使用switch/case而不是if-elseif链,我有一个宏,它接受一个文字字符串并生成关联的整数,这在ARMRealView中是一个编译时间常量,但在GCCx86/Linux或VC++/Windows://Note:DonotchangeCcasttos