2020年5月22日 星期五

Build GCC G++ 10.1.0 Toolchain on CentOS 7.5

Build GCC G++ 10.1.0 Toolchain on CentOS 7.5


參考來源:



# 我是以 root 登入系統
# 登入後,先更新系統

> yum -y update


# 安裝 & 更新目前的 gcc 及 其他可能會用到的套件

> yum -y install gcc gcc-c++

> yum -y install tar wget make git openssl-devel bzip2 libcurl-devel autoconf automake libtool 

# 安裝 zlib & 開發套件

> yum -y install zlib zlib-devel

#安裝 xz 壓縮工具

> yum install xz -y


修改FD_SETSIZE(非必要)

(在寫socket programming時會用select 搭配 fd_set 來偵測 file descriptor 是否可讀寫
 但Linux 系統預設的 fd_set size 只有 1024,若同時間處理的 fd 超過 1024 就會出問題
 修改下面這兩個檔案,重新 build application 時就會引用到新的 define 值)

vim /usr/include/linux/posix_types.h
   #define __FD_SETSIZE    1024 => 改65535

vim /usr/include/bits/typesizes.h
   #define __FD_SETSIZE    1024 => 改65535

或使用Sed 修改
sed -i 's/\(FD_SETSIZE\s\+\)\([0-9]\+\)/\165535/g' /usr/include/linux/posix_types.h
sed -i 's/\(FD_SETSIZE\s\+\)\([0-9]\+\)/\165535/g' /usr/include/bits/typesizes.h

#來源:

https://ftp.gnu.org/gnu/gcc/gcc-10.1.0/gcc-10.1.0.tar.xz
ftp://ftp.gnu.org/gnu/gcc/gcc-10.1.0/gcc-10.1.0.tar.xz
https://mirror.ossplanet.net/gnu/gcc/gcc-10.1.0/gcc-10.1.0.tar.gz
註:要確定抓下來的檔案沒問題,可以正確解壓,若有問題可以網上搜尋其他的載點

#抓取 gcc 10.1.0 source

> wget ftp://ftp.gnu.org/gnu/gcc/gcc-10.1.0/gcc-10.1.0.tar.xz

#解壓縮 gcc

> tar -Jxvf gcc-10.1.0.tar.xz
> cd gcc-10.1.0
> case $(uname -m) in
  x86_64)
    sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64
  ;;
esac


# 下載Build時需要的檔案

> ./contrib/download_prerequisites

2020-05-21 18:23:31 URL:http://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2 [2383840/2383840] -> "./gmp-6.1.0.tar.bz2" [1]
2020-05-21 18:23:40 URL:http://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2 [1279284/1279284] -> "./mpfr-3.1.4.tar.bz2" [1]
2020-05-21 18:23:41 URL:http://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz [669925/669925] -> "./mpc-1.0.3.tar.gz" [1]
2020-05-21 18:23:47 URL:http://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2 [1658291/1658291] -> "./isl-0.18.tar.bz2" [1]
gmp-6.1.0.tar.bz2: 正確
mpfr-3.1.4.tar.bz2: 正確
mpc-1.0.3.tar.gz: 正確
isl-0.18.tar.bz2: 正確
All prerequisites downloaded successfully.


# 建立一個用來編譯GCC的資料夾

> mkdir build 
> cd build


# 依系統環境設置產生編譯 GCC 的 Makefile

> ../configure -v --build=x86_64-linux-gnu \
                --host=x86_64-linux-gnu \
                --target=x86_64-linux-gnu \
                --enable-checking=release \
                --enable-languages=c,c++ \
                --disable-multilib \
                --program-suffix=-10.1 \
                --prefix=/usr/local/gcc-10.1.0

# 或是這個設置
> ../configure --disable-multilib --enable-languages=c,c++

# 開始編譯

> make
or
> make -j4


# 等待...漫長的等待...原來是件好事...因為代表沒有出現錯誤...而中止......

# 但現實往往總是不如人願

In file included from ../../../../libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp:167:
../../../../libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp:1083:17: error: ‘__kernel_fd_set’ was not declared in this scope; did you mean ‘__kernel_off_t’?
 1083 | CHECK_TYPE_SIZE(__kernel_fd_set);
      |                 ^~~~~~~~~~~~~~~
../../../../libsanitizer/sanitizer_common/sanitizer_internal_defs.h:342:65: note: in definition of macro ‘IMPL_COMPILER_ASSERT’
  342 |     typedef char IMPL_PASTE(assertion_failed_##_, line)[2*(int)(pred)-1]
      |                                                                 ^~~~
../../../../libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h:1426:3: note: in expansion of macro ‘COMPILER_CHECK’
 1426 |   COMPILER_CHECK(sizeof(__sanitizer_##TYPE) == sizeof(TYPE))
      |   ^~~~~~~~~~~~~~
../../../../libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp:1083:1: note: in expansion of macro ‘CHECK_TYPE_SIZE’
 1083 | CHECK_TYPE_SIZE(__kernel_fd_set);
      | ^~~~~~~~~~~~~~~
make[4]: *** [sanitizer_platform_limits_posix.lo] Error 1
make[4]: Leaving directory `/root/gcc-10.1.0/build/x86_64-linux-gnu/libsanitizer/sanitizer_common'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/root/gcc-10.1.0/build/x86_64-linux-gnu/libsanitizer'
make[2]: *** [all] Error 2
make[2]: Leaving directory `/root/gcc-10.1.0/build/x86_64-linux-gnu/libsanitizer'
make[1]: *** [all-target-libsanitizer] Error 2
make[1]: Leaving directory `/root/gcc-10.1.0/build'
make: *** [all] Error 2

# 所以,目前還在爬文看看怎麼解決這個錯誤



# 將編好的程式安裝到系統中

> make install


2014年12月26日 星期五

3D 相關資源







http://go3d.pixnet.net/blog/post/34250539-%5B3d%E6%A8%A1%E5%9E%8B%E5%88%86%E4%BA%AB%5D-%E9%A0%82%E7%B4%9A%E4%B8%8B%E8%BC%8910%E5%80%8B%E7%AB%99%E9%BB%9E
3D 模型分享平台, 收集10 個頂級免費資源, 資源重新組合, 將創作新作品, 你收集嗎? 進入收集吧, 看書或補習, 不如自己動手組合製作~~~ http://www.3dtotal.com/ http://www.turbosquid.com/Search/Index.cfm?FuseAction=ProcessSmartSearch&istSearchKey=Free&x=19&y=11 http://www.greatbuildings.com/types/models/models.html http://archive3d.net/ http://sketchup.google.com/3dwarehouse/ http://www.3dmodelfree.com/ http://www.3dxtras.com/3dxtras-free-3d-models-list.asp?catid=-1 http://dlegend.com/html/free-3dmodels.html http://artist-3d.com/ http://www.nasa.gov/multimedia/3d_resources/

2014年8月31日 星期日

使用 Arduino 製作 溫控灑水系統 (4.元件購入及測試)

最近因為其他事情的耽擱,只能趁有空的時候看看前輩們的文章。這兩天上網購買的東西到手了,也去了電子零件行逛了一下,先買了幾樣零件。

Arduino Mega + BreadBoard + 3Digits 7 Segment LED
幸運的是找到一盒約二十年前留下來的零件(右上)

根據之前我的問題,74LS48 BCD共陰七段顯示器驅動IC 線路疑問!? 零件到手後,馬上來測試。結果,因為在7448輸出內建 2K 電阻,所以輸出電流很小,只接一顆七段顯示LED還算明亮,但像我下圖(二)測試是將三位數同時接亮,所以亮度瞬間分散,亮度也變暗很多。

下圖(一)就像方式一的接法,並聯一較小電阻來提升電流,三位七段顯示器亮度馬上提升許多。
(一)7448 接 七段顯示器,加上提升電阻,三位七段顯示器變亮許多
(二)7448 接 三位七段顯示器同時接通,亮度變暗
當然,這三位七段顯示器接到 Arduino 後,是用分時顯示的方式來各別顯示其數字,就是同時間只會有一個數字亮起,也許不需要提升電阻,到時再看看囉!!


2014年8月26日 星期二

[己解決]74LS48 BCD共陰七段顯示器驅動IC 線路疑問!?

各位大家好,網路上查了一個 7447 7448 七段顯示驅動IC,其中7447是用於共陽七段顯示器,7448則是用在共陰的。包含CD4511等這幾種IC都可以直接驅動顯示器而不需要再使用電晶體放大電路,但仍需要接電阻來限電流。

針對7448連接共陰的七段顯示器,網路上看到一個線路:
(來自這裡)

但是大部份看到是這樣的接法:
(網路上大部份接法)

想請教,第一種和第二種接法有什麼差別?? 例如耗電度,穩定度等的?
謝謝!!

以我的認知,第一種接法不會造成這七段燈號都亮起來嗎?? 然後再加上7448輸出的電壓,不就會更高電壓嗎?電流不就相加上去變更高了?? 請前輩們開釋.... XD


根據 各前輩的討論說明 後,我大致得到一個結論,這兩種接法,第一種是電阻並聯,第二種是電阻串聯。

根據 7448 的 Datasheet 內的輸出線路來看,其輸出經電晶體放大線路後有接一個 2K 的提升電阻。


因為 7448 的a~g 輸出有內建提升電阻,所以可以採用第一種並聯電阻接法,搭配適合的電阻,去計算出所希望輸出的電流。

而有些驅動IC像是上圖中的左側 74 '46A'47A 的輸出,則是經電晶體線路直接輸出Vcc的電壓,則適用第二種電阻串接接法,去限制輸出電流。

所以前輩們說的沒錯,的確得去查所使用IC的 Datasheet 才能確定其用法及特性。

補充電阻並聯的阻值計算公式:    R = (R1*R2) / (R1+R2)

以第一種例子來計算: (2000*470)/(2000+470) = 380.6

電子元件及相關查詢記錄備份

其實就是書籤,主要是最近消化跟電子元件&Arduino相關的資料,方便我查詢曾經查看過的相關網址。會不定時更新...

(74LS47, 74LS48, CD4511) BCD 七段顯示器驅動IC介紹

基本電學基礎實習(內有7447)








三位 三8 七段顯示器 接腳

2014年8月21日 星期四

使用 Arduino 製作 溫控灑水系統 (3.溫度傳感器DS18b20 消化)

上露天搜尋了 DS18b20 溫度傳感器,發現還蠻多種的,有些做成模組,有些則是單顆,還有另外一種不鏽鋼封裝的,裸裝單顆的只要25元,模組的要80~100左右,不過看了一下,以 Arduino 讀取數據似乎都是相同的流程。所以我可能會選不鏽鋼封裝型,大約60元。
DS18b20裸裝
不鏽鋼封裝

DS18b20模組
(以上圖片來自網路)
不過目前尚未購買,先來研究一下它的程式複雜性如何...

查了一下 DS18b20的程式,發現會使用到 OneWire 的 Library,但Arduino IDE 環境內並沒有預裝 OneWire 程式庫,所以又搜尋 OneWire,第一筆就是 Arduino 官網介紹,原來它是Dallas 半導體公司的產品協定,裡面有提供 Arduino OneWire Library 的下載點。

下載之後,解壓縮到 Arduino IDE 的 libraries\ 資料夾下,重啟 Arduino IDE後,就可以在選單 File→Examples→ 內看到 OneWire\ 的範例,其中 DS18x20_Temperature 就是 DS18b20 的讀取範例。

而這個範例內也有一個 連結 介紹,但這個介紹內的範例程式是有使用一個叫 DallasTemperature 的類別,有載入  DallasTemperature.h ,下方也有提供GitHub載點。除了有 .h 和 .cpp 外,還有 Examples 的範例!瞄了一下,原來這個 DallasTemperature 類別把讀取 DS18x20 溫度包裝成一個類別,這樣就比只使用 OneWire更方便使用。

以上,先到這...

補充:剛看到葉難 Arduino練習:溫度感測DS18B20 裡面都有寫到~ 哈哈!!
補充二:DS18b20 接法上 的 Normal Mode 及 Parasite Model 的區別這裡有說明,大致上是說 Normal Mode 用於數量較多且Sensor距離較遠的環境下;Parasite Mode則適用於Sensor數量少,且距離近的清況下用。至於多遠才叫遠,可以看文章內有提到!!

使用 Arduino 製作 溫控灑水系統 (2.構想)

這是此專案的 草案

基本上,想實作這個系統,一方面可以當作學習 Arduino 的相關知識,然後又不想只是測試某些模組,而是可以整合幾個模組,來達到一個特定功能。但...第一個實作,又不想系統太複雜,所以正好想到最近天氣實在太熱,樓頂屋頂如果可以加一個自動灑水系統來降溫,好像也是不錯!! 於是大概蒐集了一些資源,來慢慢完成這個功能。(雖然也許做好可能已經冬天了XD)

構想上的功能大致如下:
可以顯示目前溫度;可以顯示設定啟動/關閉灑水器的溫度上下限;可以顯示設定系統檢查頻率(例如每5分鐘抓一次溫度做檢查);可以顯示設定每次灑水器啟動時間(避免當灑水還是無法達到降溫下限時,會持續啟動)

備選功能:
可以顯示目前濕度;顯示最近 N 筆的溫度變化記錄;顯示最近N久的灑水器啟動次數
(備選功能可不做,或到主功能完成功再看看需不需要)

所以也查了大概需要的元件:

  • Arduino Uno 或 Mega(還會拿來做其他測試)開發板一塊,完成功能後再改用Mini...
  • 一個DHT11溫濕度感測器。(它是數位資料,還有濕度可以抓,先選這顆)
  • 有二位數的顯示器,可以用來顯示目前溫度、顯示設定溫度上下限(啟動灑水檢查用)...等,目前規劃使用兩個七段顯示器。
  • 上網查了一個 CD4511BE 的BCD轉七段顯示器驅動IC (可以省接腳,也可省電阻及升壓電路電晶體)
  • 有三個按鈕,一個為模式/設定切換,另外兩個為溫度上下調整鈕或上下切換鈕。
  • 5V一路的繼電器模組,用來啟動灑水器。
  • 其他電阻電容元件
  • 灑水器為一獨立系統,有一加壓馬達來把水推到管線的灑水孔。

以上就是這個系統大致的構想。所以基本上它也不一定用來啟動灑水器,也許也可以套用在以溫度控制的設備。

不知道以上的構想有沒有其他的模組或元件建議,謝謝!!

這裡有相關的資源:
DHT11  CD4511BE  四位七段顯示器測試  繼電器

CD4511 Sample