推 askacis: 一隻driver註冊I2C/SPI子系統,這兩個IP的IRQ應也是分開 02/12 22:24
→ askacis: 所以可以在driver裡面卡同步機制去sync資料 02/12 22:25
推 cobrasgo: 第一個可以透過hardware watchdog,如果硬體有的話 02/17 08:30
→ cobrasgo: 第二個的話你沒有一個rtos應該不容易做到 02/17 08:31
→ wtchen: 用Preempt RT kernel也不行嗎?我現在用這個 02/17 17:50
我的設計是這樣:
i2c : 4 devices
spi : 2 devices
如果單純用程式控制不透過i2c/spi driver,用mmap讀寫address,
可以把modules的delay降到最低
可是如果要用i2c/spi driver,有兩種作法
一種是用程式作sync(我個人不喜歡這種作法,沒啥挑戰性)
program -> i2c module -> program (-> spi modules -> program) -> i2c module
(有括號是因為spi裝置不需要頻率太高的讀取)
一種是另加一個module作sync
program -> module[->i2c module(-> spi module) -> i2c module]
也就是說程式只看的到sync module這個 "四軸驅動程式",
sync module直接跟i2c/spi modules溝通
所有的控制都在sync module裏面完成,包括雜訊處理跟姿態運算。
我真正想做的是這個,但我不清楚在Preempt RT Linux的架構下能不能做到
→ wtchen: 其實我不太懂watchdog跟用script監控有啥分別 02/17 17:51
我不是很懂watchdog的必要性
如果我在rc.local裏面加個script執行我要的程式,像這樣:
#!/bin/bash
while true; do
ps cax | grep QUADCOPTER > /dev/null
if [ $? -eq 0 ]; then
echo "Process is running."
else
echo "Process is not running."
/home/pi/work/build/src/QUADCOPTER -> 我的程式
fi
sleep 10
done
看起來似乎也能達成我要的效果
只是不知道跟watchdog比起來哪種比較好
(RPi有支援watchdog,我很想用看看,只是不知道有沒比較好)
※ 編輯: wtchen (86.200.247.70), 02/17/2016 18:10:17