0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

cupkee系統(tǒng)的編程操作

科技綠洲 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2023-06-22 11:41 ? 次閱讀

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時的用法)

完整的連接過程如下:

  1. 用usb線連接cupkee板和mac
  2. 打開mac上的終端程序
  3. 在終端中輸入命令screen /dev/cu.usbmodemCUPKE1 baudrate (波特率可以隨便輸入)
  4. screen正常運行后,會清除終端的歷史內(nèi)容,為用戶呈現(xiàn)一個干凈的新終端界面
  5. 鍵入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()
})
  • 操作設(shè)備(pwm, uart, i2c, adc, timer, counter, pulse)
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

print函數(shù)被設(shè)計為一個即時幫助工具,它可以用來打印變量的內(nèi)容,和當(dāng)前cupkee支持的原生函數(shù)

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管理程序同步更加有效

  1. setTimeout
    注冊延時(回調(diào))函數(shù),在指定時間后執(zhí)行
  2. setInveral
    注冊周期(回調(diào))函數(shù),以指定的時間間隔周期執(zhí)行
  3. clearTimeout
    清除延時函數(shù)
  4. 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
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5059

    文章

    18973

    瀏覽量

    302031
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6684

    瀏覽量

    123140
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3565

    瀏覽量

    93536
收藏 人收藏

    評論

    相關(guān)推薦

    Linux操作系統(tǒng)C語言編程入門

    Linux操作系統(tǒng)C語言編程入門
    發(fā)表于 08-26 20:43

    編程用什么操作系統(tǒng)

    操作系統(tǒng)編程語言
    小凡
    發(fā)布于 :2022年09月08日 13:46:13

    基于操作系統(tǒng)編程與裸機編程有哪些不同之處

    因為學(xué)的是控制,剛開始的時候玩的單片機比較多,單片機進行開發(fā)的一個重要的特點就是裸機編程。也就是說內(nèi)核跑的完完全全是你的代碼。但是在操作系統(tǒng)編程就完全不一樣,因為你的程序大部分都在調(diào)用操作系
    發(fā)表于 11-22 07:37

    Linux操作系統(tǒng)-C語言編程入門-pdf

    Linux操作系統(tǒng)-C語言編程入門介紹在LINUX 下進行C 語言編程所需要的基礎(chǔ)知識.在這篇文章當(dāng)中,我們將會學(xué)到以下內(nèi)容:􀂄 源程序編譯􀂄 Makefile 的編寫􀂄 程
    發(fā)表于 12-08 09:55 ?193次下載
    Linux<b class='flag-5'>操作系統(tǒng)</b>-C語言<b class='flag-5'>編程</b>入門-pdf

    編程操作界面在SCADA系統(tǒng)中的應(yīng)用

    編程操作界面在SCADA系統(tǒng)中的應(yīng)用
    發(fā)表于 01-19 12:29 ?23次下載
    可<b class='flag-5'>編程</b><b class='flag-5'>操作</b>界面在SCADA<b class='flag-5'>系統(tǒng)</b>中的應(yīng)用

    嵌入式操作系統(tǒng)Linux 中的串口應(yīng)用編程

    針對嵌入式Linux操作系統(tǒng)的特點,分析在該系統(tǒng)下串行通信口編程控制的方法,總結(jié)程序設(shè)計的步驟; 在嵌入式Linux 系統(tǒng)上, 編寫控制程序, 成功地實現(xiàn)嵌入式
    發(fā)表于 05-14 14:34 ?28次下載

    FANUC_O系統(tǒng)操作編程說明書

    FANUC O系統(tǒng)操作編程說明書FANUC O系統(tǒng)操作編程說明書FANUC O
    發(fā)表于 06-15 10:58 ?13次下載

    SLPC可編程調(diào)節(jié)器的編程設(shè)計與操作

    SLPC可編程調(diào)節(jié)器的編程設(shè)計與操作
    發(fā)表于 12-11 23:15 ?0次下載

    基于Linux操作系統(tǒng)下C語言編程入門

    基于Linux操作系統(tǒng)下C語言編程入門
    發(fā)表于 10-27 15:36 ?11次下載
    基于Linux<b class='flag-5'>操作系統(tǒng)</b>下C語言<b class='flag-5'>編程</b>入門

    Linux操作系統(tǒng)下C語言編程入門.pdf

    Linux操作系統(tǒng)下C語言編程入門
    發(fā)表于 05-17 10:08 ?96次下載

    Linux操作系統(tǒng)實用教程之如何進行Linux系統(tǒng)下的編程管理

    本文檔的主要內(nèi)容詳細介紹的是Linux操作系統(tǒng)實用教程之如何進行Linux系統(tǒng)下的編程管理主要內(nèi)容包括了:1.inux編程環(huán)境及工具2 Linux高級語言
    發(fā)表于 11-01 10:51 ?5次下載
    Linux<b class='flag-5'>操作系統(tǒng)</b>實用教程之如何進行Linux<b class='flag-5'>系統(tǒng)</b>下的<b class='flag-5'>編程</b>管理

    操作系統(tǒng)是什么?計算機操作系統(tǒng)的詳細資料介紹

    操作系統(tǒng)是計算機學(xué)科的基礎(chǔ)課程,是理解計算機運行原理的重要基石,學(xué)習(xí)操作系統(tǒng)不僅能夠讓編程人員了解計算機運行邏輯而且還有助于培養(yǎng)編程“軟實力”,如果想真正在
    的頭像 發(fā)表于 02-04 12:24 ?1.7w次閱讀
    <b class='flag-5'>操作系統(tǒng)</b>是什么?計算機<b class='flag-5'>操作系統(tǒng)</b>的詳細資料介紹

    基于實時操作系統(tǒng)編程系統(tǒng)設(shè)計

    ?;趯崟r操作系統(tǒng)編程可以大大縮短開發(fā)的周期,實時性也有足夠的保證。基于實時操作系統(tǒng)編程的代價之一是,增加了程序代碼的長度;代價之二是,需要較多的RAM空間,在不擴展片外存儲器的情況下,中低檔單片機是難以勝任的。另一方面,大部分中低檔應(yīng)用
    的頭像 發(fā)表于 10-04 13:16 ?2681次閱讀
    基于實時<b class='flag-5'>操作系統(tǒng)</b>的<b class='flag-5'>編程</b><b class='flag-5'>系統(tǒng)</b>設(shè)計

    單片機編程操作系統(tǒng)綜述

    本文分為兩部分——“單片機編程篇”和“操作系統(tǒng)篇”。單片機編程篇主要介紹單片機的各種編程結(jié)構(gòu),及其實現(xiàn)方法。是在假設(shè)已經(jīng)可以驅(qū)動單片機和各個模塊的前提下,討論如何整合和使用這些資源,以
    發(fā)表于 05-08 11:12 ?40次下載

    基于操作系統(tǒng)編程與裸機編程的區(qū)別

    因為學(xué)的是控制,剛開始的時候玩的單片機比較多,單片機進行開發(fā)的一個重要的特點就是裸機編程。也就是說內(nèi)核跑的完完全全是你的代碼。但是在操作系統(tǒng)編程就完全不一樣,因為你的程序大部分都在調(diào)用操作系
    發(fā)表于 11-13 17:36 ?11次下載
    基于<b class='flag-5'>操作系統(tǒng)編程</b>與裸機<b class='flag-5'>編程</b>的區(qū)別