在今日 AI 時代的來臨,使得技術性部落的經營越來越不容易了!

為了永久保存的目的,本部落格直到2023年的文章,被收集成冊,變成一本電子書。

請至下面連結下載此電子書:

苦命工程師的胡言亂語

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

euler formula.png

前言:

最近在複習我的 Python 語言,有個小小的發現,所以記錄一下到我的部落格裡面,

大家都知道, Python 假如要使用數學的三角函數,需要 import math 數學函數模組進來。這裡來個簡單的數學小挑戰,假如不用數學模組,也不准用級數展開,可以不可以直接算出數學上的 Sin(x), Cos(x) 函數呢 ?

複數:

Python 是很特殊的語言,它居然直接支援複數的算術運算耶,而且還是系統內建的。這樣可好玩了,基本數學的三角函數不是內建的,然後複數運算居然是內建的。然且讓人驚異的是,系統對複數的數學運算支援得非常完整,連複數的n次方運算 (x^n) 都完全的支援。

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

前言:

一直覺得 C語言跟 FORTH 語言在對記憶體的使用用法上,觀念非常的類似。兩個語言的運作核心都是直接對電腦記憶體位址做存取,跟控制,來達到各種程式的目的。所以操作的觀念上非常的接近。所以一直想來篇簡短的心得比較,來比較兩種語言如何的操作記憶體,這樣的比較,可以大大地加深對兩種語言的了解,所以來留個紀錄吧,同時也可以清楚看到兩種語言的優劣性。基本上,我是覺得 FORTH 是略勝一籌的啦!

從歷史上來看, FORTH 是1960年代末期,由查理斯·摩爾 (Charles H. Moore) 所開發的語言,最早是為了控制巨大的電波天文望遠鏡所使用。 而C語言則是在1969年到1973年之間,由丹尼斯·里奇(Dennis Ritchie)為了在PDP-11電腦上運行的Unix系統所設計出來的程式語言。

也就是說其實兩個語言出現的時間非常的接近,而 FORTH 可能要比C語言早個幾年。也許年代接近吧,兩個語言的發明人不約而同的都有類似的思維,真的是非常的有趣,也許是英雄所見略同吧。只是兩個語言在操作逼近目標的方式迴異,而這方面我覺得 FORTH 高明許多,間單又漂亮的解決了問題。而C語言則將問題複雜化,反而產生了更多問題,使得C語言變得非常的反直覺跟難以學習。雖然 C語言已經是主流每個資訊科系必學的語言了,但我們來用個程式比較看看,看看C語言會有什麼問題吧!

記憶體的操作:

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

create all.png

前言

學 C/C++ 語言的,慢慢進階後大概就會開始學習所謂的資料結構跟演算法。資料結構這裡,一般除了靜態的陣列外,慢慢的會開始學習動態的記憶體配置的技術例如 malloc(), free()... 這些動態記憶體配置跟釋放的指令。再利用這些函數,跟系統要記憶體或用完後歸還記憶體。

老實說,其實最近不斷的在練習跟精進這些 C 語言的技巧。畢盡,這是主要吃飯的工具。但是,這個版是不準備放任何 C/C++ 語言的任何東西的,因為網路上 C/C++ 的素材真的太氾濫了,這種入門等級的,實在無需我們出來浪費網路的資源。

但是,來個 FORTH 語言版本的這種程式碼,倒是十分的樂意!除了讓我更熟悉外,也可以加減推廣 FORTH 語言囉。所以來篇這樣的部落格文吧!

結構體 struct

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

KF Noise Reducer Results.png

前言:

最近幾天,被武漢肺炎攻進家裡囉,家裏有人中獎。然後自己也被迫關在家裡照顧他們。在家裏,還是不要浪費寶貴的時間,來寫寫並更新部落格吧。

最近因為操作一些高靈敏度感測器的關係,發現我們常會需要一種非常重要的應用:某些非常高靈敏度的感測器,因為非常的靈敏,所以相對的,通常會有大量的雜訊伴隨在真實訊號裡面。如何在一堆雜訊裡面抽出真實的感測器訊號,是常常會遇到且必須的重要技術。

這種情況,我們通常會分析雜訊的頻率狀況,假如頻率確定的話,適當引進高通濾波器 (High-Pass Filter),低通濾波器 (Low-Pass Filter)或是帶通濾波器 (Band-Pass Filter),即可有效的過濾雜訊的干擾。

可是,萬一雜訊的產生頻率不固定,到處跑的話,這時候這些方法就會失效或者是效果不好。

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

IMG_9254.png

前言:

拜 ESP32 本身內建 Wifi 之賜,所以 ESP32 可以很容易的就像一般的電腦一樣,透過 Wifi 登入家中的基地台,變成家中區域網路中的一個網路節點。

為此 ESP32FORTH 設計了非常酷的兩個模式:一個是 Web UI 終端機模式,另一個是 Telnet 模式

也就是説,一但登入變成家中區域網路中的一個網路節點後。你可以開啟 Web Server 的功能,將 FORTH 的交談環境透過 ESP32FORTH 內建的 WebServer 分享出去。這時候,只要有任何一台電腦或平板電腦 iPad 的網頁瀏覽器,都可以登入 ESP32FORTH ,透過網路終端機控制 ESP32FORTH 的交談環境,編譯或執行或編輯 FORTH 程式。

另一個是 Telnet 模式,既然都是網路節點了,所以也可以開啟 ESP32FORTH 的 Telnet Server 功能。這時候,只要用任何一台電腦或平板電腦 iPad 的 Telnet Client 都可以連接上 ESP32FORTH 進入 FORTH 的交談環境編譯或執行或編輯 FORTH 程式。

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

HipstamaticPhoto-649170898.095405.JPG

前言

玩 Arduino 的,第一個會接觸到的溫度跟濕度感測器十之八九,大概是 DHT 系列的感測器。

這一系列的感測器,因為已經一堆人幫它寫好底層溝通的函式囉,所以真的是使用上超級簡單的。真的不誇張,五分鐘搞定。所以當初筆者也用同樣的方法,很快的開發了一個露點溫度濕度計

但是,現在玩 ESP32FORTH  這種少數人口在玩的語言,自然就沒這麼好命囉,這種特殊協定,可是沒人會理你的。雖然說 ESP32FORTH 是以 C語言開發的,所以要把別人以C語言所開發的DHT系列底層的溝通函式「黏」進來 FORTH 系統裡面並不困難。

可是啊,其實從頭打造起,來建構程式碼來跟 DHT 系列很特殊的 1-wire 通訊協定來溝通,老實說也不是非常困難的事情啊。讓我們來練練功,根據規格書來享受一下實作一些特殊通訊協定的樂趣吧。把他當飯後的消遣,就像玩數獨一樣啊! 😬

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

700px-SPI_single_slave.svg.png

前言:

ESP32 MCU 本身,本來就內建硬體 SPI (Serial Peripheral Interface) 介面的,要測試 SPI 硬體,最簡單就是拿來控制 MAX7219 配合上8x8的 LED陣列,來做個迷你跑馬燈的。

所以本來要這樣來弄一篇 ESP32FORTH 對 ESP32 的 SPI 硬體介面的使用範例的。但是不知道什麼原因,找了半天,我很驚訝 ESP32FORTH 官方並沒有把 SPI 的硬體控制指令給黏進來。這樣我們就無法直接很快的使用 ESP32 的 SPI 硬體囉。

不過,對於以 C 撰寫的 ESP32FORTH ,真的要黏其實是不困難。就 ESP32FORTH 的 Sketch 草稿檔,手動再加指令,再重新編譯過整個系統就可以囉。

但是,這篇暫時還不打算這樣用。其實 SPI 協定就是 Master 發出 Clock 訊號來控制雙方的位移暫存器的硬體來傳送資料的。在速度沒有說特別快的狀況下,例如控制 MAX7219 這個晶片的情況下,是可以直接用軟體發出 SPI 的訊號,來達到硬體SPI的功能的!

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

list example.png

前言:

話說筆者的 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 來取代作業系統中複雜的檔案結構,才是最簡單,最有效率,也最有威力的方法。

(例如,虛擬記憶體,虛擬陣列... 這些很容易用 Block 來實作並漂亮地嵌入到你的程式之中。)

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

Arduino IDE prefence1.png

前言:

其實一直關注,發現 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)

但是,生命總會找到出路的。eFORTH的精簡短小,加上丁陳漢蓀老師的努力,現在的 eFORTH 可以架在 C 語言的編譯器之上。 ESP32FORTH 就是這樣的東西,它直接就是 Arduino 的 C語言所寫的,就簡簡單單一個 Arduino Sketch,編譯完畢後就給了你一個完整的 FORTH 系統。

ohiyooo2 發表在 痞客邦 留言(1) 人氣()

coordinate system.png

前言:

之前對雷達的運作跟如何得到待側物的目標是完全沒有概念的。後來因為工作上的需要,上網找了一下資料,才發現,這蠻簡單的嘛!只要透過地平線的座標系統,知道待側物的仰角 EL,方位角 Az,及雷達站所量測到的待側物跟雷達之間的距離 Range,這樣待側物的座標就立刻可以被計算出來了。(這其實是一種球座標系統轉直角座標系統的轉換)

NASA 利用這樣的方式,他們在美國加州的 Edwards 有個叫做 Dryden Flight Research Center (FRC) 的雷達站,透過這個雷達,他們可以隨時追蹤目前太空梭的位置,並立即的提供給太空梭的任務中心的 Flight Dynamics Officer (FDO) 來監控,並計算整個太空梭任務的飛行軌道。

來推導並瞭解一下,這整個座標轉換中,所需要的數學公式吧!

因為公式是自己推導的,所以順便做個心得筆記!

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

white noise pic.png

前言

最近因為工作上會用到,所以做了一些研究。當然啦,這篇偏向統計物理的心得筆記。但是因為有用 FORTH 來模擬了一下,應該也是不錯 FORTH 語言的參考,所以把它歸類在 FORTH 語言裡面。

一般而言,這種模擬可以用任何語言, R 語言, Python,MatLab ... 都行。 因為 gFORTH 有很完整跟非常標準的浮點運算,所以我都把 gFORTH 當數值分析語言來用,也蠻方便的。做個心得筆記記錄,以後要用時查閱方便。

白雜訊

摘自維基百科,

ohiyooo2 發表在 痞客邦 留言(0) 人氣()

Blog Stats
⚠️

成人內容提醒

本部落格內容僅限年滿十八歲者瀏覽。
若您未滿十八歲,請立即離開。

已滿十八歲者,亦請勿將內容提供給未成年人士。