新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > (*(void(*)())0) ()講解-單片機(jī)另類(lèi)的復(fù)位

        (*(void(*)())0) ()講解-單片機(jī)另類(lèi)的復(fù)位

        作者: 時(shí)間:2016-11-30 來(lái)源:網(wǎng)絡(luò) 收藏
        硬件地址跳到0處

        (*(void(*)())0)();

        本文引用地址:http://www.104case.com/article/201611/323698.htm

        預(yù)備知識(shí)

        float (*h)();

        表示h是一個(gè)指向返回值float類(lèi)型的函數(shù)的指針

        (float(*)())

        表示一個(gè)"指向返回值float類(lèi)型的函數(shù)的指針"的類(lèi)型轉(zhuǎn)換符

        假設(shè)fp是一個(gè)函數(shù)指針,那么如何調(diào)用fp所指向的函數(shù),調(diào)用方法如下:

        (*fp)();

        按照人們的慣性思維,那么我們可以這樣寫(xiě)

        (*0)();

        上式不能生效,因?yàn)檫\(yùn)算符*必須要一個(gè)指針來(lái)做操作數(shù),而且這個(gè)指針還必須是個(gè)函數(shù)指針。所以我們必須要把0強(qiáng)制轉(zhuǎn)換成一個(gè)函數(shù)指針(指向返回值為void類(lèi)型的函數(shù)的指針)

        假設(shè)fp是個(gè)float指針,聲明如下

        float * fp;

        把0強(qiáng)制轉(zhuǎn)換成一個(gè)float指針(把變量fp去掉就可以了)

        (float *)0;

        類(lèi)似:

        假設(shè)fp是函數(shù)指針為void類(lèi)型的函數(shù)的指針),聲明如下:

        void (*fp)();

        把0強(qiáng)制轉(zhuǎn)換成該函數(shù)指針(變量fp去掉就可以了)

        (void(*)())0

        最后用(void(*)())0代替fp,從而得到調(diào)用的用法

        (*(void(*)())0)();

        可用typedef簡(jiǎn)化函數(shù)指針

        例如:

        typedef char * string;

        string test="hello";

        類(lèi)似

        typedef void(*func)(); //這樣func就表示一個(gè)函數(shù)指針的類(lèi)型

        (*(func)0)();

        例子

        方法一:

        typedef void (*pfunction)(void);

        void FMI_Jump(void)
        {
        pfunction jump;
        jump=(pfunction)(0x80000);
        jump();

        }

        方法二:

        ((void(code *)(void))0xF400)();



        關(guān)鍵詞: void單片機(jī)的復(fù)

        評(píng)論


        技術(shù)專(zhuān)區(qū)

        關(guān)閉
        主站蜘蛛池模板: 项城市| 齐齐哈尔市| 佳木斯市| 淮阳县| 抚州市| 商南县| 本溪市| 鄄城县| 蒲江县| 灌阳县| 舞钢市| 通城县| 穆棱市| 湘乡市| 长丰县| 乌拉特后旗| 平利县| 津南区| 富平县| 建始县| 和林格尔县| 牡丹江市| 兴和县| 陆川县| 调兵山市| 吉木萨尔县| 宜都市| 达尔| 徐汇区| 日喀则市| 荆州市| 泾川县| 珲春市| 惠来县| 册亨县| 通渭县| 汉中市| 盐池县| 台南县| 崇信县| 静安区|