问题标签 [mcu]
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.
arm - 更改链接描述文件以将数据存储到 DTCM RAM 后的 STM32H7 问题
我正在使用 STM32H755ZI MCU。这个MCU有1MB RAM,其中512KB可以被M7 Core直接访问。我必须存储 45000 个浮点样本,其大小约为 180KB。
我的第一个问题是,在存储了大约 12000 个样本后,我的程序崩溃了......当我只存储 30000 个样本时,程序正常工作......
1-第一个问题:可能是什么原因?
我决定将两个数组存储在 RAM 中,并将第三个数组存储在 DTCMRAM 中。每个阵列的大小约为 60KB,DTCM RAM 的大小为 128KB。我应该更改 linker_script 文件。
这就是我定义数组的方式:
作为局部变量进入主函数:float Data_Set_X[12000]={0}; 浮动 Data_Set_Y[12000]={0};
作为全局变量: attribute ((section(".dtcmram"))) float Data_Set_Z[12000];
这是我使用的内存映射文件 MCU: 在此处输入图像描述
这是默认的链接器脚本:
我检查了从 0x20000000 开始的 DTCMRAM 的地址。现在,在这些更改之后,程序的性能变得更糟,在将 3640 个样本存储到 RAM 后,程序停止工作....它崩溃了....对我来说似乎很奇怪的另一件事是构建分析器显示了128KB ....也许如果我找到增加它的方法,那可以在不使用DTCM RAM的情况下解决我的问题...有人知道这个问题吗? 在此处输入图像描述
为了使用 DTCM RAM,我应该如何更改链接描述文件?有没有其他方法可以解决上述存储 450000 个样本的问题?
对于上述问题,我将不胜感激并提供帮助或反馈。先感谢您。
stack - 嵌入式 MCU 中的堆栈
当我们谈论小型 8 位嵌入式 MCU(如 8051 变体和 PIC18F 等)中的堆栈时,C 使用堆栈来存储局部变量。它是指内存中的硬件堆栈还是软件堆栈?
uart - 为什么我的 PIC MCU 在串口上发送垃圾而不是正确的单词?
我编写了一个简单的代码来使用 PIC18F26K22 MCU 向 pc 发送一些字符串。此代码适用于其他一些 MCU,但在此 MCU 上我得到连续的 0xFF 输出!
如果我写 TXREG2='k' 它确实有效!但是对于发送字符串,程序似乎停留在 pc_write 函数上,因为 RA0 引脚没有打开关闭并且 pc 接收到连续的 0xFF 并且永远不会结束!
我究竟做错了什么 ?!。
提前致谢 。
这是代码(之前在项目属性中定义了 20 Mhz 频率)
server - 我需要将媒体流从服务器转发到服务器吗?SFU和MCU相互连接的架构
我有一个项目需要将基于 WebRTC 的连接从服务器转发到服务器。我必须这样做的原因是我想测试一个 SFU 和 MCU 媒体服务器相互连接的可扩展架构。场景是这样的:
- 客户端 A 与服务器 B (SFU) 连接(使用 WebRTC API,如 getUserMedia() 和 RTCPeerConnection(),...)
- 服务器 B (SFU) 找到一种将实时流转发到服务器 C (MCU) 的方法
- 服务器 C (MCU) 将该流发送到连接到服务器 C 的 WebRTC 客户端 D
我想出了一些这样的解决方案:
- 从服务器 B 获取流后,我需要找到一种将流转发到服务器 C 的方法。我需要来自服务器 B 的没有 getUserMedia() 的 MediaStream。我已经读过可以从“a”创建非本地媒体流源自网络的流”,但无论如何我都没有找到在没有标签元素和 getUserMedia() 的情况下创建它。
- 我可以从服务器 B 的 MediaStream 中捕获 RTP 数据包。然后使用 rtp url 发送它,例如 rtp://xxxx:port。然后我从服务器 C 创建一个空 MediaStream。但我不知道将 RTP 数据包提供给空 MediaStream。
谢谢你的帮助。我真的很感激这一点。
stm32 - 功能安全和 HAL 代码生成器
我目前正在努力实现嵌入式项目的功能安全。在合格工具和流程链中的许多其他主题中,还有由 STM32CubeMX 生成的 STM32 MCU 的 HAL 代码。
该工具生成的代码有助于安全相关系统的可执行代码。所以在我看来,我会把它评为T3。这意味着必须根据安全标准开发工具本身
由于任何安全文档中都没有提到这个软件,我不认为 STM32CubeMX 是一个合格的工具。尽管如此,如果我不想自己编写它,我将不得不使用这个软件生成的代码(我认为这更容易出错)
所以我想知道如何处理这种特殊情况。如果我对生成的代码进行某种验证测试或审查,是否可以使用该代码?我怎样才能获得足够的信心,是否有一些现有的指导方针?
mcu - 有什么理由不在 MCU 上增加 .bss 或 .data 部分的大小?
我有点惊讶我找不到这个问题的答案,所以我就问一下。我有一个非常大的查找表,它未初始化,因此将放置在我的 TI TMS320F280049 MCU 的 .bss 部分中。毫不奇怪,bss 部分为此太小了。
所以我想了几种方法来解决这个问题:
- 增加 .bss 部分大小
- 初始化 LUT(在我的情况下这不是必需的)并增加 .data 大小直到它适合那里。
- 为这个 LUT 创建一个专用的 RAM 部分(必须是 RAM,由于访问时间较慢,闪存不够用)
由于缺乏经验,我无法真正判断哪种变体最好。有什么理由不应该使用 .bss 和 .data 的部分大小?
提前感谢您抽出宝贵时间回答!
i2c - 如何从 BNO085 传感器读取数据
如何通过I2C读写BNO085传感器中的数据。I2C 接口是可用的传感器,但数据表中没有可用的寄存器数据。
pwm - 能够通过 BLHeli_S DShot600 软件使用 PWM
我安装了 esc 的racerstar 4in1 blheli_s。我无法使用来自 arduino 的 PWM 信号使电机转动。它说 DShot600 协议,但我不想使用它。生产商告诉我我可以使用 PWM。任何人有同样的问题或任何可能的修复?
c - 如何在拆分部分中链接 IAR 中更密集的代码?
我在IAR Embedded Workbench for STM8 (版本 3.11.1)上为STM8L151G6制作程序,我需要将指令放在 0x008426 地址。我这样做。在 C 代码中:JPF 0xf000
在 .icf 文件中:
链接器以以下方式构建代码:
这是正确的。但是范围 [从 0x008080 到 0x00842b] 是空的,所以代码并不紧凑。我松了近1K字节,对于stm8 MCU来说太多了。例如 object float.o (size 0x3a6) 可以放在这个范围内,但链接器不会这样做。有什么方法可以告诉链接器执行更密集的代码并用对象填充空的部分。谢谢你。
mcu - 在栅极上使用 1M pll-down 电阻时无法开启 n-mos
请原谅我英语不好。我正在使用 ATMGA328P MCU 来控制需要大约 500ma 电流才能工作的点火器。为了提供这样的电流,我使用 AO3400A N-MOS 来控制点火器。在早期设计中,我没有使用 pll-down 电阻。当 MCU 在其栅极上输出 5V 电压时,N-MOS 可以点燃点火器。但是上电时点火器可能会意外点燃(MCU在此期间正在复位,IO不稳定)。所以我在 N-MOS 的栅极上放了 1M 下拉电阻,当 MCU 复位时提供 0V。它成功地避免了意外点火。但是我发现当MCU输出HIGH时,N-MOS不能再点燃点火器了。
我的问题是:为什么这么大的电阻使N-MOS不能工作?根据 MCU 的数据表,其 IO 可提供最大 40ma 的源电流。在我看来,它相当大,这意味着 1M 电阻不会降低 IO 在 N-MOS 栅极上的驱动能力。