先占個位置,后續(xù)邊學習邊更新~~
把自己所學的,所理解的東西發(fā)出來~~
先占個位置,后續(xù)邊學習邊更新~~
把自己所學的,所理解的東西發(fā)出來~~
在第3樓這段程序中
你可以看到
很多人都會有疑問,這個1UL是什么意思?
下面就是解釋
0UL 表示 無符號長整型 0
1UL 表示 無符號長整型 1
如果不寫UL后綴,系統(tǒng)默認為:int, 即,有符號整數(shù)。
uCOS里面的時間管理關鍵宏定義OS_TICKS_PER_SEC
OS_TICKS_PER_SEC這個東西表示CPU一秒鐘進行多少次時鐘中斷,也就決定了最小的延時間隔,比如OS_TICKS_PER_SEC設置成100,則表示1s里面會發(fā)生100次時鐘中斷,也就是10ms來一次中斷,則最小的延時單位就是10ms。
在LM3S平臺下移植ucos,用systick來做時間管理的時鐘源的話,初始化的時候是這樣寫的:
SysTickPeriodSet((INT32U)(SysCtlClockGet() / OS_TICKS_PER_SEC) );
Intel HEX 文件是由一行行符合Intel HEX 文件格式的文本所 構 成的ASCII 文本文件。在Intel HEX 文件中,每一行包含一 個 HEX 記錄 。 這 些 記錄由 對應 機器 語 言 碼 和/ 或常量 數(shù) 據(jù)的十六 進 制 編碼數(shù) 字 組 成。Intel HEX 文件通常用于 傳輸將 被存于ROM 或者EPROM 中的程序和 數(shù) 據(jù)。大多數(shù) EPROM 編 程器或模 擬器使用Intel HEX 文件。
記錄 格式
Intel HEX 由任意數(shù)量的十六 進 制 記錄組 成。每 個記錄 包含5 個 域, 它們按以下格式排列:
:llaaaatt[dd...]cc
每一組字母 對應 一 個 不同的域,每一 個 字母 對應 一 個 十六 進 制 編碼 的 數(shù) 字。每一 個 域由至少 兩個 十六 進 制 編碼數(shù) 字 組 成, 它們構 成一個 字 節(jié) ,就像以下描述的那 樣:
: 每個Intel HEX 記錄 都由冒 號開頭 .
ll 是 數(shù) 據(jù) 長 度域, 它 代表 記錄當 中 數(shù) 據(jù)字 節(jié) (dd) 的 數(shù)量 .
aaaa 是地址域, 它代表 記錄當 中 數(shù)據(jù)的起始地址 .
tt 是代表HEX 記錄類 型的域 , 它 可能是以下 數(shù) 據(jù) 當 中的一 個:
00 – 數(shù) 據(jù) 記錄
01 – 文件結 束 記錄
02 – 擴展段地址 記錄
04 – 擴展 線 性地址 記錄
dd 是數(shù) 據(jù)域 , 它 代表一 個 字 節(jié) 的 數(shù) 據(jù). 一 個記錄 可以有 許 多 數(shù) 據(jù)字 節(jié) . 記錄當 中 數(shù) 據(jù)字 節(jié) 的 數(shù) 量必 須 和 數(shù) 據(jù) 長 度域(ll) 中指定的 數(shù)字相符.
cc 是校驗 和域 , 它 表示 這個記錄 的校 驗 和. 校 驗 和的 計 算是通 過將記錄當 中所有十六 進 制 編碼數(shù) 字 對 的 值 相加, 以256 為 模 進 行以下 補足.
表示為:“:[1字節(jié)長度][4字節(jié)地址][1字節(jié)記錄類型][數(shù)據(jù)段][校驗和] ”
數(shù) 據(jù) 記錄
Intel HEX文件由任意數(shù) 量以回 車換 行符 結 束的 數(shù) 據(jù) 記錄組 成. 數(shù) 據(jù) 記錄 外 觀如下:
:10246200464C5549442050524F46494C4500464C33
其中:
10 是這個記錄當中 數(shù) 據(jù)字 節(jié) 的 數(shù)量.即0x10
2462 是數(shù)據(jù) 將 被下 載 到存 儲 器 當中的地址.即0x2462
00 是記錄類型( 數(shù) 據(jù) 記錄).即0x00
464C…464C是 數(shù)據(jù).分別代表0x46,0x4C...
33 是這個記錄的校 驗和.即0x33
擴展 線 性地址 記錄(HEX386)
擴 展 線 性地址 記錄 也叫作32 位地址 記錄 或HEX386 記錄 . 這 些 記錄 包含 數(shù) 據(jù)地址的高16 位. 擴 展 線 性地址 記錄總 是有 兩個數(shù) 據(jù)字 節(jié) , 外 觀如下:
:02000004FFFFFC
其中:
02 是這個記錄當中 數(shù) 據(jù)字 節(jié) 的 數(shù)量.
0000 是地址域, 對于 擴 展 線 性地址 記錄 , 這個 域 總是0000.
04 是記錄類型 04( 擴 展 線 性地址 記錄)
FFFF 是地址的高16 位.
FC 是這個記錄的校 驗 和, 計算方法如下:
01h + NOT(02h + 00h + 00h + 04h + FFh + FFh).
當一 個擴 展 線 性地址 記錄 被 讀 取, 存 儲 于 數(shù) 據(jù)域的 擴 展 線 性地址被保存, 它 被 應 用于 從 Intel HEX 文件 讀 取 來 的 隨 后的 記錄 . 線 性地址保持有效, 直到 它 被另外一 個擴 展地址 記錄 所改 變.
通 過 把 記錄當 中的地址域 與 被移位的 來 自 擴 展 線 性地址 記錄 的地址 數(shù) 據(jù)相加 獲 得 數(shù) 據(jù) 記錄 的 絕對 存 儲器地址.
以下的例子演示了這個過 程..
來自 數(shù) 據(jù) 記錄地址域的地址 2462
擴展 線 性地址 記錄 的 數(shù)據(jù)域 + FFFF
------------
絕對存 儲 器地址 FFFF2462
擴 展段地址 記錄(HEX86)
擴 展段地址 記錄 也叫HEX86 記錄 , 它 包括4-19 位 數(shù) 據(jù)地址段. 擴 展段地址 記錄總 是有 兩個數(shù) 據(jù)字 節(jié) , 外 觀如下:
:020000021200EA
其中:
02 是記錄當中 數(shù) 據(jù)字 節(jié) 的 數(shù)量.
0000 是地址域. 對于 擴 展段地址 記錄 , 這個 域 總是0000.
02 是記錄類型 02( 擴 展段地址 記錄)
1200 是地址段.
EA 是這個記錄的校 驗 和, 計算方法如下:
01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).
當一 個擴 展段地址 記錄 被 讀 取, 存 儲 于 數(shù) 據(jù)域的 擴 展段地址被保存, 它 被 應 用于 從 Intel HEX 文件 讀 取 來 的 隨 后的 記錄 . 段地址保持有效,直到 它 被另外一 個擴 展地址 記錄 所改 變.
通 過 把 記錄當 中的地址域 與 被移位的 來 自 擴 展段地址 記錄 的地址 數(shù) 據(jù)相加 獲 得 數(shù) 據(jù) 記錄 的 絕對 存 儲器地址.
以下的例子演示了這個過 程..
來自 數(shù) 據(jù) 記錄地址域的地址 2462
擴展段地址 記錄數(shù)據(jù)域 + 1200
---------
絕對存 儲 器地址 00014462
文件 結 束(EOF) 記錄
Intel HEX文件必須 以文件 結 束(EOF) 記錄結 束. 這個記錄 的 記錄類 型域的 值 必 須 是01.EOF 記錄 外 觀總是如下:
:00000001FF
其中:
00 是記錄當中 數(shù) 據(jù)字 節(jié) 的 數(shù)量.
0000 是數(shù)據(jù)被下 載 到存 儲 器 當 中的地址. 在文件 結 束 記錄當 中地址是 沒 有意 義被忽略的.0000h 是典型的地址.
01 是記錄類型 01( 文件 結 束 記錄)
FF 是 這個記錄 的校 驗 和, 計算方法如下:
01h + NOT(00h + 00h + 00h + 01h).
Intel HEX 文件例子:
下面是一個 完整的Intel HEX 文件的例子:
:10001300AC12AD13AE10AF1112002F8E0E8F0F2244
:10000300E50B250DF509E50A350CF5081200132259
:03000000020023D8
:0C002300787FE4F6D8FD7581130200031D
:10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016
:04003F00A42EFE22CB
:00000001FF
下面開始學習用庫函數(shù)來學習串口通訊協(xié)議
從STM32手冊上看到了智能卡協(xié)議: