找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1811|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

指針變量問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:78835 發(fā)表于 2022-8-11 10:10 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
遇到一個(gè)指針變量問題,在keil C51下傳入指針后不會(huì)改變?cè)贾担欢浦驳絀AR for AVR 就會(huì)改變?cè)贾,是因(yàn)閮?nèi)核不一樣嗎?
下圖是C51的仿真測(cè)試,可以看出2次打印都是0xFFFF,原始值不變。



下圖是AVR的仿真測(cè)試,可以看出第1次打印是0xFFFF,第二次打印就是0x0000了。



AVR下經(jīng)過了HC595_COM1_WR_NByte(2,(uint8_t *)&MyTime.Public_10ms);函數(shù)后,原始的值就改變了,C51和AVR的HC595_COM1_WR_NByte函數(shù)是一樣的,下圖就是函數(shù)原型。


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

使用道具 舉報(bào)

沙發(fā)
ID:78835 發(fā)表于 2022-8-11 10:26 | 只看該作者
臥槽,沒仔細(xì)看,C51的我改過了,用了一個(gè)臨時(shí)變量,傳遞指針變量,所以C51的測(cè)試可以,打擾了。。。
void HC595_COM1_WR_NByte(uint8_t Len, uint8_t *GPIOValue)
{
    uint8_t i=0,Byte=0;
        while(Len--)
        {
                  Byte=*GPIOValue;
                HC595_COM1_STCP_RESET();
                for(i=0;i<8;i++)
                {               
                        HC595_COM1_SHCP_RESET();
                        if(Byte & 0x80)
                        {
                                HC595_COM1_DS_SET();
                        }
                        else
                        {
                                HC595_COM1_DS_RESET();
                        }
                        HC595_COM1_SHCP_SET();
                        Byte <<= 1;
                }       
                HC595_COM1_STCP_SET();
                GPIOValue++;
        }
}
回復(fù)

使用道具 舉報(bào)

板凳
ID:78835 發(fā)表于 2022-8-11 10:26 | 只看該作者
這帖子可以結(jié)束了
回復(fù)

使用道具 舉報(bào)

地板
ID:883242 發(fā)表于 2022-8-11 20:44 | 只看該作者
這個(gè)帖子并沒有結(jié)束,最關(guān)鍵的問題樓主還是沒有搞清楚。

在c語言里面,正常的做法是傳值,如果是傳指針,就是希望指針指向的值要被改變。

任何一本c語言教科書,關(guān)于函數(shù)都是從printf和scanf開始講的吧?這個(gè)兩個(gè)函數(shù)一個(gè)是傳值,一個(gè)是傳指針,為什么???
回復(fù)

使用道具 舉報(bào)

5#
ID:78835 發(fā)表于 2022-8-13 08:51 | 只看該作者
Hephaestus 發(fā)表于 2022-8-11 20:44
這個(gè)帖子并沒有結(jié)束,最關(guān)鍵的問題樓主還是沒有搞清楚。

在c語言里面,正常的做法是傳值,如果是傳指針 ...

之所以傳入指針,是因?yàn)榉奖銓懭攵鄠(gè)數(shù)據(jù),595級(jí)聯(lián)過去,一次要寫入幾個(gè)數(shù)據(jù),傳值進(jìn)去不太方便,傳指針進(jìn)去,就是變量的地址,我在函數(shù)里面做了右移的操作,改變了原始的值,后面改成用一個(gè)臨時(shí)變量來操作右移
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

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

快速回復(fù) 返回頂部 返回列表