音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術 | 電源技術 | 測控之家 | EMC技術 | ARM技術 | EDA技術 | PCB技術 | 嵌入式系統(tǒng)
驅動編程 | 集成電路 | 器件替換 | 模擬技術 | 新手園地 | 單 片 機 | DSP技術 | MCU技術 | IC 設計 | IC 產業(yè) | CAN-bus/DeviceNe

又有問題啦,最近問題多多...

作者:ddtv 欄目:單片機
又有問題啦,最近問題多多...
Q1: 用C怎樣讀FLASH里的數(shù)據(jù)? 我用s = *(volatile uchar *)0xde00; 讀是錯誤的數(shù)據(jù),不知道是讀到什么地方了.

Q2: 怎樣校準8M下RC的頻率,如果是4M CPROG08SZ可以自動校準,但是在8M下編 程到校準CRC-8的時候就出錯(error 50). 編程用的P&E,時鐘來自debuger,7.5MHz.

程序只是移植過來,本以為很快搞定,結果搞了2星期,離項目完成時間越來越短了,可查的資料也太少了點

2樓: >>參與討論
ambercctv
你怎么知道錯了,0xDE00這個地址對嘛?
 
3樓: >>參與討論
冷若寒
你用的哪款芯片?
 
4樓: >>參與討論
ddtv
這么快就有回復啦
芯片是mc68hc908QB8,0xde00--0xdeff是我保留的地址,通過調用on chip rom里的程序已經可以寫入和擦除了,是用codewarrior編譯下載和查看的(P&E調試器),地址0xde00開始的10個字節(jié)我寫入了0,1,2... 但是上述程序讀出來的值是錯的(0x36,0xe7,..0xe7,0xe7,0xe7..)記得不太準確.

5樓: >>參與討論
imwangyi
建議
Q1:要確定語句是否給編譯時給優(yōu)化了.對于不需要被優(yōu)化的,請用volatile定義變量,比如volatile unsigned CHAR S.

Q2:需要知道你們的工作電壓等,才能知道怎么辦.



6樓: >>參與討論
xzliu
imwangyi: 工作電壓是5V,usb的P&E仿真器供電
如果用外部電源供電則不能下載,每次下載都失敗.

7樓: >>參與討論
imwangyi
您用的是什么工具?
QB對4M/8M CYCLONE PRO有兩個算法,您是否可以將流程說來聽聽?

8樓: >>參與討論
ddtv
以下流程
因是專門上網(wǎng)機器,圖、軟件等都沒有。憑印象了
Q1: 已經加了volatile 了啊

Q2:  CODEWARRIOR中選debug,(make圖標的后一個),自動啟動調試軟件。
之前已選好(第二個選項:P&E...,不是ICS p&E....),選擇p&E提供的5V,選擇來自p&E的時鐘分頻(5.0M或7.5M都可).校準選項選8M.
連接...,出現(xiàn)"擦除并編程FLASH",確定.
下載中.... 到校驗CRC8的時候就出錯了.
其實2個都試過好幾次了.

9樓: >>參與討論
imwangyi
:)
Q1:
s = *(volatile uchar *)0xde00;
volatile需要對s定義.

Q2:
看不到你說的界面,能否貼個圖?不能肯定你手上的p&E Debug QB時,是用的內部時鐘.
另,你CW用的是什么版本?

10樓: >>參與討論
ddtv
老問題加舊問題一起又來了
imwangyi你說的Q1方法也試過了. 調試時用的p&E的時鐘7.5MHz. Vcw=5.7.
圖沒法貼,專用的上網(wǎng)機器,任何代碼都拷不出來,程序都是敲上來的.

現(xiàn)在的問題依然沒解決.我把問題重新說一下.
問題1: 這樣讀寫FLASH
     前幾天調用ROM里的程序可以寫數(shù)據(jù)了,今天改了點程序后發(fā)現(xiàn)寫也不對了,寫入了錯誤的數(shù)據(jù),懷疑是絕對定位時沒有保留地址造成的,不知會不會這樣?再改了改寫入就好了.
讀還是錯誤的數(shù)據(jù).

問題2: 怎樣校準8M下RC的頻率,如果是4M CPROG08SZ可以自動校準,但是在8M下編 程到校準CRC-8的時候就出錯(error 50). 編程用的P&E,時鐘來自debuger,7.5MHz.

單片機MC68HC908QB8,5V,8M內部RC,以下程序:
//定義
uchar CTRLBYT       @0X88; //擦除頁/ALL
uchar CPUSPD        @0X89; //震蕩器頻率:8M 內部RC
uint  LAST_ADDR     @0X8A; //寫入的最后地址
uchar PROG_DATA[10] @0X8C; //要寫入數(shù)據(jù)存儲區(qū)

void main(void)
{
uchar s,t;
MCU_init();
self_test(); //自檢測,約需3s

//FLASH erase
CTRLBYT = 0;     //erase page
CPUSPD = 8;      //8M rc
asm ldhx #$de00; //要擦除的頁
asm jsr  $2806;  //調用ROM擦除程序

//FLASH write
for(s=0; s<10; s++)
   PROG_DATA[s] = s; //
CTRLBYT = 0;        //與編程無關
CPUSPD = 8;         //8M rc
LAST_ADDR = 0xde09; //編程結束地址
asm ldhx #$de00;    //要編程的頁
asm jsr  $2809;     //調用ROM編程程序

putch(0xaa);
for(s=0; s<12; s++)
{
   t = *(volatile const uchar *)(0xde00+s); //讀是錯誤的數(shù)據(jù),匯編代碼也沒看明白,地址好象是丟掉了高字節(jié)
   putch(t);
}
while(1)
{
   RED_LIGHT = 1;
}
}   



11樓: >>參與討論
imwangyi
CPUSPD = f(op) times 4 for QB
So, CPUDPF=32.

下次說問題要明了點,否則,呵呵,難以明白是什么問題.



12樓: >>參與討論
JerryBJ
試試看
“今天改了點程序后發(fā)現(xiàn)寫也不對了,寫入了錯誤的數(shù)據(jù),懷疑是絕對定位時沒有保留地址造成的,不知會不會這樣?再改了改寫入就好了.”
“t = *(volatile const uchar *)(0xde00+s); //讀是錯誤的數(shù)據(jù),匯編代碼也沒看明白,地址好象是丟掉了高字節(jié)”

讀內容的代碼本身沒有問題。在調試的MEMORY窗口中看0xDE00以及后續(xù)單元的內容,看正確的數(shù)據(jù)是什么(寫錯了還是讀錯了)。
感覺好像是地址分配沖突的問題。檢查PRM文件,地址0xDE00這一頁是否從ROM段中剝離出來;



13樓: >>參與討論
ddtv
下面是調試界面,傳上來不容易啊
匯編的看不明白


14樓: >>參與討論
JerryBJ
奇怪
TSX                   ; 把SP的值送到HX(使HX指向s)
CLR ,X                ; s = 0
LDX ,X   ; jump here  ;
CLRH                  ; 這一句果然有問題哦,H=0xde才對。
LDA ,X                ; 讀取HX指向的單元
TSX                   ; 把SP的值送到HX(使HX指向s)
STA 1,X               ; 存放到t
INC ,X                ; s += 1
LDA ,X                ; s >= 12?
CMP #0x0C
BCS *-10              ; not, loop

可不可以把你的整個工程zip發(fā)給我看看?jerry.shi@tom.com

15樓: >>參與討論
imwangyi
試試volatile uchar s,t;
這么定義就可以啦,否則,可能給優(yōu)化掉了.
因為t你沒用,呵,太智能了也不好.:P


16樓: >>參與討論
ddtv
好,明天再借個電腦傳上來

imwangyi :局部變量前加volatile沒試,不過全局變量前曾加了volatile也試過了.大概我能想到的都試過了


17樓: >>參與討論
ddtv
下載后改成rar,各位大蝦有錢的出錢有力的出力啊
上面的圖我怎么看是2張啊。

../uploadfile/200705142316406299.jpg

18樓: >>參與討論
ddtv
這個是
http://bbs.21ic.com/upfiles/img/200612/2006121717287461.rar

http://bbs.21ic.com/upfiles/img/200612/2006121717287461.rar

19樓: >>參與討論
imwangyi
ddtv:我其實已經試過OK后才發(fā)的,應該沒問題,呵
 
20樓: >>參與討論
JerryBJ
MEMORY MODEL
檢查了你的工程設置,果然選擇了Tiny模式的MEMORY MODEL。而在此模式下,所有的指針都是8bit長度的。使用HX作為指針訪問內存的時候,H會被自動清零。解決辦法:
1)重新建立一個Small模式的工程;蛘咴赑roject Option Settings里邊,Code Generation,MEMORY MODEL選擇Small MEMORY MODEL。
或者:
2)使用一個被__far修飾的指針指向FLASH地址:
unsigned CHAR* __far ptr;  //定義一個全局的FAR指針;
在main中讀取FLASH的地方,
ptr = (unsigned CHAR * __far)0xde00; // 初始化指針ptr
// ……
t = *(uCHAR * __far)(ptr + s);       // 使用FAR指針讀取FLASH

21樓: >>參與討論
JerryBJ
軸了
其實不用定義ptr,在讀取的時候,用__far直接強制轉換就行了:
  t = *(unsigned CHAR * __far)(0xde00 + s);


22樓: >>參與討論
ddtv
太感謝JerryBJ斑竹了!!!!
這個問題困擾了我好長時間,問了好多人都沒解決.真不知怎么感謝才好!等這個項目忙完了一定好好看看資料.
其他各位幫助過的也一并感謝!!


* - 本貼最后修改時間:2006-12-18 10:58:41 修改者:ddtv

23樓: >>參與討論
JerryBJ
呵呵,不用客氣
祝調試愉快!

24樓: >>參與討論
ddtv
有時間來南京我請你吃飯哦!
 
參與討論
昵稱:
討論內容:
 
 
相關帖子
高人幫我看看下面這段程序--ram中flash的擦除改寫
編譯時老提示RAM OVERLAP,是怎么回事?
如何實現(xiàn)hdlc協(xié)議?搜到的片子太貴了,有便宜點的方法嗎?
求mc9328mxl最小系統(tǒng)電路圖
關于CODEWARRIOR 的ID 文件
免費注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點此進入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號