Questions tagged «c++»

C ++是一种已编译的通用编程语言,它为C语言添加了面向对象的功能和其他增强功能,而C语言在很大程度上是其超集。它在嵌入式和PC软件开发中都很流行。

16
C ++是否适合嵌入式系统?
一个普遍的问题,在这里和其他地方。C ++是否适合嵌入式系统? 微控制器?实时操作系统?烤面包机?嵌入式PC? OOP在微控制器上有用吗? C ++是否会将程序员从硬件中移走太远以至于效率不高? Arduino的C ++(没有动态内存管理,模板,异常)是否应被视为“真正的C ++”? (希望这个Wiki将成为包含这场潜在的圣战的地方)

10
电子工程师的编程语言
我是一名电子与通信工程专业的学生,​​在上大学之前,我对编程和计算机应用程序很感兴趣。我曾经专注于设计Windows应用程序并学习其技术,但是现在,我觉得这对我的领域毫无用处……我不必学习有关计算机科学和开发软件的所有知识!(我对吗?) 我知道VB .Net,C#和C ++。我的假期有很多时间,所以我想以编程的方式深入研究“电子领域”。那么您会建议学习或专注于什么? 我想要在微控制器和其他集成电路编程中使用的那些语言。C ++是否足够,还是我也应该精通C?请告诉我您的想法。

5
用于I / O引脚抽象的C ++类
我正在寻找硬件I / O点或引脚的C ++抽象。诸如in_pin,out_pin,inout_pin或open_collector_pin之类的东西。 我当然可以自己提出这样的一组抽象,所以我不是在寻找“嘿,您可能会用这种方式”类型的答案,而是在“看一下在此库中使用的该库”。这个项目'。 Google没做任何事情,也许是因为我不知道其他人怎么称呼它。 我的目标是建立基于这些点的I / O库,但也要提供这些点,因此例如将HD44780 LCd连接到芯片的IO引脚或I2C(或SPI)将很容易I / O扩展器或可以通过其他方式控制的任何其他点,而无需更改LCD类。 我知道这是电子/软件方面的问题,很抱歉,如果它不属于这里。 @leon:接线这是一大包软件,我需要仔细看。但是似乎他们没有像我想要的那样使用pin抽象。例如在键盘实现中,我看到 digitalWrite(columnPins[c], LOW); // Activate the current column. 这意味着存在一个知道如何写入I / O引脚的函数(digitalWrite)。这使得在不重写digitalWrite函数的情况下,无法添加新型的I / O引脚(例如,MCP23017上的一个,因此必须通过I2C对其进行写入)。 @Oli:我在Arduino IO示例中进行了搜索,但是似乎使用了与Wiring库相同的方法: int ledPin = 13; // LED connected to digital pin 13 void setup(){ pinMode(ledPin, OUTPUT); // sets the digital pin as output …
13 microcontroller  pins  c++  io 

2
原理图和源代码的版本控制
我正在开发一种电子设备,该设备分为两部分:硬件(Eagle原理图)和固件(C ++源代码)。我想跟踪源代码和原理图的变化,但是有些地方我不确定如何组织我的工作: 对于源代码,我肯定会使用Git。但是,当原理图实际上是二进制文件时,它们是否值得进行版本控制(新的Eagle版本使用某种XML格式,但人类可读性不高...)? 将源代码和原理图放入一个Git存储库是个好主意吗?这是有道理的,但另一方面,我的日志将包含软件和硬件更改。此外,软件可以具有多个分支,但是硬件可能没有分支。 如何处理硬件修订版?标记它们还是将它们保存在单独的目录中? 硬件版本和固件版本之间也可能存在某些依赖关系。如何处理? 您能和我分享您的最佳做法吗?
12 eagle  hardware  c++ 

3
单片机睡眠竞赛条件
给定一个运行以下代码的微控制器: volatile bool has_flag = false; void interrupt(void) //called when an interrupt is received { clear_interrupt_flag(); //clear interrupt flag has_flag = true; //signal that we have an interrupt to process } int main() { while(1) { if(has_flag) //if we had an interrupt { has_flag = false; //clear the interrupt flag …

1
Arduino和中断:获取引脚值的快速方法
我使用的是Arduino Uno,并且已经根据我发现的说明1对其进行了设置,使其可以处理数字引脚2、3、4和5上的中断。 void setup() 包含以下代码来设置中断。 //Endable Interrupts for PCIE2 Arduino Pins (D0-7) PCICR |= (1<<PCIE2); //Setup pins 2,3,4,5 PCMSK2 |= (1<<PCINT18); PCMSK2 |= (1<<PCINT19); PCMSK2 |= (1<<PCINT20); PCMSK2 |= (1<<PCINT21); //Trigger Interrupt on rising edge MCUCR = (1<<ISC01) | (1<<ISC01); 现在,ISR(PCINT2_vect)函数在每个中断上触发。就像魅力一样。我的问题是,找出哪一个引脚是最好/最快的方法是什么? 我在Re中找到了一些东西:最好在引脚2、3上使用ISR(PCINT2_vect)或attachInterrupt?,但我不了解代码,因此无法立即使用。但这看起来令人印象深刻... 解决办法是什么? [2] http://arduino.cc/forum/index.php/topic,72496.15.html#lastPost 编辑: 目前,我正在从输入引脚寄存器中读取引脚状态: if (PIND & …

6
从嵌入式C角度看static关键字的概念
static volatile unsigned char PORTB @ 0x06; 这是PIC微控制器头文件中的一行代码。的@操作者用于存储地址内的值PORTB 0x06,这是PIC控制器表示PORTB内部的寄存器。到目前为止,我有一个明确的想法。 该行在头文件(.h)中声明为全局变量。因此,根据我对C语言的了解,“静态全局变量”对于其他任何文件都不可见-或简单地说,不能在当前文件外部使用静态全局变量/函数。 然后,该关键字如何PORTB对我的主源文件和我手动创建的许多其他头文件可见? 在我的主源文件上,我仅添加了头文件,#include pic.h这与我的问题有关吗?



1
虽然优化了循环
我的微控制器程序中有以下代码: // Wait for ADC conversion to complete while ( ( ADCSRA && _BS( ADSC ) ) == _BS( ADSC ) ) {} ADCSRA是一个寄存器,它将在模拟转换完成后更改其值,而我想等一下。该位指示转换完成。 查看生成的汇编代码,将整个循环替换为一条指令: in r24, 0x06 ; ADCSRA 读取了该寄存器,但尚未测试其值! 如何更改C ++代码以指示编译器继续重新检查寄存器,而又不会不必要地延迟程序? 我使用avr-gcc工具链。 编辑: 我更改了代码,如下所示(Thnx:lhballoti): while ( ( ADCSRA & _BS( ADSC ) ) == _BS( ADSC ) ) …

1
运行时可以读取ATmega或ATtiny设备签名吗?
在对ATtiny或ATmega进行编程时,avrdude会打印设备签名,在此示例中,它是ATtiny。 avrdude: Device signature = 0x1e910a 我可以使用C ++代码(avr-gcc)在运行的设备上读取此签名吗?对于ATmega1280,有一章29.6.10对此进行了编写,但是我对如何用C ++编写代码感到有些困惑。 我希望能够使设备将其设备ID发送回控制PC,以便PC可以做出决定。
8 arduino  atmega  linux  attiny  c++ 

1
带有中断处理程序和C ++的Keil ARM编译器中的错误?
我在Keil ARM编译器中为LPC1114编写中断处理程序时遇到问题。当我用C ++编写程序并指定--cpp编译器选项时,中断处理程序中的所有代码都会消失,它将被无限循环替换。我编写了说明我的麻烦的简单程序。 #include "LPC11xx.h" // LPC11xx definitions #define SYSTICK_DELAY 120000 // for 10 ms systick @ 12MHz osc void SysTick_Handler(void) { __NOP(); } int main (void) { SystemInit(); // from system_LPC11xx.c SysTick_Config(SYSTICK_DELAY); // from core_cm0.h // Loop forever while (1) __NOP(); } 当尝试使用--cpp编译器选项编译此代码时,我在disasm中遇到无限循环: SysTick_Handler PROC EXPORT SysTick_Handler [WEAK] B …
8 c++  interrupts  keil 

1
为Arduino创建库时我应该知道什么?
我想到,除了当前的问题之外,我还应该问:“为Arduino创建库时我应该知道什么?” 首先,我在做什么: 我使用Eclipse作为编辑器,并用C ++编写代码。我编写了一个简单的Arduino应用程序,其中包括我的头文件,并且正在通过错误进行工作。 第一个问题:我该如何“清洁”?我看到了一些我认为已解决的错误,几乎就像头文件已被缓存一样。(是的,很可能我做一些愚蠢的事[ 编辑:我是],但我还是想知道如何清理库,不知道那里的对象文件)。 其次:我应该注意哪些约定?我没有像我想的那样使用Arduino,并且用C ++编程感觉很好,但是我知道这些库的目的是让用户保持美观和简单。函数名称是否有约定?创建常量(看起来全局命名空间被#defines污染了)?等等。 最后,还有什么我应该知道的吗? 我应该提一下,我已经看过Arduino Library Tutorial了,虽然很好,但是走得并不远。我还偷看了系统上安装的某些库。
8 arduino  library  c++  c 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.