Questions tagged «embedded-systems»

“嵌入式系统是为大型系统中的特定控制功能而设计的计算机系统,通常具有实时计算约束。” 迈克尔·巴尔。“嵌入式系统词汇表”。中微子技术图书馆。检索2007-04-21,从Wikipedia复制。


7
嵌入式开发的单元测试时的最佳实践
我正在寻找一些针对嵌入式系统编写的单元测试代码的最佳实践策略。对于嵌入式系统,我的意思是代码,例如设备驱动程序,ISR处理程序等,它们与金属非常接近。 如果不借助ICE在硬件上进行测试,则无法进行大多数单元测试。有时,嵌入式单元还需要与其他刺激因素挂钩,例如机械开关,步进电机和灯泡。这通常以手动方式发生,自动化虽然很棒,但实现起来却又困难又昂贵。 更新资料 我遇到了一个C测试框架,该框架似乎在测试嵌入式项目中非常成功。它使用了模拟硬件的想法。查看Unity,CMock以及可能的Ceedling。 更新2016年7月6日 跨过cmocka-似乎正在更加积极地开展工作。

8
嵌入式编程是否更接近于电气工程或软件开发?[关闭]
我正在从事在微控制器上编写嵌入式C的工作。起初,我本以为在软件堆栈中嵌入编程对我来说太少了,但也许我在想错了。 通常我会放弃编写嵌入式代码的机会,因为我不认为自己是电气工程师。这是一个错误的假设吗?我是否能够为嵌入式系统编写有趣且有用的软件,还是会因为软件堆栈太低而踢自己? 我上了计算机科学学校,对编写编译器,考虑并发算法,设计数据结构以及开发框架感到非常满意。但是,我目前受雇为一名Web开发人员,这并未激起我刚才描述的有趣的事情。(我目前处理的问题是:“此复选框必须在左边4像素处”和“此日期格式错误”。) 感谢大家的投入。我知道我必须自己做决定,我只是想澄清一下成为嵌入式程序员的含义,以及是否适合我觉得有趣的事情。

2
Voyager任务的代码开发过程?
旅行者1号于2012年8月到达星际空间,是现存最遥远的人造天体。旅行者1号是在其双人航天器旅行者2号不久后发射的,旅行者1号探索了木星和土星的系统,发现了新月,活跃的火山以及有关外部太阳系的大量数据。 旅行者1号和旅行者2号的设计利用了罕见的行星对准技术,该对准技术在176年中仅发生过一次,并且仍然是历史上飞行次数最多的航天器。两架航天器都带有一个称为“黄金唱片”的时间胶囊,这是一个12英寸的镀金铜盘,上面装有声音和图像,这些图像和声音被选择用来向外星人描绘我们的世界故事。 我以为为该任务而开发软件的绝大多数人现在已经退休了,但是在过去的35年中,编程,编程语言到目前为止已经发展了。 因此,它于1977年发射升空。35年后,旅行者号到达星际空间。有几行代码,用什么语言编写?此任务(仍在执行中)背后的开发过程是什么? 那么,此任务中使用代码的更大计划是什么,代码库是用哪种语言编写的?

7
什么是CRC的更快替代方案?
我正在从dsPIC到PC进行一些数据传输,并且正在对512字节的每个块进行8位CRC校验,以确保没有错误。启用CRC代码后,我的速度约为33KB / s,没有它,则为67KB / s。 有什么替代的错误检测算法可以检查出更快的速度?

2
嵌入式C开发人员的良好单元测试示例
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 下周,我将与我的部门进行有关单元测试和测试驱动开发的演讲。作为其中的一部分,我将展示一些我最近编写的代码中的真实示例,但我也想展示一些我将在演讲中编写的非常简单的示例。 我一直在网上寻找良好的例子,但一直在努力寻找任何特别适合我们开发领域的例子。我们编写的几乎所有软件都是在小型微控制器上运行的深层控制系统。只要您远离“底层”层,就有很多C代码很容易适用于单元测试(我将在PC上而不是在目标本身上谈论单元测试):直接对话的东西到微控制器外设。但是,我发现的大多数示例都倾向于基于字符串处理(例如出色的Dive Into Python罗马数字示例),并且由于我们几乎从未使用过字符串,因此这实际上并不适合(关于我们的代码通常使用的唯一库函数)是memcpy,memcmp和memset,strcat 或正则表达式不太正确)。 那么,问题就来了:请问有人可以提供一些很好的功能示例,这些功能可以用来在实时会话中演示单元测试吗?在我的观点(可能会发生变化)中,一个好的答案可能是: 一个足够简单的功能,任何人(甚至只是偶尔写代码的人)都可以理解; 看起来没有意义的函数(即计算奇偶校验或CRC可能比将两个数字相乘并添加随机常数的函数更好); 一个足够短的函数,可以在一个人的房间里书写(我可能会利用Vim的许多剪贴板来减少错误……); 该函数以数字,数组,指针或结构为参数,并返回相似的内容,而不是处理字符串。 具有简单错误(例如>而不是>=)的函数易于插入,在大多数情况下仍然可以使用,但在某些特殊情况下会中断:易于通过单元测试进行识别和修复。 有什么想法吗? 尽管可能无关紧要,但是测试本身可能会使用Google Test Framework以C ++编写:我们所有的标头都已经包含了#ifdef __cplusplus extern "C" {包装器;到目前为止,这与我已经完成的测试效果很好。

8
如何在嵌入式设备上进行TDD?
我对编程并不陌生,甚至在AVR上使用过一些低级C和ASM,但我确实无法涉足更大规模的嵌入式C项目。 由于Ruby的TDD / BDD理念退化,我无法理解人们是如何编写和测试这样的代码的。我并不是说这是一个不好的代码,我只是不明白这是如何工作的。 我想更多地参与一些底层编程,但是我真的不知道该如何处理,因为它看起来就像是我习惯的完全不同的思维方式。我在理解指针算术或分配内存的方式方面没有问题,但是当我看到与Ruby相比C / C ++代码看起来多么复杂时,这似乎很难。 由于我已经为自己订购了Arduino开发板,所以我很想深入了解一些低级C并真正了解如何正确地做事,但是似乎高级语言的规则都不适用。 甚至有可能在嵌入式设备上或在开发驱动程序或自定义引导加载程序之类的东西时进行TDD吗?

4
如何采用敏捷方法开发固件/嵌入式系统软件?
我一直想知道如何在大型复杂的嵌入式系统软件(超过100位工程师)中应用敏捷方法。固件开发具有一些独特的特性,这些特性使敏捷开发变得困难(例如,直到开发周期的后期才提供硬件;一旦产品发布,就无法轻松更新固件;等等。) 这种开发的规范是详尽的文档和艰苦的同行评审。您无法获得简单的代码修复,例如重命名没有2-3个签名的变量。(我有点夸张,但这很典型。此外,很多人确实选择捷径,而项目经理甚至批准了捷径,尤其是在面临严格的市场期限的情况下。) 我想听听有关在固件开发项目中采用敏捷方法的任何技巧或指导。

3
您如何处理嵌入式系统中Scrum的非功能性工作?
我在嵌入式系统中有两个Scrum问题。首先,有许多任务要做,尤其是在早期阶段,这些任务是无法证明的。我们从开发板开始,没有操作系统,没有显示器,没有串行通讯,等等。我们没有六个冲刺的显示器。 前四个冲刺是: 获取RTOS和运行 创建编写网络和串行驱动程序的任务 编写按钮,通讯等中断例程 编写主要的数据库类和方法 编写串行调试菜单 这些任务大多数都不适合用户案例。实际上,进入整个系统的唯一接口是内置在sprint 3中的串行调试菜单,因此在sprint的末尾没有任何内容可以说明。甚至串行菜单也只供内部使用,而不是最终用户。尽管如此,我仍然想通过Scrum跟踪和管理这些开发活动。 我们最终写了“用户故事”这样的词组,例如“作为开发人员...”,我对此并不满意,但是在使用Target Process(www.targetprocess.com)时,没有积压的概念,任务或琐事。 其次,您如何处理发布和测试?对我们来说,这是真正的痛苦,因为测试人员没有硬件调试器,因此我们必须构建代码的闪存版本,并将其刻录到开发板上进行测试。测试人员在技术上不如开发人员那么敏锐,并且通常需要大量支持才能使它们在早期阶段正常工作(重置板子,连接串行通信等),甚至理解输出。 最后,关于完成的定义,只有在所有故事完成之前,冲刺才能完成。在测试人员验证之前,所有故事都是不完整的。无法避免“浪费”开发人员的时间给测试人员。换句话说,如果冲刺中的最后三个用户故事需要五天的时间进行测试,则必须在冲刺结束前五天对它们进行编码和单元测试。开发人员应该做什么?停止工作? 我正在开玩笑,但尝试遵守规则确实是一个问题。现在,我可以遵循规则了,但是我遇到的问题是,如果在测试之前无法将所有工作标记为已完成,它将使我的所有燃尽指标变糟。 我很想听听其他人如何处理这些情况。


2
嵌入式软件的功能编程
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 5年前关闭。 昨晚我正在和一个朋友讨论F#和函数式编程,他向我提出了一个有趣的问题。您将如何在功能上嵌入软件?我的意思是,就无状态代码而言,这似乎是很自然的选择,但嵌入式也需要非常节省内存,而我不确定这方面的功能。 关于嵌入功能的语言或软件包有什么建议吗?

8
为什么C在嵌入式软件市场占主导地位?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 现在几乎每个人都会说祝福: 性能! 好的,C确实可以编写运动代码。但是毕竟还有其他语言可以做到!而且现代编译器的优化功能非常强大。C是否具有其他语言没有的某些优势?还是在该领域根本不需要更灵活的工具?

1
对于嵌入式系统项目,包含东南亚字符集的绝对最低要求是什么?
我为一家已经开始将嵌入式计算机系统集成到我们生产的产品中的公司工作。我们拥有种类繁多的产品,它们遍布全球。此外,我们还设计了一些集成板,可以根据已刷新到系统的固件来满足多种目的。这样,我们不必为各种产品重新设计计算机硬件-我们要做的就是重写固件层来满足特定产品的需求。 由于这些硬件限制,更改我们的硬件需要采取一些行动,但是编写新软件要简单得多。 我们的产品之一有一个我们以前没有实现过的新要求,那就是需要用户输入文本。 当前,我们已经能够在资源中存储国际文本,并且只有必要的字体字符才被编译为位图图像。这意味着我们已经能够在最小的空间中存储像中文和日语文本这样的高表意语言,因为我们只使用了整个语言集中很小的一部分。 由于此新产品将要求我们的用户输入文本,因此我们将必须实现广泛的字符集。作为主要的PC开发人员,我对ASCII,Unicode,UTF-8等非常熟悉,但是,由于我们板上的FRAM数量有限,因此无法实现所有这些语言的完整字符集存储字体数据。 我的管理层希望能够使用最少的字符集来用于高度表意的语言。我相信日语(平假名?)也有语音字母。汉语,韩语,越南语等语言也有相似的语音字母吗?我很确定该问题的答案是“绝对,不是”,但这是一个值得询问的问题。 管理层提出了“软”要求,即我们只能使用大约8,000个字符的有限字符集来覆盖所有常用的主要语言。如果这不可能,我们需要根据有限的硬件资源寻找某种形式的替代方法来满足我们的需求。 我确信这个问题以前必须已经解决。是否有人需要在这样的约束下工作,同时又需要广泛的字体和字符编码系统的经验?如果是这样,您可以提供哪些智慧?

7
我们如何准确地从二进制/十六进制转换为汇编指令集?
因此,我最近一直在这里尝试学习一些嵌入式/汇编编程,并且甚至尝试学习最低级别的知识(门等)。 不过,有一件事使我感到困惑……是如何“获得”指令集。我在某种程度上了解gates / TTL等的工作原理,但是我看不到如何从中获取mov,add,clr等...? 这可能是一个愚蠢的问题....但是我的意思是我回想起第一个微处理器/控制器,并认为..他们究竟是如何设计指令集并使之工作的? 编辑:我想为清晰起见,假装我在谈论第一个微处理器,它们是如何从二进制转换为实际创建指令集的?

5
如今,哪些语言用于底层编程?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 6年前关闭。 当我听到诸如驱动程序,嵌入式系统,操作系统等的底层编程时,我会立即想到C甚至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.