前言:
最近在複習我的 Python 語言,有個小小的發現,所以記錄一下到我的部落格裡面,
大家都知道, Python 假如要使用數學的三角函數,需要 import math 數學函數模組進來。這裡來個簡單的數學小挑戰,假如不用數學模組,也不准用級數展開,可以不可以直接算出數學上的 Sin(x), Cos(x) 函數呢 ?
前言:
最近在複習我的 Python 語言,有個小小的發現,所以記錄一下到我的部落格裡面,
大家都知道, Python 假如要使用數學的三角函數,需要 import math 數學函數模組進來。這裡來個簡單的數學小挑戰,假如不用數學模組,也不准用級數展開,可以不可以直接算出數學上的 Sin(x), Cos(x) 函數呢 ?
前言:
一直覺得 C語言跟 FORTH 語言在對記憶體的使用用法上,觀念非常的類似。兩個語言的運作核心都是直接對電腦記憶體位址做存取,跟控制,來達到各種程式的目的。所以操作的觀念上非常的接近。所以一直想來篇簡短的心得比較,來比較兩種語言如何的操作記憶體,這樣的比較,可以大大地加深對兩種語言的了解,所以來留個紀錄吧,同時也可以清楚看到兩種語言的優劣性。基本上,我是覺得 FORTH 是略勝一籌的啦!
從歷史上來看, FORTH 是1960年代末期,由查理斯·摩爾 (Charles H. Moore) 所開發的語言,最早是為了控制巨大的電波天文望遠鏡所使用。 而C語言則是在1969年到1973年之間,由丹尼斯·里奇(Dennis Ritchie)為了在PDP-11電腦上運行的Unix系統所設計出來的程式語言。
也就是說其實兩個語言出現的時間非常的接近,而 FORTH 可能要比C語言早個幾年。也許年代接近吧,兩個語言的發明人不約而同的都有類似的思維,真的是非常的有趣,也許是英雄所見略同吧。只是兩個語言在操作逼近目標的方式迴異,而這方面我覺得 FORTH 高明許多,間單又漂亮的解決了問題。而C語言則將問題複雜化,反而產生了更多問題,使得C語言變得非常的反直覺跟難以學習。雖然 C語言已經是主流每個資訊科系必學的語言了,但我們來用個程式比較看看,看看C語言會有什麼問題吧!
前言
學 C/C++ 語言的,慢慢進階後大概就會開始學習所謂的資料結構跟演算法。資料結構這裡,一般除了靜態的陣列外,慢慢的會開始學習動態的記憶體配置的技術例如 malloc(), free()... 這些動態記憶體配置跟釋放的指令。再利用這些函數,跟系統要記憶體或用完後歸還記憶體。
老實說,其實最近不斷的在練習跟精進這些 C 語言的技巧。畢盡,這是主要吃飯的工具。但是,這個版是不準備放任何 C/C++ 語言的任何東西的,因為網路上 C/C++ 的素材真的太氾濫了,這種入門等級的,實在無需我們出來浪費網路的資源。
但是,來個 FORTH 語言版本的這種程式碼,倒是十分的樂意!除了讓我更熟悉外,也可以加減推廣 FORTH 語言囉。所以來篇這樣的部落格文吧!
前言:
最近幾天,被武漢肺炎攻進家裡囉,家裏有人中獎。然後自己也被迫關在家裡照顧他們。在家裏,還是不要浪費寶貴的時間,來寫寫並更新部落格吧。
最近因為操作一些高靈敏度感測器的關係,發現我們常會需要一種非常重要的應用:某些非常高靈敏度的感測器,因為非常的靈敏,所以相對的,通常會有大量的雜訊伴隨在真實訊號裡面。如何在一堆雜訊裡面抽出真實的感測器訊號,是常常會遇到且必須的重要技術。
這種情況,我們通常會分析雜訊的頻率狀況,假如頻率確定的話,適當引進高通濾波器 (High-Pass Filter),低通濾波器 (Low-Pass Filter)或是帶通濾波器 (Band-Pass Filter),即可有效的過濾雜訊的干擾。
前言:
拜 ESP32 本身內建 Wifi 之賜,所以 ESP32 可以很容易的就像一般的電腦一樣,透過 Wifi 登入家中的基地台,變成家中區域網路中的一個網路節點。
為此 ESP32FORTH 設計了非常酷的兩個模式:一個是 Web UI 終端機模式,另一個是 Telnet 模式。
也就是説,一但登入變成家中區域網路中的一個網路節點後。你可以開啟 Web Server 的功能,將 FORTH 的交談環境透過 ESP32FORTH 內建的 WebServer 分享出去。這時候,只要有任何一台電腦或平板電腦 iPad 的網頁瀏覽器,都可以登入 ESP32FORTH ,透過網路終端機控制 ESP32FORTH 的交談環境,編譯或執行或編輯 FORTH 程式。
前言
玩 Arduino 的,第一個會接觸到的溫度跟濕度感測器十之八九,大概是 DHT 系列的感測器。
這一系列的感測器,因為已經一堆人幫它寫好底層溝通的函式囉,所以真的是使用上超級簡單的。真的不誇張,五分鐘搞定。所以當初筆者也用同樣的方法,很快的開發了一個露點溫度濕度計。
但是,現在玩 ESP32FORTH 這種少數人口在玩的語言,自然就沒這麼好命囉,這種特殊協定,可是沒人會理你的。雖然說 ESP32FORTH 是以 C語言開發的,所以要把別人以C語言所開發的DHT系列底層的溝通函式「黏」進來 FORTH 系統裡面並不困難。
前言:
ESP32 MCU 本身,本來就內建硬體 SPI (Serial Peripheral Interface) 介面的,要測試 SPI 硬體,最簡單就是拿來控制 MAX7219 配合上8x8的 LED陣列,來做個迷你跑馬燈的。
所以本來要這樣來弄一篇 ESP32FORTH 對 ESP32 的 SPI 硬體介面的使用範例的。但是不知道什麼原因,找了半天,我很驚訝 ESP32FORTH 官方並沒有把 SPI 的硬體控制指令給黏進來。這樣我們就無法直接很快的使用 ESP32 的 SPI 硬體囉。
不過,對於以 C 撰寫的 ESP32FORTH ,真的要黏其實是不困難。就 ESP32FORTH 的 Sketch 草稿檔,手動再加指令,再重新編譯過整個系統就可以囉。
前言:
話說筆者的 FORTH,是在高中的時候,那時候好不容易弄到一台 Apple ][ ,然後弄到一片 MircoMotion FORTH-79 的磁碟片,就學起 FORTH 語言來囉。
印象深刻的是, FORTH 不只是語言而已,也是個類似 DOS 的作業系統。 FORTH 裡面有簡單的實作了磁片的驅動,所以可以任意的以 FORTH 的方式讀取磁片上的磁區。採用絕對定址的方式,它把磁片上的磁區每 1024 byte 分成一塊,叫做 Block 的。你可以透過這個指令,以絕對定址的方式存取磁片上的任何一個 Block。 (例如: 0 Block, 1 Block, 2 Block ...)
以 Block 為基礎,它也提供了 Block 編輯器。也就是說,程式碼不是用檔案的方式來儲存的,而是以明碼字串的方式,存在一塊塊的 Block 裡面。 FORTH 的發明人Chunk Moore 認為「Simple is the power」,用 Block 來取代作業系統中複雜的檔案結構,才是最簡單,最有效率,也最有威力的方法。
前言:
其實一直關注,發現 ESP32FORTH 的出現已經很久了!而且我還知道它是由丁陳漢蓀老師根據 eFORTH model 所開發出來的, 是 eFORTH 家族的另一個力作。
只是因為我對 ESP32 這顆 MCU 不熟悉,而且對於 Arduino 我一直覺得 FlashFORTH 已經蠻好用的了,所以沒時間再另闢戰場,再熟悉另一套系統,所以一直遲遲不願意動手去使用它。再來可能要對不起丁陳老師了,我對 eFORTH 還是有點偏見的。熟悉 eFORTH Model 的人應該都知道, eFORTH 系統是用 31個核心指令所建構起來的,也就是整個系統,只有31個低階指令是跟機器有關的。只要能搞定這31個指令, eFORTH 系統可以很快的在不同機器中轉移。
但相對的,也代表 eFORTH 相較其它的 FORTH 系統而言,效能較低。在 MCU 的這個領域,我們常需要的是即時控制,時脈跟反應都必須很精準,這個地方 eFORTH 的效能會是很大的致命傷。所以我會比較喜歡專為特定 MCU 所打造的 FORTH 系統,例如 Flash FORTH 之流的。所以,基本上基於效能因素,我是不喜歡使用 eFORTH 來做正事的。 (但,研究 FORTH系統而言,它是很棒的 Model)
前言:
之前對雷達的運作跟如何得到待側物的目標是完全沒有概念的。後來因為工作上的需要,上網找了一下資料,才發現,這蠻簡單的嘛!只要透過地平線的座標系統,知道待側物的仰角 EL,方位角 Az,及雷達站所量測到的待側物跟雷達之間的距離 Range,這樣待側物的座標就立刻可以被計算出來了。(這其實是一種球座標系統轉直角座標系統的轉換)
NASA 利用這樣的方式,他們在美國加州的 Edwards 有個叫做 Dryden Flight Research Center (FRC) 的雷達站,透過這個雷達,他們可以隨時追蹤目前太空梭的位置,並立即的提供給太空梭的任務中心的 Flight Dynamics Officer (FDO) 來監控,並計算整個太空梭任務的飛行軌道。
來推導並瞭解一下,這整個座標轉換中,所需要的數學公式吧!