问题标签 [embedded]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
11 回答
12562 浏览

operating-system - 嵌入式操作系统的比较?

我参与过一种或另一种风格的嵌入式操作系统,并且通常不得不使用遗留系统所拥有的任何东西。现在我有机会从头开始一个新的嵌入式项目。

对系统的主要约束是:

  • 它需要一个基于网络的界面。
  • 需要实时处理输入(因此需要真正的 RTOS)。
  • 可用内存为 32MB RAM 和 FLASH。

该团队之前使用的操作系统是 VxWorks、ThreadX、uCos、pSOS 和 Windows CE。

有没有人有关于操作系统选择的比较或贸易研究?

还有其他我们应该考虑的操作系统吗?(我们建议使用 eCos 和 RT-Linux)。

编辑 - 感谢您迄今为止的所有回复。可惜我不能全部标记为“已接受”。

0 投票
9 回答
7565 浏览

c++ - 嵌入式硬件测试自动化

有没有人成功地直接在嵌入式硬件上进行自动化测试?

具体来说,我正在考虑为硬件层模块自动执行一系列单元测试。我们需要对我们的硬件层代码有更大的信心。我们的很多项目都使用中断驱动定时器、ADC、串行 io、串行 SPI 设备(闪存)等。

这还值得努力吗?

我们通常针对:

处理器:8 位或 16 位微控制器(一些 DSP 的东西)
语言:C(有时是 c++)。

0 投票
4 回答
1045 浏览

multithreading - 混合 RTOS 和循环执行程序是否有意义?

在一个小型嵌入式系统项目中,我们有一些希望在线程中运行的代码,因此我们选择在嵌入式 RTOS (eCos) 之上构建。

以前,我们在 main() 中使用了一个循环执行程序,它驱动每个任务都实现为状态机。对于某些任务,我们遇到了需要将任务分解为许多细粒度状态的问题,从而使代码更加复杂。

当切换到 RTOS 时,我们发现如果我们将每个单独的任务分配给它自己的线程,每个线程堆栈的内存使用量会迅速增加。(我们只有 64k 并且需要用于通信缓冲区的内存)

我们正在考虑为我们的通信任务使用一个线程,并为循环执行程序使用另一个线程。循环执行器将驱动其他逻辑任务。

像这样混合 RTOS 和循环执行是否有意义?

0 投票
2 回答
5894 浏览

embedded - 一个任务如何在多个 vxworks 队列上等待?

我们有一个 vxWorks 设计,它需要一个任务来处理通过两个消息队列发送的高优先级和低优先级消息。
给定优先级的消息必须按 FIFO 顺序处理。

例如,按照接收顺序处理所有高优先级消息,然后处理低优先级消息。如果没有高优先级消息,则立即处理低优先级消息。

有没有办法做到这一点?

0 投票
7 回答
33509 浏览

synchronization - 测试和设置是做什么用的?

在阅读了 Test-and-Set Wikipedia entry之后,我仍然有一个问题“Test-and-Set 将用于什么?”

我意识到您可以使用它来实现 Mutex(如维基百科中所述),但它还有什么其他用途?

0 投票
16 回答
5493 浏览

c++ - C++ 在嵌入式系统中的使用

在嵌入式系统中应该避免 C++ 的哪些特性?

请按原因对答案进行分类,例如:

  • 内存使用情况
  • 代码大小
  • 速度
  • 可移植性

编辑:让我们使用带有 64k ram 的 ARM7TDMI 作为目标来控制答案的范围。

0 投票
2 回答
1046 浏览

embedded - 如何定义自己的 errno 值?

在开发将在内核空间中运行的模块(设备驱动程序、中间件等)时,我们希望有一些方法来捕获操作可能失败的原因。

在 VxWorks 中,errno 机制似乎是一个很好的方法。

是否可以定义我自己的 errno 值?

0 投票
7 回答
392 浏览

c - 将数据添加到闪存中的段如何会破坏程序的时序?

我有一个实时嵌入式应用程序,主要周期以 10KHz 运行。它在配置为从闪存启动的 TI TMS320C 上运行。我最近在一个源文件中添加了一个初始化数组,突然之间时间被搞砸了(以一种太复杂的方式无法很好地解释——本质上串行端口写入不再按时完成。)

这件事让我感到困惑:

  • 什至没有访问新数据,只是声明了一个初始化数组。
  • 它取决于大小 - 仅当数组大于 40 个字时才会出现问题。
  • 我知道我没有溢出链接图中的任何数据段。
  • 没有数据缓存,因此不是由于破坏了缓存一致性。

关于如何简单地增加闪存中 .cinit 段的大小会影响代码的时序的任何想法?

附加信息:
我认为代码可能已经移动,但它与数据分离良好。我通过内存映射验证了所有代码段在错误之前和之后都具有相同的地址。我还验证了没有一个段是完整的 - 地图中唯一更改的地址是 .cinit 部分中的少数。该部分包含用于初始化 ram 中的变量的数据值(如我的数组)。在 main() 被调用后,它不应该被访问。

0 投票
6 回答
5727 浏览

embedded - 适合初学者的简单串行 AVR 编程器

为 AVR atMega 和 atTiny 制作串行(RS232)编程器的便宜又好方法是什么?网上有好几种电路,但哪一种更好呢?

我希望能够使用一些标准工具从 Linux 和 Windows 对我的控制器进行编程。

0 投票
10 回答
2564 浏览

c - 如何通过良好的设计保留堆栈空间?

我正在用 C 语言为带有 RTOS 的 RAM 受限嵌入式微控制器编程。

我经常将我的代码分解为短函数,但每个函数调用都需要更多的堆栈内存。每个任务都需要他的堆栈,这是项目中重要的内存消耗者之一。

是否有替代方法可以使代码保持良好的组织性和可读性,同时保留内存?