gpt4 book ai didi

bash - 在 Raspberry Pi 4 (Ubuntu 20.04.1) 中运行自定义 bash 脚本以控制 GPIO 的 CPU 使用率较高

转载 作者:行者123 更新时间:2023-12-04 18:28:52 24 4
gpt4 key购买 nike

我编写了一个 bash 脚本来打开/关闭 GPIO 以控制风扇,但这会导致 CPU 使用率很高,我不知道为什么。
它可以工作,但是每当它将状态从关闭更改为打开或反之亦然时,脚本就会卡住,导致 CPU 使用率过高,大约 5 分钟后,它会更改状态并且 CPU 使用率会恢复正常。大约 20-60 秒后问题再次出现。
有人可以帮我理解我的脚本有什么问题吗?
[运行 Ubuntu 20.04 的树莓派 4]

#!/bin/bash
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"

gpio -g mode 3 out

on=48000
off=44000

while true; do
cpu=$(</sys/class/thermal/thermal_zone0/temp) # get CPU temperature

if (( "$cpu" > "$on" )); then
gpio -g write 3 1 # turn fan ON
echo "CPU Hot"
sleep 60
fi

if (( "$off" > "$cpu" )); then
echo "CPU Cool."
gpio -g write 3 0 # turn fan OFF
sleep 5
fi
done

最佳答案

好的,感谢@shellter,我能够解决问题...
问题是脚本没有任何 condition当 CPU 温度介于 4800 之间时进行处理和 4400解决方案的基本思想是:

if (CPU is Hot); then
turn fan ON
set boolean = true
sleep 60 sec

else if (CPU is Cool); then
turn fan OFF
set boolean = false
sleep 5 sec

else (when CPU is neither Hot OR Cool.. somewhere between 4400 && 4800)

if (boolean is true.. meaning CPU didn't go below 4400); then
sleep 60 sec

else (boolean is false.. meaning CPU didn't go above 4800); then
sleep 5 sec

工作代码是:
#!/bin/bash
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"

gpio -g mode 3 out

on=48000
off=44000
hot=false

while true; do
cpu=$(</sys/class/thermal/thermal_zone0/temp)

if (( "$cpu" > "$on" )); then
echo "CPU Hot"
hot=true
gpio -g write 3 1 # turn fan ON
sleep 60

elif (( "$off" > "$cpu" )); then
echo "CPU Cool."
hot=false
gpio -g write 3 0 # turn fan OFF
sleep 5

else
if [ "$hot" = true ]; then
echo "CPU still Hot"
sleep 60
else
echo "CPU Cool"
sleep 5
fi
fi
done

关于bash - 在 Raspberry Pi 4 (Ubuntu 20.04.1) 中运行自定义 bash 脚本以控制 GPIO 的 CPU 使用率较高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63569463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com