问题标签 [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.
c - 在延迟函数中防止溢出
我在我的一个项目中有一个小的延迟函数,我使用我的 MCU 的定时器外设自己编写了这个函数:
静态无效延迟100Us(无效)
该计数器是一个具有 10ns 分辨率的自由运行硬件计数器,因此我编写了该函数以提供大约 100us 的延迟。我认为这原则上应该有效,但是可能存在计时器溢出小于 10000 的情况,因此 ctr2 将被分配一个超过 ctr 实际可以达到的值,因此我最终会陷入无限循环.
我需要在我的项目中使用这个计时器产生一个延迟,所以我需要以某种方式确保我总是得到相同的延迟(100us),同时保护自己不被卡在那里。
有什么办法可以做到这一点,或者这只是我无法通过的限制?
谢谢!
编辑:
html - HTTP 1.1 GET 请求太快,服务器无法响应,导致 TCP 重传
我正在 MCU 上制作带有 RTOS 的网络服务器。网络库使用 HTTP 1.0 并关闭 TCP 套接字并在每次请求后重新侦听。
我正在服务的网页有多个 .js 文件,它需要在 html 完全加载后加载。
发送 html 内容后,Web 浏览器立即发送“GET /file.js HTTP/1.1”消息。然后,在 Web 服务器最终能够处理它之前,使用 TCP Retransmission 重新传输此消息 3 或 4 次。
问题1:这种快速传输是否是由于Web浏览器仍在尝试不关闭连接的HTTP 1.1协议?来自我们服务器的内容状态回复消息是 HTTP 1.0,但是 Web 浏览器不断地使用 HTTP 1.1 请求 GET。
问题 2:有没有办法让网络浏览器放慢速度,这样它就不会因为 TCP 重传而阻塞网络?
任何建议都是有帮助的。
spi - PIC18F26Q43 SPI 从机不接收数据
我想要两个 PIC18 通过 SPI 进行通信。从机具有带有 FIFO 和独立 RX 和 TX 寄存器的新 SPI 模块。由于某种原因,我无法接收数据。我想我错误地配置了模块。我还使用 SS 中断来准备传输。在芯片选择时,我交换缓冲区并初始化计数器。这部分有效。我还在示波器上看到了主控的时钟和数据信号。但是,不会触发 TX 和 RX 的中断。
这是配置:
无效 spiInit() { spiTransferComplete=0;
}
这是中断程序:
}
go - Go 支持 MCU 吗?
我已经探索过,Go 是否支持微控制器单元。得到了一些关于TinyGo的信息。怀疑 TinyGo 是否等同于 Linux 中支持的 Golang。
tcp - 用于互联网连接的 LPC 1769 以太网 MAC
我正在尝试将 LPC 1769 用于 IOT 应用程序。我想在 MCU 代码中加入一个 MQTT 客户端。但是了解 MQTT 客户端需要 TCP/IP 堆栈。在阅读数据表时,我了解到 LPC 1769 仅支持以太网 MAC。我有两个查询如下
- 由于 TCP/IP 堆栈不是建立在 MCU 上的,MCU 不能仅使用以太网 MAC 连接到互联网吗?
- 如果不用于互联网连接,MCU 上的独立以太网 MAC 选项有什么用?
assembly - 如果我不将 8051 中的端口设置为输入或输出会怎样?
我是初学者,最近才开始,所以如果这是一个愚蠢的问题,请多多包涵。所以在 8051 单片机中我们使用
MOV P1, #00H
或MOV P1, #0FFH
将端口分别设置为输入或输出。我的问题是,如果我没有特别提到端口是输入或输出,程序还能工作吗?我正在尝试实现一个查找表,其中 P1 将获取输入(0-9)并在 P2 中显示其正方形。
c - STM32 CAN 通信 Rx 期间接收随机数据字节
我正在为我的项目使用带有 CAN 通信的 STM32F103RBT6 Nucleo 板。我使用 Microchip CAN Bus Analyzer(充当节点)来传输 CAN 数据。
项目设置: CAN 消息流来自:CAN Bus Analyzer --> CAN Transceiver --> STM board。我只需要从 0x581、0x582、0x583、0x584、0x4A1、0x4A2、0X4A3、0X4A4 ID 接收消息。为了实现这一点,我已经应用了相同的过滤器。
问题: 在 Keil 的调试器模式下,我能够看到传输的 CAN 消息,并在“RxData”中正确接收。但是,当我尝试发送 4 字节长度的数据时,从 1 到 4 的 RxData 数据字节填充了与我发送的完全相同的消息,但数据字节 5 到 8 也被随机填充(在理想情况下,字节 5 到 8 应该都为零)。仅当我发送字节长度为 4 的数据时才会出现此问题。我尝试发送不同长度的数据字节(4 个除外),它工作得很好。问题仅在我尝试发送长度为 4 的数据字节时出现。我在下面附上了我的整个程序代码。并附上问题的截图。如下请见。
截图: 案例一: ID=581;DLC = 8; 在此处输入图像描述
案例2:ID = 581;DLC=6; 在此处输入图像描述
案例3: ID=581;DLC=2; 在此处输入图像描述
案例4:(问题) ID = 581;DLC=4; 在此处输入图像描述
案例5:(问题) ID= 4A1;DLC=4; 在此处输入图像描述
此问题仅与长度为 4 的数据字节有关。如果有人可以帮助我解决此问题,可能会有很大帮助!
python - Python可以做工厂方法设计模式吗?
我在C中使用函数指针数组完成了它。指针被随机访问并用于调用它们的指向函数,该函数在WS2812B LED 灯条中运行独特的动画光图案[使用ADAFruit NeoPixel 库]。但是,我想对它进行OOP [对于 1,'因为 OOP 使设计新动画变得更容易]!
我在C++中尝试过,但已经有几十年了,所以我生疏了。这让我处于一个联系点——我是重新学习C++,还是以此作为最终学习Python的动力?
这就是为什么。这是什么:
由于这在内存不足的MCU环境中运行,我希望动画例程只占用所需的内存,然后在完成后释放该内存。所以,我想避免这样的事情:实例化一堆动画对象,并将它们加载到一个数组中,以便随机索引。这将一次将所有动画对象所需的内存总和塞进堆/堆栈——这将对 MCU 中可能存在的动画数量施加更大的限制[特别是因为 RAM 通常比 ROM 供应短缺/舞会]。
不,我想用更像指向“实例化”函数的指针来填充该数组,当被调用时,实例化一个选定的动画对象。然后,当该动画完成时,“删除”/刺激析构函数/等。所以内存被完全清除[即没有内存泄漏]。
我的C++实现充满了内存泄漏 [C++ 中没有内存管理] —— 不过,比我刚开始时要少得多,所以我正在变得更好 [有点蒙蒂点头,那里]。
那么......我是继续追求恢复我的C++辉煌[我曾经是“专家”],还是放弃C++并使用Python?唯一的转折点是:PYTHON能胜任吗?
好的,另一个引爆点可能是我对运算符重载的喜爱;)
顺便说一句:我目前使用的 MCU 是SeeedStudio XIAO,它是一个快速和铁质的小虫子,所以,即使 Python 比 C++ 更慢一点[因为额外的开销],不用担心 [太多?]。
events - 事件和中断之间的区别
我知道这个话题很久以前就被争论过了(链接:interrupt and event 之间的区别),尽管我认为答案不够充分。原因是下一个:当人们谈论事件与中断时,事件一词表示硬件而不是软件。而且,根据那个解释,事件是可以预测的,不是突然发生的事情,但是在唤醒事件的情况下,这不可能是真的,因为这个事件不是“预期的”,它是自发的。例如,可以查看 stm32 数据表并注意到有一个所谓的唤醒事件启用寄存器。这个“事件”既不涉及要执行的特定代码,也不涉及与软件相关的东西。