鑑於有很多零碎的知識,寫在筆記本裡面容易搞忘了,所以單獨開一篇文章來記錄。
1.1、__no_init 是乙個segment(段),是給linker用的,定義到不初始化的塊中去。
常用來儲存一些敏感資訊,特殊應用場合下的不能被復位的資料或者做復位判斷標誌等資料(詳細使用方法見:)
1.2、@就是指定位址(大部分編譯器都是這麼用的)。
在定義全域性變數的時候,比如 int char; 即使你沒有賦值給他,編譯器還是會給他乙個初始化值0,編譯的時候編譯器把他分配到初始化為零的那個segment中去了。
編譯器預設的有幾個塊
a.初始化為零的塊
b.初始化不為零的塊
c.不初始化的塊
我們可以定義自己的塊,**如下:
extern volatile byte spprxstatus;
extern volatile byte spptxstatus;
__no_init spp_rx_struct rxdata @ "pm0_xdata";
__no_init spp_tx_struct txdata @ "pm0_xdata";
如上面的pm0_xdata就是自己定義的乙個塊,那麼這個塊是個什麼屬性呢?是__no_init 屬性,有了這個屬性,編譯器只給你分配空間,不給你初始化。
我們知道,乙個漢字佔兩個位元組,而單引號只能放乙個位元組,所以我們使用雙引號(放字串),形式如下:
const char* name = "例子";
senddatabuf[9] = *name;
senddatabuf[10] = *(name + 1);
senddatabuf[11] = *(name + 2);
senddatabuf[12] = *(name + 3);
或者
const char* name = "例子";
senddatabuf[9] = name[0];
senddatabuf[10] = name[1];
senddatabuf[11] = name[2];
senddatabuf[12] = name[3];
【end/2015-09-23】
今天看ucos-ii的核心**,突然分不清楚乙個很簡單的小問題,因此做乙個小記錄,**如下:
#define hong_ding_yi 10 //巨集定義 前面代替後面
typedef unsigned char u8; //重新命名 後面代替前面
作用:將後面的字串用乙個清晰易記的名字來替代,編譯時後面的內容將取代前面的巨集名
優點:方便程式修改、提高程式執行效率
裝逼說法:被定義為「巨集」的識別符號稱為「巨集名」。在編譯預處理時,對程式中所有出現的「巨集名」,都用巨集定義中的字串去代換,這稱為「巨集代換」或「巨集展開」。
作用:重新命名,便於理解和記憶
優點:方便不一混淆
【end/2015-12-04】
苦海拾貝 職業思考
真正的愛一行才能做好一行,之前是只聽過這個道理,秋招之後有點懂了。大家的offer基本可以分為三個等級 普通,sp,ssp。我發現能拿到ssp的,靠的並不是實習的時長,他們絕大部分都對 十分熱愛,對相關知識有強烈的探索慾望。對應的,他們也基本建立了相關的知識體系,已經對工作內容有了較為系統的理解。而...
jquery常用技巧拾貝
本文目的 使用jquery有一段時間,積累了一些使用技巧,記錄在這裡,方便日後查閱。jquery的確實現了對使用者的承若 write less,do more 文字框 html頁面 獲取文字框輸入 var stxt id demo text val stxt變數現在的值為文字框的輸入 設定文字框 i...
碼海拾貝 之Perl 獲取日期以及日期的加減
在perl 中,不安裝其他模組的狀況下,可以使用 localtime 來獲取當地日期和時間。在標量上下文中,返回的是字串格式。my localtime localtime print n localtime n 返回 thu jan 1 18 17 56 2015 在列表上下文中,返回的是描述當前時...