• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::


Browsing this Thread:   1 Anonymous Users






Re: c30 陣列與強制轉型及指標的問題
#5
資深會員
資深會員


查看用戶資訊
您的例子是用負數,這樣把資料折開太為難我了,所以我再另外出一個列提,您再幫我左看右看一下,是不是像您說的一樣

"只是把unsigned char變成unsigned int的格式。High byte補0。"

unsigned char data[4] = {0x12, 0x34, 0x56, 0x78};

unsigned char d = 0x55;
unsigned char c = 0xaa;
unsigned char e = 0x55;

unsigned int a, b;


a = *(unsigned int *)&data[0];
a = *(unsigned int *)&data[1];
a = *(unsigned int *)&data[2];
b = *(unsigned int *)&c;//真的會High byte補0?(我是把位址的資料型態強制轉型,而不是單純吧資料型態強制轉型哦!!)

a = (unsigned int)data[1];//您說的狀況應該是這個"High byte補0。"



ps.我這些動作都是在16bits的MCU上測試的,因為8bitsMCU沒有這個問題。(或許是Compiler需要做設定吧,不知道有沒有人有類似的問題,而且有解答的呢?謝謝)

發表於: 2008/11/7 9:27
我相信解決問題的方法不只一種,所以我在回答同好的問題時或者提出與主題不同的方案,
請不要以此做為攻擊的目標,畢竟我也只是想和大家討論如何解決問題而已…
解決問題最重要,.....
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: c30 陣列與強制轉型及指標的問題
#4
資深會員
資深會員


查看用戶資訊
參照:

unsigned char data[] = {1,2,3,4,5,6,7,8};
unsigned int int_a, int_b;//sizeof(int) = 2 bytes

int_a = *(unsigned int *)&data[1];
//照理說int_a會 = 0x0302;但是實際結果好像不會是如此?不知道為什麼?

//難道一定要這樣子嗎?陣列的起始一定要是0或是雙數才可以嗎?
int_a = *(unsigned int *)&data[0];

//這種問題我要怎麼解決呢?

//我現在的解決方式是
int_a = (data[2] << 8) + data[1];

}


int_a = *(unsigned int *)&data[1];

只是把unsigned char變成unsigned int的格式。High byte補0。
我左看右看都不會覺得存取到data[2]的資料。不知道你「照理說」是照什麼理?這個你要去看一下c語言的書去瞭解一下轉型到底是怎樣一回事情。

用一個照你的理來說好了。
char data[] = {-1,-2,-3,-4,-5,-6,-7,-8};
        
int int_aint_b;//sizeof(int) = 2 bytes

        
int_a = *(int *)&data[1];


你覺得這個int_a等於多少?

發表於: 2008/11/6 20:17
不要問我哪裡來,我只是個流浪天涯的工程師
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: c30 陣列與強制轉型及指標的問題
#3
資深會員
資深會員


查看用戶資訊
可是…我是組合語言自吃耶^^"
可不可以直接說明呢?謝謝

我在pc端的程式(BCB)也遇到相同的問題,就是如果要將BYTE的陣列強制轉型的話,那麼陣列的位址也一定要是0或是偶數的才可以。
我在想…會不會是C COMPILER的規則?。

參照:

master 寫道:
把Disassembly視窗打開看應該就能瞭解了....XD

發表於: 2008/11/6 19:12
我相信解決問題的方法不只一種,所以我在回答同好的問題時或者提出與主題不同的方案,
請不要以此做為攻擊的目標,畢竟我也只是想和大家討論如何解決問題而已…
解決問題最重要,.....
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: c30 陣列與強制轉型及指標的問題
#2
資深會員
資深會員


查看用戶資訊
把Disassembly視窗打開看應該就能瞭解了....XD

發表於: 2008/9/9 22:43
不要問我哪裡來,我只是個流浪天涯的工程師
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


c30 陣列與強制轉型及指標的問題
#1
資深會員
資深會員


查看用戶資訊
MCU是24H(16 bits)
Compiler是C30

//-----------------------------------------------
//
//-----------------------------------------------
void func1(void)
{
unsigned char data[] = {1,2,3,4,5,6,7,8};
unsigned int int_a, int_b;//sizeof(int) = 2 bytes

int_a = *(unsigned int *)&data[1];
int_b = *(unsigned int *)&data[2];

//照理說int_a會 = 0x0302;但是實際結果好像不會是如此?不知道為什麼?

//難道一定要這樣子嗎?陣列的起始一定要是0或是雙數才可以嗎?
int_a = *(unsigned int *)&data[0];

//這種問題我要怎麼解決呢?

//我現在的解決方式是
int_a = (data[2] << 8) + data[1];

//不過這樣又太麻煩了。
//不知道有什麼好方法?謝謝



}

發表於: 2008/9/9 20:05
我相信解決問題的方法不只一種,所以我在回答同好的問題時或者提出與主題不同的方案,
請不要以此做為攻擊的目標,畢竟我也只是想和大家討論如何解決問題而已…
解決問題最重要,.....
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------