<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x
    查看: 4789|回復: 4
    打印 上一主題 下一主題

    關于DSP281X變量地址定位問題

    [復制鏈接]
    跳轉到指定樓層
    樓主
    發表于 2009-4-2 21:56:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
    關鍵詞: 變量 , DSP281X , 地址定位
    在結合硬件的編程中,有些變量需要特定地址.

    一般可以采用指針變量.
    例如:
    unsigned int *LedReg   = (unsigned int *)0x5f00;//發光二極管地址
    *LedReg = 0xFF;

    但有些時候感覺不是太好時,可以像Keil那樣

    unsigned int LedReg at 0x5f00;//發光二極管地址
    LedReg = 0xFF;

    這樣看著"比較順眼"~~~
    但在TIDSP的CCS環境下,不能采用at或__at等來定位地址.
    不過CCS也提供了類似的手段,不過有些"麻煩".

    具體實現:

    1.在CMD文件中

    MEMORY
    {
    PAGE 0:    /* Program Memory */

    PAGE 1:    /* Data Memory */

       LED_REG     : origin = 0x005f00, length = 0x00001 /*發光二極管地址*/
       LCD_ComL    : origin = 0x005100, length = 0x00001
       LCD_ComH    : origin = 0x005200, length = 0x00001
       LCD_DatL    : origin = 0x005300, length = 0x00001
       LCD_DatH    : origin = 0x005400, length = 0x00001
       EINT_REG    : origin = 0x005c00, length = 0x00001
       KEY_REG     : origin = 0x005b00, length = 0x00001
       RCLK_REG    : origin = 0x005500, length = 0x00001 /*數碼管鎖存地址*/
    }


    SECTIONS
    {
       LedDataRegsFile   : > LED_REG,     PAGE = 1
       LcdComlRegsFile   : > LCD_ComL,    PAGE = 1
       LcdComhRegsFile   : > LCD_ComH,    PAGE = 1
       LcdDatlRegsFile   : > LCD_DatL,    PAGE = 1
       LcdDathRegsFile   : > LCD_DatH,    PAGE = 1
       KeyRegsFile       : > KEY_REG,     PAGE = 1
       EintRegsFile      : > EINT_REG,    PAGE = 1
       RclkRegsFile      : > RCLK_REG,    PAGE = 1
    }

    2.在C/C++文件中


    #ifdef __cplusplus
    #pragma DATA_SECTION("LedDataRegsFile") /*C++語言格式*/
    #else
    #pragma DATA_SECTION(LedRegs,"LedDataRegsFile");/*C語言格式*/
    #endif
    volatile unsigned int LedRegs;

    /*以下為C++語言格式*/

    #pragma DATA_SECTION("LcdComlRegsFile")
    volatile unsigned int LcdComL;
    #pragma DATA_SECTION("LcdComhRegsFile")
    volatile unsigned int LcdComH;
    #pragma DATA_SECTION("LcdDatlRegsFile")
    volatile unsigned int LcdDatL;
    #pragma DATA_SECTION("LcdDathRegsFile")
    volatile unsigned int LcdDatH;

    #pragma DATA_SECTION("EintRegsFile")
    volatile unsigned int EintRegs;

    #pragma DATA_SECTION("KeyRegsFile")
    volatile unsigned char KeyRegs;

    #pragma DATA_SECTION("RclkRegsFile")
    volatile bool SpiRclkRegs;


    3.在應用程序中

    extern unsigned int LedRegs;
    extern volatile unsigned int EintRegs;
    extern volatile unsigned char KeyRegs;
    extern volatile bool SpiRclkRegs;
    //............
    LedRegs = 0xff;//這樣就不需要指針變量的寫法了
    //..................

    HotPower@126.com 2008.4.17 1:34
    沙發
    發表于 2009-6-18 17:36:17 | 只看該作者
    我看得就挺順眼的 不過從版主這收益良多啦!

    板凳
    發表于 2010-7-26 10:24:11 | 只看該作者
    太強了
    地板
    發表于 2010-9-19 15:03:25 | 只看該作者
    說的好,明白了
    地下室
    發表于 2010-9-21 11:59:46 | 只看該作者
    說的好,明白了
    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規則

    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷