草庐IT

EMBEDDED

全部标签

c++ - 没有全局运营商的裸机新

考虑安全软件,其中通常不允许动态分配并且不允许异常。仅当类显式定义运算符new时才允许动态分配和delete.使用运算符new对于其他类应该导致编译失败。在所述情况下导致编译失败的最简单方法是删除全局新运算符:void*operatornew(std::size_t)=delete;一方面,这会对标准库造成副作用。例如包括将包含传播到通过.使用::new即使您不想使用异常和内存分配,运算符也会导致构建失败。根据ScootMeyers应该是裸机友好的。另一方面,这会导致编译器内置运算符出错src/main.cpp:91:31:error:deleteddefinitionof'void*

c++ - 将 Child 对象数组传递给接受 Parent* 的函数

我在功能有限的嵌入式平台上工作,因此vector/STL不可用。这可能是一个微不足道的问题,但我在C++方面没有太多经验(只有C和C#,这可能使我对明显的C++方法视而不见)。考虑以下示例:classParent{};classChild:publicParent{};voidTest(Parent*parents,uint8_tparentCount){//Accessingparent[x]isproblematicwhen'parents'containsaderivedtype}intmain(){//ThisisOKParentparents[3];Test(parents,

c++ - 避免在内存中创建多个代码拷贝

我是嵌入式系统开发的新手,不习惯使用非常小的程序内存(在本例中为16kB)。我希望能够创建全局变量、数组和函数,我可以从程序中的任何地方访问它们,而只存在于内存中的一个地方。我目前的方法是使用静态类成员和方法,只需包含头文件即可使用(例如#include"spi.h")。我想做的事情最好的方法是什么?这是一个示例类。据我了解,.cpp中的_callback等变量和call()等函数定义只会出现在spi.o中,因此它们只会在内存中出现一次,但我可能会混淆。spi.h:#ifndefSPI_H_#defineSPI_H_#include"msp430g2553.h"classSPI{pub

c++ - arm 裸机系统上的 CPU 使用率测量

我正在开发一个ARMcortexM4评估板,它是一个裸机应用程序,上面没有运行任何操作系统。现在我想测量给定进程/算法的CPU使用情况,最好的方法是什么?我是否应该实现一个操作系统来衡量CPU的使用情况,该系统具有满足此类需求的功能? 最佳答案 这个问题几乎可以自己回答。当您的裸机应用程序不在该过程/算法中时,它在做什么?测量一个或另一个或两者。如果您有一个裸机应用程序没有完全消耗此算法中的CPU,那么您已经拥有一个操作系统,可以管理此应用程序/功能的时间。您可以使用循环中相对于计时器的简单计数器的多种方法来查看当算法获取时间片时每

c++ - GCC --gc-sections 和寻找符号依赖

我正在尝试减小我的elf可执行文件的大小。我正在使用-ffunction-sections-fdata-sections进行编译并使用-gc-sections进行链接,但它出现了一些符号我相信未使用的不会被丢弃。我可以运行GNU工具链中的一些命令来查明正在使用哪些符号以及在何处使用?工具链:GNUarm-none-eabi平台:Cortex-M4语言:C++这是我的典型构建标志:编译:arm-none-eabi-g++.exe-Wall-O3-mthumb-std=c++11-mcpu=cortex-m4-mfpu=fpv4-sp-d16-mfloat-abi=softfp-fsing

c++ - 如何在 Visual Studio 2017 (C++) 中使用 Chromium Embedded Framework?

我想使用C++将CEF与VS2017结合使用(不是C#,因此CEFSharp在这里不起作用)。我不太明白该怎么做。从我读到的内容来看,我似乎需要将源代码构建到.sln文件中,然后修改现有代码,但是他们的网站还说有二进制文件可供下载,这让我感到困惑。我如何使用CEF和VS2017在C++中编程? 最佳答案 DownloadCEF3二进制文件,并将存档提取到文件夹Download并安装CMake打开CMake,然后设置:源码在哪里:文件夹构建二进制文件的位置:folder/build按配置按生成在文件夹/build/cef.sln中打开

c++ - 用于嵌入式系统的 OpenCV 与 OpenVX

我想为树莓派做一个图像识别程序。我从OpenCV开始,但是才发现OpenVX,OpenCV的硬件加速器。由于速度和效率对嵌入式系统很重要,我很好奇如何利用这项新技术。我是否必须将我的代码移植到OpenVX,或者它是一个与我的OpenCV程序一起运行的程序? 最佳答案 来自项目的ownwebsite:OpenVXcanbeuseddirectlybyapplicationsortoacceleratehigher-levelmiddleware,suchasthepopularOpenCVopensourcevisionlibrary

c++ - 如何解释 C++ 中的二进制数据?

我正在以数据包(64字节)的形式向设备发送二进制数据或从设备接收二进制数据。数据有特定的格式,部分格式随不同的请求/响应而变化。现在我正在为接收到的数据设计一个解释器。简单地按位置读取数据是可以的,但是当我有十几种不同的响应格式时看起来就不那么酷了。我目前正在考虑为此目的创建一些结构,但我不知道如何使用填充。也许有更好的方法?相关:Safe,efficientwaytoaccessunaligneddatainanetworkpacketfromC 最佳答案 您需要使用结构和/或union。您需要确保您的数据在连接的两端都正确打包,

c++ - 嵌入式开发应该避免哪些c++特性

我有兴趣编制一份不建议在嵌入式系统中使用的c++功能列表(这可能会导致人们推荐使用c而不是c++)。如果您知道,请尝试添加原因,或者将您的原因添加到其他人的答案中。这是一个开始(我知道的唯一一个)动态多态,不知道为什么,但是有人说它“代价高昂” 最佳答案 此处的union攻击战斗机编码标准:http://www2.research.att.com/~bs/JSF-AV-rules.pdf很好地概述了如何使用C++进行嵌入式编程。动态多态性的禁令是90年代遗留下来的,没有合理的依据。调用虚函数所花费的时间并不比执行切换和调用所花费的时

c++ - 嵌入式平台上的线程类内存分配异常

我遇到了一个奇怪的问题,我已经能够找到一些原因,但我仍然看不到原因。也许这里有人可以阐明一些想法?我在VxWorks5.5之上的PowerPC处理器上运行,使用PPCgnu604工具链在C++中开发。我有这样一个类:classMyClass{public:voidrun(void);private:CommandMesssageClasscommand;StatusMessageClassstatus;};当我的应用程序启动时,它将动态分配一个MyClass实例并生成一个指向其“运行”函数的线程。本质上,它只是坐在那里轮询命令,并在收到命令后返回状态。请注意,这是该类的简化版本。为简洁