标签: embedded

是否有可用于8位嵌入式系统的flex/bison的替代方案?

我正在编写一个小型解释器,用于简单的BASIC语言,使用avr-gcc工具链在C语言的AVR微控制器上练习.但是,我想知道是否有任何开源工具可以帮助我编写词法分析器和解析器.

如果我写这个在我的Linux机器上运行,我可以使用flex/bison.现在我把自己限制在一个8位平台上,我必须手动完成所有操作,不是吗?

embedded parsing bison avr-gcc flex-lexer

80
推荐指数
3
解决办法
6万
查看次数

const&const volatile之间的区别

如果我们volatile每次更新新值时
声明一个变量如果我们声明一个变量,const那么该变量的值将不会被更改

那么如上所述const volatile int temp;
声明变量temp有什么用?
如果我们宣布为什么会发生什么const int temp

c embedded

80
推荐指数
7
解决办法
8万
查看次数

是否有任何理由使用C而不是C++进行嵌入式开发?

我的硬件C++和C89上有两个编译器

我正在考虑将C++与类一起使用但没有多态(以避免使用vtable).我想使用C++的主要原因是:

  • 我更喜欢使用"内联"函数而不是宏定义.
  • 我想使用命名空间,因为我的前缀使代码混乱.
  • 我认为C++有点类型更安全,主要是因为模板和详细的转换.
  • 我真的很喜欢重载的函数和构造函数(用于自动转换).

在开发非常有限的硬件(4kb RAM)时,您是否认为有理由坚持使用C89?

结论

谢谢你的回答,他们真的很有帮助!

我认为这个主题通过,我会坚持使用C主要是因为:

  1. 在C中预测实际代码更容易,如果你只有4kb的ram,这非常重要.
  2. 我的团队主要由C开发人员组成,因此不会经常使用高级C++功能.
  3. 我找到了一种在C编译器(C89)中内联函数的方法.

因为你提供了很多好的答案,所以很难接受一个答案.不幸的是我不能创建一个wiki并接受它,所以我会选择一个让我最想的答案.

c c++ embedded c89

77
推荐指数
14
解决办法
4万
查看次数

在微小内存中运行的可用交互式语言有哪些?

我正在寻找通用编程语言

  • 有一个交互式(实时编码)提示
  • 当编译器托管在单独的机器上时,单独工作32 KB RAM或8 KB工作
  • 在总共只有8-32 KB RAM的微控制器上运行(没有MMU).

到目前为止,下面是我的清单,我错过了什么?

  • Python:PyMite VM需要64K闪存,8K RAM.目标LPC,SAM7和ATmegas 8K或更多.托管.
  • Lua:eLua FAQ推荐256K闪存,64K RAM.
  • FORTH:amforth在ATmega上需要8K闪存,150字节RAM,30字节EEPROM.
  • 方案:armpit方案最小的目标是具有32K闪存,4K SRAM的LPC2103.
  • C:Interactive C在68HC11上运行,没有闪存和32K SRAM.托管.
  • C:picoc是一个开源,交叉编译,交互式C系统.编译为AVR时,需要63K闪存,8K RAM.可以通过努力将RAM保持在闪存中来减少RAM.
  • C++:AngelScript是一个开源的,基于字节码的,类似于C/C++的脚本语言,具有简单的本机调用.
  • Tcl:TinyTCL在DOS上运行,60K二进制.看起来很容易移植.
  • BASIC:TinyBasic:初始化为64K堆,可能是可调整的.
  • 口齿不清
  • PostScript :(我还没有找到低内存的FOSS实现)
  • Shell:bitlash:Arduino(ATmega)的交互式命令shell.另见AVRSH.

embedded microcontroller programming-languages interactive

72
推荐指数
6
解决办法
2万
查看次数

嵌入式C++:是否使用STL?

我一直是一名嵌入式软件工程师,但通常在OSI堆栈的第3层或第2层.我不是一个硬件家伙.我一般都经常使用电信产品,通常是手机/手机,这通常意味着像ARM 7处理器.

现在我发现自己处于一个更通用的嵌入式世界中,在一个小型的初创公司中,我可能会转向"不那么强大"的处理器(这是主观位) - 我无法预测哪个.

我已经阅读了很多关于在嵌入式系统中使用C++在C++中的争论,而且没有明确的答案.有一些关于可移植性的小担忧,还有一些关于代码大小或运行时的问题,但我有两个主要问题:
1 - 异常处理; 我仍然不确定是否使用它(参见嵌入式C++:是否使用异常?)
2 - 我非常不喜欢嵌入式系统中的动态内存分配,因为它可能会引入问题.我通常有一个缓冲池,它在编译时静态分配,只提供固定大小的缓冲区(如果没有缓冲区,系统复位).当然,STL会进行大量的动态分配.

现在我必须决定是否使用或放弃STL - 对于整个公司,永远(它进入一些非常核心的s/w).

我跳哪个方向?超级安全并且失去了很多构成C++的东西(imo,它不仅仅是语言定义),可能会在以后遇到问题,或者现在必须添加大量的异常处理和其他一些代码?

我很想和Boost一起去,但是1)我不确定它是否会移植到我可能想要使用的每个嵌入式处理器上2)在他们的网站上,他们说他们不保证/推荐它的某些部分对于嵌入式系统(尤其是FSM,这似乎很奇怪).如果我选择Boost,我们会在以后发现问题....

c++ embedded stl

71
推荐指数
7
解决办法
3万
查看次数

为什么不建议在空间/辐射环境中使用C ++模板?

通过阅读此问题,例如,我理解了为什么在空间或核电站等辐射较高的环境中不建议动态分配或例外的原因。关于模板,我不知道为什么。你能给我解释一下吗?

考虑到这个答案,它说使用起来很安全。

注意:我不是在谈论复杂的标准库内容,而是针对性的自定义模板。

c++ embedded templates fault-tolerance

64
推荐指数
2
解决办法
7950
查看次数

单元测试嵌入式软件

您在嵌入式系统特有的嵌入式软件单元测试中使用了哪些最佳实践?

embedded unit-testing

61
推荐指数
7
解决办法
3万
查看次数

即使我将输出重定向到/ dev/null,printf仍会有成本吗?

我们有一个包含大量打印消息的守护进程.由于我们正在开发具有弱CPU和其他约束硬件的嵌入式设备,因此我们希望在最终版本中最小化printf消息的任何类型的成本(IO,CPU等).(用户没有控制台)

我的队友和我有分歧.他认为我们可以将所有内容重定向到/ dev/null.它不会花费任何IO,所以感情将是最小的.但我认为它仍将花费CPU,我们最好为printf定义一个宏,这样我们就可以重写"printf"(也许只是返回).

所以我需要一些关于谁是对的意见.Linux是否足够聪明以优化printf?我真的很怀疑.

c linux embedded performance dev-null

60
推荐指数
4
解决办法
4934
查看次数

简单的串行点对点通信协议

我需要两个设备(PC和微控制器)之间的简单通信协议.PC必须向微软发送一些命令和参数.微必须传输一个字节数组(来自传感器的数据).

数据必须受到噪声保护(除了奇偶校验,我认为我还需要一些其他的数据校正方法).

有没有标准的解决方案呢?(我只需要一个想法,而不是完整的解决方案).

PS任何建议表示赞赏.PPS对不起任何语法错误,希望你理解.

编辑1.我还没有决定它是主/从协议还是双方都可以发起通信.PC必须知道微工作何时完成工作并且可以发送数据.如果数据准备就绪,它可以连续轮询微观,或者当作业完成时微观可以发送数据.我不知道哪个更好更简单.

编辑2. 硬件和物理层协议.由于PC中使用RS-232 C串行标准,我将使用异步通信.我将只使用RxD,TxD和GND信号.我无法使用额外的电线,因为微控制器AFAIK不支持它们.顺便说一下,我正在使用AVR ATmega128芯片.

所以我将使用固定波特率,8位数据,2个停止位而不进行奇偶校验(或使用?).

数据链路协议.这就是我的问题主要关注的问题.感谢您提出HDLC,PPPModbus协议.我会研究它.

embedded serial-port protocols

56
推荐指数
5
解决办法
7万
查看次数

将Haskell用于大型实时系统:如何(如果?)?

我一直很想知道是否有可能将Haskell的强大功能应用到嵌入式实时世界,并且在谷歌搜索中找到了Atom软件包.我假设在复杂的情况下,代码可能具有所有经典的C错误 - 崩溃,内存损坏等,然后需要将其追溯到导致它们的原始Haskell代码.所以,这是问题的第一部分:"如果您有使用Atom的经验,那么您是如何处理调试已编译C代码中的低级错误并将其修复为Haskell原始代码的任务的?"

我搜索了Atom的更多示例,这篇博文提到了生成的C代码22KLOC(显然没有代码:),包含的示例是一个玩具.这个这个引用有一些更实用的代码,但这是结束的地方.我在这个主题中加入"相当大"的原因是,如果您可以分享使用300KLOC +范围内生成的C代码的经验,我最感兴趣.

因为我是一名Haskell新手,显然可能有其他方法由于我未知的未知因素而未找到,所以在这方面任何其他自我教育的指针都会非常感激 - 这是问题的第二部分 - "在Haskell中进行实时开发会有什么其他实用方法(如果)?" 如果多核也在图片中,这是一个额外的加号:-)

(关于Haskell本身用于此目的的用法:从我在这篇博文中读到的内容,Haskell中的垃圾收集和懒惰使其在调度方面具有相当不确定性,但可能在两年内发生了一些变化.现实世界的Haskell编程问题在SO上是我能找到的最接近这个话题的人)

注意:上面的"实时"将更接近"硬实时" - 我很好奇是否可以确保主要任务未执行的暂停时间小于0.5ms.

embedded haskell real-time hard-real-time

56
推荐指数
3
解决办法
1万
查看次数