我在 Simplicity Studio 中运行了一些简单的代码来设置 LED,然后将二进制文件加载到 Renode 中,但是,每当我尝试读取相关 LED 的状态时,它都会返回 false,即使它应该打开并返回 true .
repl文件中的GPIO端口是根据文档设置的。
我不确定出了什么问题。代码应该是好的,我已经在硬件上测试过了,也许是 STK3700 repl 文件有问题?我从这个 GitHub 链接中获取了它们:
https://github.com/renode/renode/blob/master/platforms/boards/silabs/stk3700.repl
设置 LED0 的代码(同样,这是经过测试的,只是将其发布以备不时之需):
#include <stdint.h>
#include "em_device.h"
#include "em_chip.h"
#include "em_cmu.h"
#include "em_gpio.h"
int main(void)
{
/* Chip errata */
CHIP_Init();
CMU_ClockEnable(cmuClock_GPIO,1);
/* Infinite loop */
while (1) {
GPIO_PinModeSet(gpioPortE,2, gpioModePushPull, 1);
}
}
这是我用于测试的 Renode 进程,它应该返回 true:
Renode, version 1.14.0.34213 (81da46c1-202308081855)
(monitor) mach create "test"
(test) machine LoadPlatformDescription @platforms/boards/silabs/stk3700.repl
(test) sysbus LoadBinary @C:/code/renode_test.bin 0x000
(test) start
Starting emulation...
(test) sysbus.gpioPort.led0 State
False
我尝试过其他测试方法,但无论我编写什么代码,我都没有得到所需的输出。
GPIO_PinModeSet 配置 GPIO 引脚,只需执行一次。您没有
GPIO_PinOutSet
、GPIO_PinOutClear
或 GPIO_PinOutToggle
来实际断言引脚状态。
在实际硬件上这是否会点亮 LED 取决于 LED 的连接方式以及输出的初始状态。颠倒逻辑很常见;低为开。
使用闪烁的 LED 作为“活动”指示始终是个好主意,静态状态不能证明任何事情,除了你有电之外。