NoM*_*ots 23 embedded 32-bit d 16-bit
我喜欢我读过很多关于D.的内容.
然而:
所以基本上D适用于只有几兆字节(有时小于一兆字节)的嵌入式系统,不运行操作系统,其中必须在编译时知道最大内存使用量(每个要求),并且可能在小于32位的情况下处理器?
我对一些功能非常感兴趣,但我得到的印象是针对桌面应用程序开发人员.
具体是什么使它不适合16位实现?(假设16位架构可以处理足够的内存来保存运行时,无论是在闪存还是RAM中.)仍然可以计算32位值,尽管比16位慢,并且需要使用库代码进行更多操作.
lar*_*ivi 11
我不得不说这个问题的简短回答是"不".
我个人希望看到你成功,但怀疑这将是轻松的工作.
首先阅读larsivi的答案.他在D运行时工作,知道他在说什么.
我只是想补充一下:你提出的一些问题已经成为可能.它不会让你一路走来,这里的错过一英里,但仍然,FYI:
垃圾收集在Windoze或Linux上很棒,但是,不幸的是嵌入式应用程序有时必须进行明确的内存管理.
你可以关闭垃圾收集.那里有各种实验性的D操作系统.特别参见std.gc模块std.gc.disable.另请注意,您不需要使用以下内容分配内存new:您可以使用malloc和free.甚至可以使用它分配数组,只需要使用切片在分配的内存周围附加D数组.
数组边界检查,你喜欢它,你讨厌它.非常适合设计保证,但并不总是允许性能问题.
的数组规范特别要求编译器允许对边界检查要被关闭(参见"实现注意"). gdc提供-fno-bounds-check,并在dmd使用中-release应禁用它.
对于支持多线程的嵌入式系统而不是运行操作系统有什么影响?我们有一个客户甚至不喜欢中断.更少OS /多线程.
这个我不太清楚,但鉴于大多数C运行时允许关闭多线程,似乎可能会让D运行时也禁用它.尽管我不能告诉你,现在是否容易或可能.
这个问题的答案已经过时了:
D 可以支持不运行操作系统的嵌入式系统吗?
D 可以针对 ARM Linux和ARM Cortex-M进行交叉编译。有些项目旨在为 Cortex-M 架构创建库,例如 STM32 的 MiniLibD或使用 STM32 通用库的项目。(您可以在 ARM Cortex-M 上用 D 实现您自己的简约操作系统。)
直接声明它不支持 16 位处理器是否会使其完全无法在此类机器上运行嵌入式应用程序?有时你不需要锤子来解决你的问题。
不,请参阅上面的答案...(但我不希望在不久的将来支持比 Cortex-M “更小的”架构。)
垃圾收集在 Windows 或 Linux 上非常有用,但不幸的是,嵌入式应用程序有时必须进行显式内存管理。
您可以编写垃圾收集免费代码。(D 基金会的目标似乎是建立一个“无 GC 兼容”的标准库 Phobos,但这仍在进行中。)
数组边界检查,你喜欢它,你讨厌它。非常适合设计保证,但对于性能问题并不总是允许的。
(正如您所说,这取决于您的“个人品味”和设计决策。但由于 D 编译器开发人员的背景和 D 的设计目标,我认为边界检查的性能开销是可以接受的。)
多线程支持对不运行操作系统的嵌入式系统有何影响?我们有一位客户甚至不喜欢打扰。操作系统/多线程就少得多了。
(问题是什么?可以使用 D 的语言功能实现多线程,例如,如本问题中所解释的那样。顺便说一句:如果您想使用中断,请考虑Cortex-M3 的“hello world”项目。)
有用于嵌入式系统的 D-Lite 吗?
D 的 SafeD 子集针对嵌入式领域。