草庐IT

EMBEDDED

全部标签

c++ - int8_t 和 char : converts between pointers to integer types with different sign - but it doesn't

我正在处理一些嵌入式代码,并且正在从头开始编写一些新东西,因此我更愿意坚持使用uint8_t、int8_t等类型。然而,当移植一个函数时:voidfunctionName(char*data)到:voidfunctionName(int8_t*data)在将文字字符串传递给函数时,我收到编译器警告“在指向具有不同符号的整数类型的指针之间转换”。(即调用functionName("putthistextin");时)。现在,我明白了为什么会发生这种情况,并且这些行只是调试,但我想知道人们认为什么是最合适的处理方式,而不是对每个文字字符串进行类型转换。在实践中,我不认为一揽子类型转换比使用

c++ - 如何对嵌入式代码进行单元测试?

我正在使用C++为基于Cortex-M4的微Controller开发软件。我有很多高度依赖机器的代码(驱动程序等)。而且我有更高级别的代码,它通过直接使用驱动程序密切依赖于低级代码。示例:低级部分是例如。一个非常特定于硬件的UART驱动程序,高层部分是一个基于UART的通信协议(protocol)。(该软件在“裸机”上运行,即底层没有操作系统。)这段代码目前是紧耦合的,因此不可单元测试。我想让它可以测试。所以我想我会创建低级部分的抽象,并使高级部分仅依赖于抽象。然后我可以创建将由单元测试使用的抽象模拟,以及将在微Controller上运行的真实实现。这是正确的方法吗?如何创建这样的抽象

c++ - 我是不是遗漏了什么,或者虚拟电话的表现不如人们想象的那么糟糕

我一直在为嵌入式环境开发一个简单的框架。我做出了是使用虚拟调用、CRTP还是switch语句的设计决定。我听说vtables在嵌入式中表现不佳。从这个问题跟进vftableperformancepenaltyvs.switchstatement我决定进行自己的测试。我运行了三种不同的方式来调用成员函数。使用etl库的etl::function,一个旨在模仿STL库但用于嵌入式环境的库。(无动态分配)。使用将根据对象的intID调用对象的主switch语句使用对基类的纯虚拟调用我从来没有用基本的CRTP模式尝试过这个,但是etl::function应该是用于该模式的机制的变体。我在ARM

c++ - 使用 C 的 ARM9 上未对齐内存访问异常的解决方法是什么?

架构ARM9。编程语言C.我们有一个第三方堆栈,其中一个调用采用指向内存位置的指针(pBuffer)。在堆栈中,他们可以自由地在传递的指针周围移动并随意访问它。不幸的是,他们偏移了传入的指针并将其传递给另一个函数,该函数试图从一个奇数/未验证的内存位置((uint16*)pBuffer)[index]=value;其中value是uint16类型,index是边界检查和索引pBuffer。这会导致未对齐的内存访问异常。pBuffer指向堆上的char*。如前所述,即使我们可以窥视第三方堆栈,我们也无法正式更新代码。所以我们通知提供商,他们在下一个版本中提供更新。我想了解是否有解决此问题

c++ - 键入强制转换文字有意义吗?

所以我正在研究内存受限的嵌入式系统,并希望尽可能多地节省字节数。如果,在我的代码中,如果我有如下语句:b=a或b+=1;其中a和b是uint8_t。将文字类型转换为相同类型是否有益,还是由编译器完成:b=a 最佳答案 isitbeneficialtotyecasttheliteraltosametypeorisitdonebycompiler:关于编译器如何将常量值存储在它创建的二进制文件中,您受制于编译器。没有特别的理由认为像您建议的强制转换会改变使用的表示形式,因为它们名义上表示runtime转换(在这种情况下来自int)。此外

c++ - 初始化 int 影响函数返回值

很抱歉这个问题的标题含糊不清,但我不确定如何准确地提出这个问题。以下代码在Arduino微处理器(为ATMega328微处理器编译的c++)上执行时运行良好。返回值显示在代码的注释中://ReturntheindexofthefirstsemicoloninastringintdetectSemicolon(constchar*str){inti=0;Serial.print("i=");Serial.println(i);//prints"i=0"while(i如预期的那样,这会输出“2”作为第一个分号的位置。但是,如果我将detectSemicolon函数的第一行更改为inti;即

c++ - 流式文件增量编码/解码

这就是问题所在-我想在服务器上生成二进制文件(大小>1MB)的增量,并通过HTTP将增量发送到内存受限(RAM低且无动态内存)的嵌入式设备。由于通过线路传输数据所涉及的高成本,因此首选增量(而不是从服务器发送完整的二进制文件)。问题是,嵌入式设备无法解码增量并在内存中创建新文件的内容。我研究了各种二进制增量编码/解码算法,如bsdiff、VCDiff等,但无法找到支持流式传输的库。也许,与其问是否有合适的库,不如问我是否可以采用替代方法来解决原始问题(通过网络发送最少的数据)?如果有合适的增量库支持流解码(用C或C++编写,不使用动态内存),那肯定会有所帮助。

c++ - printf 的格式化缓冲区在哪里?

我在一个受限的嵌入式系统上工作。目前我们使用snprintf到缓冲区,然后用另一个语句,将缓冲区打印到串口:chartemp_buffer[256];intbytes_written=snprintf(temp_buffer,sizeof(temp_buffer),"Solarsystemhas%dplanets\n",10);if(bytes_written>0){Serial_Port_Output(temp_buffer,bytes_written);}我想切换到printf直接写入串口。根据我们的编译器文档,我拦截了用于输出数据以使用串行端口的函数调用。(该接口(interfa

c++ - C++ 嵌入式应用程序是否应该为内置 C++ 类型使用带有 typedef 的通用 header ?

通常的做法是我努力避免直接使用内置类型,而是包含一个standardtypes.h,其中包含如下项目://\Common\standardtypes.htypedefdoubleFloat64_T;typedefintSInt32_T;几乎所有组件和源文件都依赖于此header,但有些人认为需要抽象类型的大小(实际上不需要)。这是一个好的做法吗(尤其是在大型组件化系统中)?有更好的选择吗?还是应该直接使用内置类型? 最佳答案 您可以在头文件中使用现代C和C++实现中可用的标准化版本:stdint.h它有类似的类型:uint8_t、i

c++ - 如何使用STM32单片机生成REAL随机数?

我正在keilmicrovisionIDE中使用STM32F103Earmcortex-m3MCU开发一个项目。我需要为某些目的生成随机数,但我不想使用标准C++库生成的伪随机数,所以我需要一种方法来使用硬件功能生成真正的随机数,但我不知道如何我能行。任何的想法?(我是一名软件工程师,不是电子专业人士,所以请简单描述一下:P) 最佳答案 这是我刚遇到的一个老问题,但我想回答,因为我觉得其他答案都不令人满意。“我需要随机数来生成RSAkey。”这意味着PRNG例程(经常被错误地称为RNG,这是我的一个小毛病)是NotAcceptabl