问题标签 [samd21]
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.
arduino - 异步读取 I2C 数据后 SAMD21 错误写入串行
问题:在异步访问我的 I2C 设备(在主循环而不是阻塞循环中轮询它)后,一旦我写入 USB 串行端口,就会出现 CPU 异常
背景:我有一个在 Microchip Studio 下运行的 Arduino 项目(用于通过 J-Link 接口进行调试)。我正在通过 I2C 与 VCNL4010 接近传感器通信。我有一个有效的同步函数,可以读取接近度:
此代码工作正常,但会阻塞我的主循环,直到传感器读取完成。我需要避免阻塞,因为我也在控制电机。我写了一个异步版本,分为以下功能:
作为对串行命令的响应,我readProximityBegin
在主循环中调用并调用 update 直到readProximityReady
变为真,此时我使用readProximityResult
. 如前所述,一旦我在这一切之后写入 USB 串行端口,就会出现 CPU 异常(错误源于write
RTL 中的串行)。我不确定究竟是哪个异常,因为在 cortex_handlers.c 中,SAMD21 的 arduino 代码将各种异常路由到同一函数:
这是上面引用的我的 I2C 函数之一的示例:
debugging - 使用 VS Code 中的调试器读取 SYST_CVR 以获取滴答计数
我尝试使用 Visual Studio Code 中的调试器读取 SAMD21 上的 SYST_CVR 寄存器。我想这样做,以了解两个断点之间需要多少 CPU 滴答声。我发现,它应该存储在 0xE000E018 中。但是,如果我尝试在监视列表中读取此地址,我会得到一个不会改变的值。我还使用了 arduino 的 micros() 函数,它也应该基于 sysTick,它使用 SYST_CVR 值。因此,计数器应该运行。有没有办法从地址为 0xE000E018 的寄存器中读出正确的值,或者有没有另一种方法可以读出一个用调试器计算 CPU 滴答声的计数器?
谢谢你的帮助。
c - MPLAB X IDE / XC32 / SAMD21XPlained Pro / printf() 不工作
我正在使用一块SAMD21XPlained Pro
板子Mac (OS Big Sur)
,MPLAB X IDE v6.00 (XC32 compiler)
我目前在尝试通过该printf()
功能在我的终端上显示消息时遇到问题。
我是嵌入式编程的初学者,我尝试遵循有关STDIO 串行通信的教程:https ://www.youtube.com/watch?v=3pwdpYj5s_A&t=397s
根据本教程,我首先尝试只做 aprintf()
但我没有在终端上看到任何东西(我没有尝试scanf()
第一次尝试)。我唯一改变的是我包含了 stdio.h 文件,我用 a 做了第二次测试baud rate 9600
(因为我真的不知道如何定义波特率,我想像那样测试)。
我在几个论坛上读到问题来自XC32
编译器默认使用的事实,UART2
而printf()
必须使用UART1
在终端上显示。一些人建议xc.h
重新定义默认值UART1
( __XC_UART = 1
),但这似乎仅适用于PIC32MX
µC。根据我对XC32
编译器文件的研究,xc.h
文件 forPIC32MX
与for 的文件不同,PIC32/SAM
而仅用于PIC32MX
定义的文件__XC_UART
。
我还尝试将“ Microchip Developer Help ”中针对“ Redirect stdout for Use With printf() ”的建议应用到以下XC32
类别:
https ://microchipdeveloper.com/xc32:redirect-stdout
问题是它似乎也仅适用于PIC32MX
µCs(p32xxxx.h
包含在代码开头的文件仅存PIC32MX
在于XC32
编译器中)。
经过几天的研究,我尝试了不同论坛上提出的许多解决方案,但仍然找不到有效的解决方案,所以我想知道您是否有想法?
谢谢 !
micropython - micropython 和 sys.implementation-在 XIAO SAMD21 和 XIAO RP2040 上不同
我正在使用 1.18 版在 SEEED XIAO (SAMD21) 上使用 micropython,并希望使用“已编译”库 ( .mpy
) 来节省空间。我有版本 5 的 mpy-cross 对我来说没问题。我也想要浮点数,所以我使用该选项构建了一个新的 micropython——从最新的 (20220302) github 版本——并注意到 mpy-cross 已更新到版本 6。我想我会检查一下.mpy
使用了哪些版本micropython 文档建议使用一些代码来检查.mpy
使用sys.implementation
对象的版本。我注意到了各种各样的sys.implementation
实现。
XIAO SAMD21 上由 micropython 20220117 发布的 1.18 版本给出了以下结果:
这返回了一个包含 2 个项目的元组 - 名称和一个包含版本信息的元组。但没有关于mpy
版本的信息。
然后我尝试了 RP2040 NANO 发布的 1.18 版本(并在我的 XIAO RP2040 上运行它):
这里返回的结果是具有 3 个属性(命名为属性)和一个mpy
版本(5637 & 0xff = 5)的元组。然后我使用选项重新编译了 micropython#define MICROPY_PERSISTENT_CODE_LOAD (1)
以尝试匹配 RP2040 输出:
现在返回一个包含 3 个项目的元组,mpy
版本 (6),但不是命名元组,并且mpy
版本没有额外数据。
我的问题是如何在我的 XIAO SAMD2 实现中获得一致的结果?我应该包括或排除哪个选项?还是我不应该担心?我正在研究是切换到 Python 还是继续使用 C(++) 这个小型处理器 - 倾向于 C(++)。
谢谢