我正在开发一个软件库,用于嵌入式系统,如ARM芯片或TIDSP(主要用于嵌入式系统,但如果它也可以用于PC环境,那也很好).显然,这是一个相当广泛的目标系统,因此能够轻松地移植到不同的系统是一个优先事项。该库将用于与特定硬件的接口(interface)和运行一些算法。我认为C++是优于C的最佳选择,因为它更易于维护和阅读。我认为额外的开销对于能够在面向对象的范例中工作是值得的。如果我正在为一个非常具体的系统编写代码,我会使用C语言,但事实并非如此。我假设目前流行的嵌入式系统的大多数编译器都可以处理C++。这个对吗?我还应该考虑其他因素吗?我的思路正确吗? 最
这是我的应用程序的上下文:我正在开发一个使用来自不同设备的RAM的嵌入式系统。一部分在微Controller的内部RAM(128kB)中,另一部分是外部RAM(1MB)。这些内存映射到微Controller的地址空间,但位于非连续区域。内部RAM用于系统堆栈、任务堆栈和堆。外部RAM用于静态分配的数据(池、缓冲区和所有“static...”内容)我正在尝试实现一个简单的内存管理结构,并且作为它的一部分能够创建一个分配器,该分配器可以使用operatornew的分配算法但使用另一个内存源,而不是系统heap而是其他地方的内存区域。你知道这是否可能吗?一个使用示例可以是保留100kB的外部
我是一名嵌入式C开发人员,最近开始在嵌入式设备上处理C++代码,并且不确定当类访问内存映射寄存器或外部设备上的数据等volatile数据时,const正确性如何应用,例如模数转换器(ADC)。例如,我有一些类通过指针访问设备的内存映射寄存器来连接到设备的硬件模块,如下所示:classIOPin{public:/*Constructor,destructor,othermethods...*///shouldthisbeaconstmethod?boolReadIOState(){returnportregs_->state;}private:/*Otherprivatestuff...
编辑@Mike指出我下面代码中的try_lock函数是不安全的,并且访问器创建也会产生竞争条件。(来自每个人的)建议使我确信我走上了错误的道路。原始问题嵌入式微Controller上的锁定要求与多线程不同,我无法将多线程示例转换为我的嵌入式应用程序。通常我没有任何类型的操作系统或线程,只有main以及硬件定期调用的任何中断函数。我需要从中断中填充缓冲区是很常见的,但在main中处理它是很常见的。.我创建了IrqMutex下面的类来尝试安全地实现这一点。每个试图访问缓冲区的人都通过IrqMutexAccessor被分配了一个唯一的ID。,那么他们每个人都可以try_lock()和unlo
我正在尝试实现一个按大小对齐的内存缓冲区,以便我可以使用DMAController的模数功能来实现环形缓冲区。我知道我可以用memalign做到这一点,但我想知道是否可以在堆栈上这样做,因为到目前为止我已经能够避免动态内存。我正在使用GCC4.4.1,我不关心可移植性(嵌入式系统)。我想做这样的事情:templateclasssampler{__attribute__((aligned(buffer_size*num_channels*2)))uint16_tbuffer[buffer_size][num_channels];};但是GCC当然不会接受非常量对齐(并且似乎表明对齐>8可
我正在为嵌入式系统(特别是PSoC5,使用PSoCCreator)开发代码,并使用C++编写代码。虽然我已经克服了使用C++的大部分障碍,但首先使用编译器标志-xc++在C++中进行编译,定义new和delete运算符,确保不会抛出异常编译器标志-fno-exception,在使用虚函数时我遇到了障碍。如果我尝试声明一个虚函数,编译器会给我错误undefinedreferenceto"vtablefor__cxxabiv1::__class_type_info"。解决这个问题的唯一方法是使用编译器标志-fno-rtti,它可以防止错误并使其编译成功。但是,如果我这样做,嵌入式程序会在尝
在工作中,我们拥有丰富的使用旧版本代码编写器(CC3.3)为TIDSP平台开发图像处理应用程序的经验。我们正在使用Eclipse(由Xilinx开发和分发)过渡到ARM平台。在旧的代码编辑器中,我们经常使用的一个功能是看一个IDE小部件,它可以将特定内存区域显示为位图图像。它有一个属性网格,您可以在其中定义大小、像素格式和步幅方向等内容,以将内存块正确解释为图片。该工具还具有一些不错的功能,例如缩放、灰度计数器、线条轮廓、直方图等。eclipse有类似的东西吗?如果没有,创建一个有多困难?我的意思是,为eclipse创建一个从jtag接口(interface)中的内存位置提取信息的准系
我正在从事一个必须使用PicoTCP的项目(请参阅https://developer.mbed.org/users/daniele/code/PicoTCP/,我使用的是该库的旧版本)。在我的main.cpp文件中,我有以下代码:#include"pico_stack.h"#include"pico_dhcp_server.h"intmain(void){//createDHCPserverstructpico_dhcpd_settingss={};s.my_ip.addr=long_be(0x0a280001);/*10.40.0.1*/pico_dhcp_server_initia
使用avr-gcc可以将数据存储在程序内存中以节省RAM。这是使用PROGMEMattribute完成的.AVR-libc还提供了一个宏,PSTR(),可用于文字字符串。现在我正在尝试将PSTR()与__func__,__FUNCTION__or__PRETTY_FUNCTION__.一起使用以下代码按预期工作,display.message(__func__,2);display.message(__FUNCTION__,2);display.message(__PRETTY_FUNCTION__,2);,当任何这些行的编译失败时,display.messageP(PSTR(__fu
我正在尝试启动并运行一个小型BMP085气压计项目。我希望能够在不同的操作模式(MODE_PRESSURE和MODE_ALT)之间切换。我将MODE_PRESSURE和MODE_ALT定义为constint。constintMODE_PRESSURE=1;//displaypressureandtempconstintMODE_ALT=2;//displayaltituderelativetosealevelintmode;//storesthecurrentmodevoidsetup{mode=MODE_PRESSURE;}voidloop{//Readmodebuttonandse