Questions tagged «embedded»

嵌入式系统是一种计算机系统,通常被设计为执行具有实时计算约束的一个或几个专用功能。它被嵌入为通常包括硬件和机械零件的完整设备的一部分。


6
最小的嵌入式Linux发行版?
我想问一下那里的专家。.什么是最好的嵌入式Linux发行版: 闪存〜700Kb 内存〜256Kb 处理器:高端手臂皮质M3(例如STM32系列产品) 所需模块:-内核-基本驱动程序集:USB /网络(用于WiFi-无AP,仅客户端,无安全性)/ SPI / Uart / I2C 这完全有可能还是我在做梦? 这个想法是使用5美元的高端CortexM3,并且不使用任何外部存储器,这样我就可以享受SDIO / WiFi等可用的驱动程序。 我更新了有关WiFi的问题。WiFi是工厂客户端的一种简单运行方式。没有什么幻想,如果我适合的话也许会哭。 另一个更新:uCLinux怎么样?

4
恢复出厂设置如何工作?
所有嵌入式设备都包含“恢复出厂设置”选项,如果出现问题,用户可以使用该选项重置其设备。 我正在STM32板上开发固件。该固件包括一个引导加载程序,该加载程序允许通过UART升级应用程序(通过发送包含新映像的二进制文件),我想添加另一个功能:恢复出厂设置。当用户选择此选项时,电路板应加载原始图像。 什么是出厂重置?是将整个二进制文件再次加载到内存中,还是只是调用一个函数来重新初始化最终用户修改的变量? 最佳做法是什么? 原始FW存放在哪里?是内置闪光灯还是外接闪光灯?

2
SPI安全被打断吗?
我正在从固件内部写入microSD卡,但这是优先级最低的任务,因此在读/写过程中可能会被其他任务打断。 现在,假设我使用UART与该microSD卡进行了通信。读取过程中的问题是硬件RX FIFO会溢出,因此我可以努力的最大延迟为(FIFO大小×字节/秒),而在写入过程中将没有问题,因为另一端只会等到我发送下一个字符。 现在我正在使用SPI怎么工作?这种情况是否与写入无关紧要,而对于读取却取决于SPI FIFO大小?

6
在嵌入式系统中使用全局变量
我开始为产品编写固件,我是这里的新手。我浏览了许多关于不使用全局变量或函数的文章。在8位系统中使用全局变量是否有任何限制,还是完整的“否”。如何在系统中使用全局变量,或者应该完全避免使用全局变量? 我想就此主题向大家提出宝贵的建议,以使我的固件更紧凑。
17 c  embedded  firmware 

3
为什么我首先需要设置一个值,然后再设置嵌入式处理器中的GPIO方向?
我有一个全职的固件工程师职位。最近,我接到了一项任务,以检查GPIO配置并根据需要更改设置。我发现一些引脚配置错误,因此自然而然地我重新配置了它们,但是我被告知我按错误的顺序进行了配置。这是我在说的: 之前:GPIO1.direction = INPUT; 之后:GPIO1.direction = OUTPUT; GPIO1.value = 0; 但是,在代码审查期间,我被告知我需要将初始化顺序更改为以下内容: GPIO1.value = 0; GPIO1.direction =输出; 换句话说,先设置值,然后再设置引脚的方向。我还被告知,这是现代处理器上的方式,因为它们使用两个寄存器,一个用于输入,一个用于输出,但是旧处理器仅使用一个寄存器,因此操作顺序无关紧要。 (注意:现代= ARM Cortex M3及更高版本,老= Intel 8051) 我要求在工作中提供更好的解释,但没有得到很好的答案。这就是为什么我决定在这里问。 所以这是我的问题: 为什么初始化顺序在新处理器上很重要? 为什么在旧处理器上初始化的顺序无关紧要? 他们在现代处理器中谈论什么两个寄存器? 他们在旧处理器上谈论什么单一寄存器? 如果有人可以提供某种图表,那会更好。
16 embedded  gpio 

1
什么是位带?
我正在阅读ARM Cortex M3参考手册,并出现“位带”,“位带区域”和“位带别名”的概念。 什么是位带?
16 embedded  arm 

4
我从哪里开始嵌入视频?
我的老板最近问我,设计一种可以连续录制质量较低的视频并将最后几个小时存储在某种形式的内部存储器中的产品会有多困难。我以前从未对视频进行过任何开发。在哪里开始我的设计的好地方? 您对MCU有什么建议吗?最近,我一直在将Silicon Labs MCU用于其他设计。 使项目尽可能简单的最佳相机类型是什么? 哪种格式存储视频最好? 我需要视频编解码器还是仅需要支持播放的设备?该设备可能只需要能够将视频传输到PC上进行播放。 您能提供的任何见解将不胜感激! 添加: 我一直在寻找CMOS图像传感器上的数码相机。我看到一家名为OmniVision的公司生产了几款。这些数据表说:“捕获的数据可以通过标准并行数字视频端口(DVP)或单域MIPI高速串行接口进行传输”。 我从未听说过任何一个。您如何将其放入图像文件?用C?
16 video  embedded 

3
为什么在数据线上看到一个奇怪的“缺口”达几个逻辑1?
我正在尝试构建Z80家用计算机,以获得一些逆向计算的乐趣,并自学电子设计的基础。为了进行概念验证,我已经在前几周成功地在面包板上组装了一个基本系统。 当前的原型非常简单。我使用一个由74HCT04 Pierce振荡器驱动的4 MHz晶体作为系统时钟,两个处于透明模式(LE高电平)的74HCT573锁存器用作16位地址总线的缓冲器,另外两个处于相反方向的74HCT573由双向数据控制RD并NOT RD作为双向数据总线缓冲区。我附上了在系统总线上 100 ns的 AT28C256 EEPROM(仅解码16-KiB)和两个150 ns的 8-KiB SRAM芯片。我使用一个74HCT42生成CS信号OE,并将EEPROM的硬接线从低WE到高,仅留下一个CS信号来控制EEPROM。 面包板上的所有东西都很嘈杂,但是在我完成每个阶段后,系统似乎都可以正常运行。现在它可以从EEPROM获取指令,从SRAM读取数据或向SRAM写入数据,并且它具有由另一个锁存器74HCT573制成的串行端口,D0连接到D0,LE则(NOT (IOREQ NAND WR)),输出从出来Q1,换句话说,只有一个输出端口无需增加解码逻辑。我已经编写了一个占用大量CPU / RAM的基准程序,并且我的计算机可以输出预期的结果。Memdumps还显示Z80可以正确地从EEPROM读取所有字节,因此一切正常。 但是当我试图探究 D0数据总线的引脚时,我发现一些明显的逻辑1输出存在一些奇怪的“缺口”。 并且它们似乎总是CS在EEPROM信号变为活动状态后不久出现一些逻辑1 ,例如,这是叠加在蓝色EEPROM CS信号上的怪异陷波的捕获。 我试图找出问题所在,所以将SRAM的所有CS引脚硬接线到HIGH,从而有效地将它们从系统中删除,并且我编写了一个简单的测试程序,该程序无法访问内存。 .org 0x00 di xor a loop: out (0x00), a inc a jp loop 但是问题并没有改变,在某些情况下仍然总是出现怪异的“缺口”MEMRQ /” CS(蓝色)变低和/或(因为现在基本上是单芯片)之后逻辑1 。 SRAM的所有CS引脚都为HIGH,因此该系统几乎只有一个AT28C256 EEPROM芯片作为存储器,而一个锁存器作为输出端口。该系统还具有一个由Atmega328p制成的系统内编程器,可以在DMA请求过程中即时对EEPROM进行重新编程,但是我认为这不是罪魁祸首,因为我将编程器的所有数据和地址输出均设为三态,并且在添加程序员之前,我就已经看到了缺口。 因此,必须在操作码提取周期中创建“缺口”。这些是什么? 我有一些假设: 没错,这只是由于面包板的信号完整性差而引起的,并且它将在设计良好且去耦良好的PCB中自动消失。面包板存在各种信号完整性问题:阻抗不匹配,反射,寄生电容,串扰,EMI / RFI。跨电路板的长总线可能会在一定程度上加剧该问题。 如果是真的,您能否解释“缺口”的性质?这种现象在EE中有名字吗?我以前见过许多过冲和振铃,但从未见过“陷波”。为什么我只在某些逻辑级别看到它? 定时。EEPROM输出或其他逻辑电路的短“稳定时间”是否可能在总线上引起这种奇怪的影响? …

4
如何在ARM Cortex A9上实现关键部分
我正在将一些旧代码从ARM926内核移植到CortexA9。此代码是裸机代码,不包含操作系统或标准库(全部自定义)。我遇到了与竞态条件有关的故障,应该通过对代码进行严格的分段来避免这种情况。 我想对我的方法提供一些反馈,以了解我的关键部分是否可能未正确为此CPU实施。我正在使用GCC。我怀疑有一些细微的错误。 另外,是否有一个开源库具有针对ARM的这些类型的原语(甚至是一个很好的轻量级的spinlock / semephore库)? #define ARM_INT_KEY_TYPE unsigned int #define ARM_INT_LOCK(key_) \ asm volatile(\ "mrs %[key], cpsr\n\t"\ "orr r1, %[key], #0xC0\n\t"\ "msr cpsr_c, r1\n\t" : [key]"=r"(key_) :: "r1", "cc" ); #define ARM_INT_UNLOCK(key_) asm volatile ("MSR cpsr_c,%0" : : "r" (key_)) 该代码的用法如下: /* lock interrupts */ ARM_INT_KEY_TYPE key; ARM_INT_LOCK(key); <access registers, …
15 c  embedded  interrupts 

2
有没有人评估过NuttX RTOS?
今天在阅读《 Linux用户日记》时,我偶然发现了有关NuttX RTOS 的一些内容。我检查了他们的网站,并对其功能集和将其放入8052的能力印象深刻。我发现有趣的是它支持POSIX,这是我为我的一个客户内部RTOS所做的工作。这个功能似乎比内部RTOS多一些。 是否有其他人听说过NuttX并尝试过?如果是这样,它与FreeRTOS等其他RTOS相比如何?
15 embedded  rtos 

1
NAND闪存如何写入?
下面是我对NAND闪存操作的理解的图片。 NAND闪存的工作方式是首先擦除单个块中的所有单元(本质上将其设置为1),然后有选择地写入0。我的问题是-由于字线在单个Page中的所有单元之间共享,因此NAND控制器如何将0编程为页面中的特定单元? 对于NOR闪光灯,很容易看到可以通过使用热电子注入(在整个单元上施加高压)来对特定的单元进行编程。但是对于NAND,由于NAND单元彼此串联,所以不可能这样做,并且不可能对特定的单元施加高压。因此,在NAND中完成的工作是量子隧穿,即向字线提供高电压以写入0。我不清楚的是如何使该电压具有选择性(换句话说,因为字线在a中的单元之间共享)页面,将单个位编程为0的高压不应同时将页面中的其他位也设为0)。
14 embedded  flash 

3
非抢占式操作系统的好处是什么?这些好处的价格是多少?
对于裸金属MCU,与具有后台循环和计时器中断体系结构的自制代码相比,非抢占式OS的优势是什么?对于采用非抢占式OS的项目,而不是使用具有后台循环体系结构的自制代码的项目,这些好处中有什么足以吸引人? 。 问题解释: 我非常感谢所有回答我的问题。我觉得答案已经差不多了。我在这里向我的问题添加解释,这表明了我自己的考虑,并可能有助于缩小问题范围或使其更加精确。 我试图做的是了解一般情况下如何为项目选择最合适的RTOS。 为此,更好的理解基本概念以及不同种类的RTOS的最吸引人的好处和相应的价格将有所帮助,因为没有适用于所有应用程序的最佳RTOS。 几年前,我读了有关OS的书,但现在不再随身携带。在我在此处发布问题之前,我在互联网上进行了搜索,发现此信息最有帮助:http : //www.ustudy.in/node/5456。 还有很多其他有用的信息,例如不同RTOS网站上的介绍,比较抢先式调度和非抢先式调度的文章等。 但是,当选择非抢占式RTOS时,我没有发现任何话题,最好是使用计时器中断和后台循环编写自己的代码。 我有自己的答案,但我对它们不满意。 我真的很想知道更多有经验的人的答案或看法,尤其是在行业实践中。 到目前为止,我的理解是: 无论使用还是不使用操作系统,总是需要某种调度代码,即使它采用如下代码形式: in the timer interrupt which occurs every 10ms if(it's 10ms) { call function A / execute task A; } if(it's 50ms) { call function B / execute task B; } 好处1: 非抢占式OS为调度代码指定方式/编程风格,以便工程师即使以前不在同一项目中,也可以共享同一视图。然后,以与概念任务相同的观点,工程师可以处理不同的任务并对其进行测试,并尽可能独立地描述它们。 但是我们真的能从中获得多少呢?如果工程师在同一个项目中工作,他们可以找到很好的方式共享相同的视图,而无需使用非抢先的OS。 如果一位工程师来自另一个项目或公司,那么如果他之前知道操作系统,他将获得好处。但是,如果他没有,那么再次学习新的操作系统或新的代码似乎并没有太大的不同。 好处2: …

17
如何压缩代码以获得更多闪存和RAM?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 我一直在为我们的特定产品开发功能。有人要求将相同功能移植到另一产品。该产品基于M16C微控制器,该微控制器传统上具有64K闪存和2k RAM。 它是一种成熟的产品,因此,只剩下132字节的闪存和2字节的RAM。 要移植请求的功能(功能本身已经过优化),我需要1400字节的Flash和〜200字节的RAM。 有没有人对如何通过代码压缩检索这些字节有任何建议?当我试图压缩已经存在的工作代码时,我需要寻找什么特定的东西? 任何想法将不胜感激。 谢谢。
14 embedded 

5
分析加速度计数据特征并设计滤波器
我有大约32秒的基本行驶场景25MPH正常道路上的加速度计数据,还有大约7个坑洼和一段崎rough不平的道路。加速度计用双面胶带安装在我的汽车仪表板上。 问题:我获得了来自加速度计的所有嘈杂数据,我需要采取一种简单的方法来检测是否发生了坑洞事件。以下是时域和FFT的几个数据图。加速度计在GForce中进行测量 基本上,我希望我的arduino能够非常准确地知道发生了坑洞,并且没有使用研究生水平的数学和技术。 以100hz采样的加速度计在Z轴上具有一个简单的50HZ RC低通滤波器 Here is the CSV data for the 32 seconds of accelerometer readings TIME, GFORCE format: http://hamiltoncomputer.us/50HZLPFDATA.CSV 更新:这是加速度计1000HZ的RAW全带宽,可以在Arduino上以最高采样率进行采样。直接CSV文件下载:大约112秒的数据 http://hamiltoncomputer.us/RAWUNFILTEREDFULLBANDWIDTH500HZ.csv 黑色轨迹为未经过滤的RAW加速度计原始数据:蓝色轨迹由带阻滤波器根据FFT,2HZ和12HZ支配的极限频率进行过滤。 坑洞事件在时域中如下所示: 不确定FFT中10到​​15HZ的分量是什么,是实际的坑洼,还是车轮相对于道路的车轮跳动,还是汽车的共振频率? FFT: 似乎是实际的坑洞事件,这是HPF @ 13HZ坑洞的主要特征似乎增强了 我希望能够实时检测和计数坑洼 我认为悬挂应该比10到13 HZ慢很多,这会引起晕车,这是违反直觉的 更新: 根据AngryEE的建议,我使用了加速度计1000HZ的全部带宽以及在arduino上可以获得的最大采样率。 FFT: 以下是坑洼事件及其周围一些颠簸和道路噪音的数据样本: 添加了二极管包络检测器电路,输出看起来相同...加速计始终输出0至3.3V电压,而不是负电压... 更新: 在许多路试中,我在Z轴上的车中从未超过1.6G的最高45 MPH,我使用rand()生成伪随机Gforce加速。 我的想法是,如果我可以查看1到3秒的数据窗口,可以计算Z轴的位移,但是我担心加速度计的漂移以及积分误差。我不需要在这里甚至达到90%的精度,> 70%的精度就可以了,但是如果我一次只观察一到三秒钟的位移,那可以实时进行吗?这样,我可以看到位移是否大于1英寸,2英寸,5英寸。位移越大,凹凸或坑洼越粗糙: 您能否检查我是否做对了,我基本上在桌面上进行设置,使用rand()生成从-1.6到1.6 G的随机加速度,以模拟的50HZ采样率捕获3秒的数据 如果像运行* nix一样,我正在使用Windows.h中的Sleep()进行20ms延迟,50HZ采样率 我只是想看看代码是否适合您,我还没有做环形缓冲区,我对如何实现它有点困惑:注释掉的代码来自我正在为此工作的类,但我还不了解100%。循环缓冲区将允许连续移动数据窗口吗? #include <cstdlib> …

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.