久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5997|回復: 2
打印 上一主題 下一主題
收起左側

嵌入式內存的讀寫方法,以及強制類型轉換的知識點

[復制鏈接]
跳轉到指定樓層
樓主
ID:85109 發(fā)表于 2015-7-8 21:39 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
由函數(shù)flash讀取,type為0代表128字節(jié)儲存區(qū),為1代表64K存儲區(qū)(512字節(jié)/扇區(qū))
void InterFlashRead(unsigned short addr, unsigned char nLength, unsigned char* dat)
{
unsigned char i;
EA = 0;
PSCTL=0x04;
FLSCL = 0x00;
for(i=0; i
{
*(dat+i) = *(unsigned char code*)(addr+i);
}
PSCTL = 0;
EA = 1;
}
而想到的問題,其中的   *(dat+i)= *(unsigned char code *)(addr+i);是什么意思呢?
這里面定義的dat是char型指針,也就是說一個指針(地址)保存一個字節(jié)的數(shù)據(jù),然而addr這個地址是short型,addr是一個指針保存2個字節(jié)的數(shù)據(jù),所以要進行強制的類型轉換,(unsignedchar code *)這一部分就是強制轉換

這里要明確的是如果我們對一個整型強制轉換時可以用下列例子描述:
unsigned inta=0x1234;
b=(unsigned char)a;
那么b就等于0x34   (,[size=14.399999618530273px]int型數(shù)值賦給char型變量[size=14.399999618530273px]時,只保留其最低8位,高位部分舍棄)
[size=14.399999618530273px]

[size=14.545454025268555px]但是這個例子當中涉及到了指針的操作,首先把addr是一個地址值,相當于指針當中的&p的值比如是0x1111,那么(unsignedchar code*)(addr+i)這一步就是轉換成指向這個地址的指針,指針的值是0x1111,前面再加一個*號就表示取值,哈哈,就這么理解。


2、以前看到#define SREG   (*(volatile unsigned char*)0x5F)這樣的定義,總是感覺很奇怪,不知道為什么,今天終于有了一點點心得,請大蝦們多多批磚~~~
    嵌入式系統(tǒng)編程,要求程序員能夠利用C語言訪問固定的內存地址。既然是個地址,那么按照C語言的語法規(guī)則,這個表示地址的量應該是指針類型。所以,知道要訪問的內存地址后,比如0x5F,
    第一步是要把它強制轉換為指針類型
(unsigned char *)0x5F,AVR的SREG是八位寄存器,所以0x5F強制轉換為指向unsignedchar類型。
  volatile(可變的)這個關鍵字說明這變量可能會被意想不到地改變,這樣編譯器就不會去假設這個變量的值了。這種“意想不到地改變”,不是由程序去改變,而是由硬件去改變——意想不到。
  第二步,對指針變量解引用,就能操作指針所指向的地址的內容了
   *(volatile unsigned char*)0x5F
  第三步,小心地把#define宏中的參數(shù)用括號括起來,這是一個很好的習慣,所以#defineSREG    (*(volatile unsigned char*)0x5F)
   類似的,如果使用一個32位處理器,要對一個32位的內存地址進行訪問,可以這樣定義:
    #define RAM_ADDR    (*(volatile unsigned long *)0x0000555F)
   然后就可以用C語言對這個內存地址進行讀寫操作了
    讀:tmp = RAM_ADDR;
    寫:RAM_ADDR = 0x55;



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:217617 發(fā)表于 2017-7-7 13:34 | 只看該作者
mark一下,總結得不錯
回復

使用道具 舉報

板凳
ID:234915 發(fā)表于 2017-9-22 16:12 | 只看該作者
樓主辛苦了!!謝謝
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品免费大片 | 国产日韩精品视频 | 久久久久久亚洲精品 | 一区二区久久 | 欧美一区二区三区在线观看视频 | 在线国产中文字幕 | 综合久| 91免费入口| 看av网| 日韩午夜在线播放 | 国产精品久久久久久久久久 | 精品一级毛片 | 日日噜噜噜夜夜爽爽狠狠视频, | 日本在线看 | 国产精品久久久久久一区二区三区 | 二区在线观看 | h片免费在线观看 | 欧美日韩三区 | 日韩在线精品 | 欧美日韩亚洲视频 | 免费中文字幕 | 中文字幕在线观 | 毛片久久久 | 日本精品一区二区三区在线观看视频 | 免费人成激情视频在线观看冫 | 一级黄色片美国 | 午夜精品久久久久久久99黑人 | 久久久久久精 | 情侣av| wwwxxx日本在线观看 | 日韩欧美在线视频播放 | 亚洲精品毛片av | 久久久精彩视频 | 亚洲视频精品在线 | 美女逼网站 | 国产精品色 | 九九九视频 | xxxxx免费视频| 国产高清免费视频 | 永久www成人看片 | 99久久久国产精品 |