cupkee是一個C語言編寫,專門為嵌入式硬件設(shè)計的微型操作系統(tǒng)。
http://www.cupkee.cn
cupkee提供類似node的運行環(huán)境,使用內(nèi)嵌的javascript解釋器執(zhí)行應(yīng)用程序腳本。
cupkee在硬件上提供了REPL,開發(fā)者可以對硬件即時編程并獲得響應(yīng)。
cupkee小巧、簡單。
關(guān)于cupkee的解釋器:
https://github.com/cupkee/panda
支持的處理器
- stm32f103 (當(dāng)前的BSP是按照stm32f103rc的資源定義實現(xiàn)的)
硬件編程
cupkee系統(tǒng)的編程非常簡單。
首先,將裝有cupkee系統(tǒng)的硬件通過USB連接到你的電腦。
然后, 開始編程
使用REPL
cupkee使用USB-CDC作為console,當(dāng)前主流桌面操作系統(tǒng)都可免驅(qū)識別。
打開串口終端,鍵入Enter將看cupkee的logo信息和命令提示符。
輸入js語句,cupkee會為你執(zhí)行并返回結(jié)果
安裝應(yīng)用腳本
cupkee正常連接到電腦后,會出現(xiàn)卷標(biāo)為cupdisk的外掛硬盤。
寫好硬件應(yīng)用腳本后,只需將其拖入此硬盤,即可完成安裝。
mac用戶
mac是非常方便的開發(fā)平臺,其上自帶的screen應(yīng)用即可作為與cupkee的通信終端。(這是我在開發(fā)cupkee時的用法)
完整的連接過程如下:
- 用usb線連接cupkee板和mac
- 打開mac上的終端程序
- 在終端中輸入命令screen /dev/cu.usbmodemCUPKE1 baudrate (波特率可以隨便輸入)
- screen正常運行后,會清除終端的歷史內(nèi)容,為用戶呈現(xiàn)一個干凈的新終端界面
- 鍵入Enter或其它任意,你將看到cupkee在終端中打印的logo,和輸入提示符
非mac用戶 或者不喜歡screen簡陋功能
你可以使用其它常用的應(yīng)用軟件,如:putty,xshell,超級終端...
- ubuntu12.04以上版本:無需驅(qū)動
- windows10, windows8: 無需安裝驅(qū)動,連接即可使用
較老電腦操作系統(tǒng)不能直接識別usb cdc設(shè)備,使用前需安裝驅(qū)動程序。(不幸的是,目前沒有驅(qū)動程序)
cupkee使用簡介
完成上述操作,就可以開始進行硬件編程了。
使用解釋器
- 進行簡單的計算
> 100 / 20 + 2
7
>
- 定義和使用變量
> var a = 1, b = 2;
undefined
> a
1
> a + b
3
> a = "hello"
"hello"
> b = "world"
"world"
> a + " " + b
"hello world"
- 定義和使用函數(shù)
> function fn(x, y) {
. return x + y
. }
< function >
> fn(a, b)
3
操作硬件
- 控制指示燈
led(1) // 設(shè)置led引腳為高電平
led(0) // 設(shè)置led引腳為低電平
led() // 反轉(zhuǎn)led引腳電平
- 操作GPIO
pinMap(0, 0, 1) // 將GPIO引腳PA1,映射為PIN0
pinMap(1, 0, 2) // 將GPIO引腳PA2,映射為PIN1
var pin = Device('pin', 0) // 申請pin設(shè)備實例0
pin.config('num', 2)
pin.config('start', 1) // 設(shè)置pin設(shè)備管理的引腳: PIN0, PIN1
pin.config('dir', 'in') // 設(shè)置pin方向: 輸入(in),輸出(out),雙向(dual)
pin.enable()
// 讀取pin引腳值
pin.get() // PIN0 PIN1
pin.get(0) // PIN1
pin.get(1) // PIN2
pin[0] // PIN1
pin[1] // PIN2
pin.listen('data', function(state) { // 注冊引腳電平變化處理函數(shù)
if (state[0]) led()
})
var pwm = Device('pwm', 0) // 申請pwm設(shè)備實例0
...
// 設(shè)置pwm周期為1000ms
pwm.config('period', 1000)
// 使能pwm
pwm.enable()
...
pwm.write(0, 10) // 設(shè)置pwm通道0占空比為10:990
pwm.write(0, 1000) // 設(shè)置pwm通道0占空比為1000:0
...
更多信息, 請參考后續(xù)介紹及cupkee函數(shù)及設(shè)備手冊
cupkee提供的原生函數(shù)
cupkee提供了一組原生函數(shù)供開發(fā)者使用
print函數(shù)被設(shè)計為一個即時幫助工具,它可以用來打印變量的內(nèi)容,和當(dāng)前cupkee支持的原生函數(shù)
- systicks
cupkee內(nèi)建有系統(tǒng)定時器,每秒1000次滴答(每毫秒一次),作為系統(tǒng)程序的通用同步工具。
systicks函數(shù)返回系統(tǒng)啟動后的總滴答數(shù)。
> while(1) {
if (systicks() > 10000) {
...
break;
}
}
- ledMap & led
點亮指示燈是硬件調(diào)整最基本的手段,cupkee為此專門提供了ledMap和led兩個原生函數(shù)進行支持。
ledMap 用于指定指示燈使用的GPIO引腳。
led 用于控制指示燈引腳電平:1. 不帶參數(shù)調(diào)用時,反轉(zhuǎn)引腳電平 2. 傳入真值(1, true, ...)時,引腳設(shè)為高電平 3. 傳入假值(0, false, ...)時,引腳設(shè)為低電平
- pinMap & pin設(shè)備
采用相同處理器的不同的硬件板卡的引腳使用方案,往往并不同。cupkee需要一種處理機制,讓一個處理器的固件程序支持多種板卡。
原生函數(shù)pinMap就是為此而來,它可以將任意GPIO引腳映射到cupkee內(nèi)建的抽象PIN[0-15]。PIN0-15]可以分配給pin設(shè)備使用。
- setTimeout, setInterval, clearTimeout, clearInterval
cupkee提供了一組定時器函數(shù),它們相對于使用systicks管理程序同步更加有效
- setTimeout
注冊延時(回調(diào))函數(shù),在指定時間后執(zhí)行 - setInveral
注冊周期(回調(diào))函數(shù),以指定的時間間隔周期執(zhí)行 - clearTimeout
清除延時函數(shù) - clearInterval
清除周期函數(shù)
// 定義函數(shù)f1,并在1000毫秒后執(zhí)行
var t = setTimeout(def f1() {
...
}, 1000)
...
// 定義函數(shù)f2,每1000毫秒執(zhí)行一次
var i = setInterval(def f2() {
...
}, 1000)
...
// 清除延時函數(shù), 參數(shù)為setTimeout的返回值
clearTimeout(t)
...
// 清除周期函數(shù), 參數(shù)為setInterval的返回值
clearInterval(t)
...
// 清除所有延時函數(shù)
clearTimeout()
...
// 清除所有周期函數(shù)
clearInterval()
cupkee上的設(shè)備
原生函數(shù)Device用來創(chuàng)建和查看可用設(shè)備。
> Device() // 打印設(shè)備列表
Device id conf inst
* pin 0 3 2
* adc 0 3 2
...
undefined
>
> var pwm, key, adc
> pwm = Device('pwm', 1) // 申請pwm設(shè)備實例1
> key = Device('pin', 1) // 申請pin設(shè)備實例1
> adc = Device('adc', 0) // 申請adc設(shè)備實例0
-
嵌入式
+關(guān)注
關(guān)注
5059文章
18973瀏覽量
302031 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6684瀏覽量
123140 -
編程
+關(guān)注
關(guān)注
88文章
3565瀏覽量
93536
發(fā)布評論請先 登錄
相關(guān)推薦
評論