錯誤訊息
1 2 |
|
解決方式
- 列出RF的block狀態,如果是硬體關掉請自行打開RF開關
rfkill list all
1 2 3 4 5 6 7 |
|
- 從軟體上面打開WIFI
rfkill unblock wifi
1 2 |
|
rfkill list all
1 2 3 4 5 6 7 |
|
rfkill unblock wifi
有時候手上一堆PDF檔,不知道要查的資料在那個檔案,可以用下面的指令找出
find -name "*.pdf" -exec pdfgrep {} \;
sudo apt-get install pdfgrep
C語言的前置處理(CPP: C preprocessor)是個很有趣的題目,知道在對的時機使用他們絕對能夠對於開發軟體有巨大的幫助。以下是我閱讀GNU: The C Preprocessor的筆記。請注意這只是筆記,詳細資料請自行參考原本網頁。
Ubuntu 12.04
-std=c90
, -std=c99
或-std=c11
參數檢查。全開就用-pedantic
參數-finput-charset=
參數指定source file 字元編碼??/
代表 \
a+++++b
-> a++ ++ +b
而不是a++ + ++b
"
中間包含的字串,包括#include "test.h"
1 2 3 4 5 6 |
|
展開後就是
1 2 3 4 5 6 7 8 9 10 |
|
除了gcc內建的directives外,directives以#
開頭,前後都可以有空白
#include
效果和複製header file到原始碼檔案一樣。你可以用gcc -E 原始碼檔名
看到header file被放入。之所以這樣做就是讓使用者省去複製和多次修改相同介面的時間。#include <file>
-I
參數指定標頭檔路徑#include "file"
-iquote
指定的目錄-I
指定的目錄echo | gcc -v -x c -E -
可以列出gcc 搜尋標頭檔目錄-I
參數,一個以上-I
路徑則由左至右開始搜尋-nostdinc
讓gcc不去搜尋系統標準的include path1 2 3 4 5 6 |
|
1 2 3 4 5 |
|
1
|
|
1
|
|
GCC會忽略掉系統標頭檔的Warning,如果其他一般標頭檔想要有相同的處理方式,可以使用-isystem 路徑
讓GCC將該目錄下的標頭檔視為系統標頭導
#define foo()
: 重點是(),()前面不得有空格
callback = foo;
這樣的描述,
分開。所以MAC(buf[x = 1, u + 1])
這樣的程式碼會被拆成兩個參數,請使用MAC((buf[x = 1, u + 1]))
,
隔開。1 2 3 4 5 6 |
|
"
並且和參數相同,最後並不會被替換。
FOO(X) _bar(x, "x");
-> FOO(bar) _bar(bar, "x");
1
|
|
ENCLOSE_QUOTE(test);
-> "test"
1 2 3 |
|
ENCLOSE_QUOTE(PLAY);
-> "PLAY"
TO_STR(PLAY)
-> ENCLOSE_QUOTE(0)
-> "0"
echo -e "#define MYDEF(PARAM1, PARAM2) PARAM1##PARAM2 \n\n MYDEF(xxx, yyy)" | gcc -E -x c -
#define my_printf(...) printf("myprintf: " __VA_ARGS__)
#define my_printf(arg...) printf("myprintf: " args)
#define my_printf(format, ...) fprintf(stderr, format, __VA_ARGS__)
my_printf("test");
會GG,因為被轉成fprintf(stderr, "test",);
#define my_printf(format, ...) fprintf(stderr, format, ##__VA_ARGS__)
,
硬食掉__FILE__
__LINE__
__func__
__FUNCTION__
__DATE__
__TIME__
__STDC__
:顯示目前是否使用Standard C編譯程式碼__STDC_VERSION__
:Standard C版本__cplusplus
:是否為C++編譯環境__OBJC__
:是否為object C編譯環境__ASSEMBLER__
:是否在組合語言環境__COUNTER__
:回傳一個從0開始的數字,每次呼叫一次加一__VERSION__
__GNUC__
__GNUC_MINOR__
__GNUC_PATCHLEVEL__
__GNUG__
:是否是用GNU C++__INCLUDE_LEVEL__
:標頭檔被引用的深度,從0開始算。如a->b->c,c就是2__ELF__
:輸出格式是否為elf__TIMESTAMP__
echo "" | gcc -x c -E -dM -
__
包夾或是_
+大寫
為系統內建Macro,其name space保留。1 2 3 4 |
|
1 2 3 4 |
|
1 2 3 |
|
1 2 3 4 5 6 |
|
編譯會錯誤,原因是因為分號會讓gcc判斷if statement已經結束
1 2 3 4 |
|
do {...} while (0)
1 2 3 4 5 6 |
|
除非明確了解巨集內容,否則避免直接傳函數進去巨集。MY_TEST(func(xy,xx), 10));
-I /usr/include
)或是直接連在一起(-I/usr/include
)-D 文字
: 定義文字
巨集為1
echo "TEST" | gcc -E -xc -DTEST -
-D 文字=文字
:定義文字
巨集
echo "TEST" | gcc -E -xc -DTEST=CPP -
-U
: undefine 巨集,如果參數同時有-U
和-D
的話優先先出現的先做-I dir
:指定搜尋header file目錄
dir
以=
開頭,gcc會取代成sysroot路徑,參考--sysroot
和-isysroot
-M
:列出要檔案要吃的source code和header files
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
-MM
:列出要檔案要吃的source code和非系統的header files1 2 |
|
-MF file
:配合-M
, -MM
時將結果寫入file
-MG
: -M
, -MM
parse到header file不存在會跳錯誤,而加上-MG
後會假裝他們存在,照樣吐出結果。1 2 3 4 5 6 |
|
-MP
: 順便把depend的target加入1 2 3 4 |
|
-MT
:指定target1 2 |
|
-MD
: 直接編譯,同時把會吃的檔案和header files放在*.d檔1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
-MMD
: 直接編譯,同時把會吃的檔案和非系統header files放在*.d檔1 2 3 4 5 6 |
|
-dM
: 列出編譯時所有的巨集,不列出展開巨集的結果, 通常配合-E
-dD
: 列出編譯時不包含predefine的巨集以及展開巨集的結果, 通常配合-E
-dN
: 和-dD
的差別是巨集只列出名稱不列出要展開的內容, 通常配合-E
#define foo bar
-dD
輸出 #define foo bar
,-dN
結果 #define foo
-dI
:不顯是巨集,而是顯示#include
的指令-C
: 保留註解,不包含巨集展開的部份註解-CC
: 保留註解,包含巨集展開的部份註解-H
:列出編譯時會參考的header files
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
|
1
|
|
出處:The Architecture of Open Source Applications (Volume 2): FreeRTOS
static xList pxReadyTasksLists[ configMAX_PRIORITIES ];
vTaskSwitchContext()
vTaskSwitchContext()
xItemValue
順序排列安裝完作業系統後還需要裝一些平常使用的工具,順手整理一下
1
|
|
1
|
|
1
|
|
/etc/network/interfaces
1
|
|
/etc/network/interfaces
1
|
|
1
|
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
|
aptitude upgrade --full-resolve -y
我常用libatk-adaptor
libgail-common
gvim
不會出現下面錯誤訊息1 2 |
|
對於技術文件寫作來說,能夠省去複雜語法和繁複操作,同時又能方便的寫出好的架構和論述很重要。因此我需要
為了做出好的文件,了解並學習Markdown語法是必經的路程。就讓我邊查資料現學現賣吧。
注意!有些效果可以透過不同語法達成。 本文只列出我感興趣的語法,並沒有列出完整的語法。
## 主標題
### 次要標題
#### 更次要標題,最多到6個#
- 第一層List
- 第二層List,和第一層隔4個空白字元或是tab
- 第三層List,和第二層隔4個空白字元或是tab
1. 第一層List
1. 第二層List,和第一層隔4個空白字元或是tab
1. 第三層List,和第二層隔4個空白字元或是tab
1. 第一層List
- 第二層List,和第一層隔4個空白字元或是tab
1. 第三層List,和第二層隔4個空白字元或是tab
***
*斜體字,字和星號中間不能空白*
斜體字,字和星號中間不能空白
**粗體字,字和星號中間不能空白**
粗體字,字和星號中間不能空白
[本站](http://wen00072.github.io)
- 這個bullit 效果沒有出來 - 這個bullit 效果沒有出來
̀我是程式碼 ̀
我是程式碼
> 第一層引用
>> 第二層引用
第一層引用
第二層引用
行尾沒有空白字元
第二行
行尾沒有空白字元 第二行
行尾加上兩個以上空白字元
第二行
行尾加上兩個以上空白字元
第二行
1 2 |
|
~~打我啊笨蛋,~和句子中間一樣不能有空白~~
打我啊笨蛋,~和句子中間一樣不能有空白
使用
```把程式包起來
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 |
|
Octopress的語法讓使用者提供
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 |
|
這是從The clean coder中文版看到的時間方式,本來想要找看看Ubuntun上面有沒有現成軟體可以用。後來看到有人使用Shell Script去弄一個。手癢也來做一個自己的版本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
|
出處:[OpenStack] GIT Commit Good Practice