久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: Fu68xx單片機的flash讀寫代碼如何理解? [打印本頁]

作者: 1314love    時間: 2022-8-3 14:30
標題: Fu68xx單片機的flash讀寫代碼如何理解?
請問各位大佬們 怎么理解這兩段單片機代碼

/*-------------------------------------------------------------------------------------------------
        Function Name :        uint8 Get4ByteFromFlash(uint8 xdata *BlockStartAddr)
        Description   :        從目標FLASH扇區讀取4字節最新寫入的數據
        Input         :        uint8 xdata *BlockStartAddr:目標FLASH扇區
  Output                                :        讀出的數據
-------------------------------------------------------------------------------------------------*/


uint32 Get4ByteFromFlash(uint8 xdata *BlockStartAddr)
{
        uint8 xdata *FlashStartAddr = BlockStartAddr;
        uint8 i;
        uint32 tempofFlashData;
        
        for(i=0;i<32;i++)
        {
                tempofFlashData = *(uint32 code *)(FlashStartAddr + 4*i);
                if(tempofFlashData==0)
                {
                        if(i!=0)
                        {
                                tempofFlashData = *(uint32 code *)(FlashStartAddr + 4*(i-1));
                                return tempofFlashData;
                        }
                        else
                        {
                                return 0;
                        }
                }
                else
                {
                        if(i==31)
                        {
                                return tempofFlashData;
                        }
                }        
        }
        return 0;
}
/*-------------------------------------------------------------------------------------------------
        Function Name :        void Write4Byte2Flash(uint8 xdata *BlockStartAddr,uint32 NewData2Flash)
        Description   :        寫入4個字節到FLASH
        Input         :        uint8 xdata *BlockStartAddr:目標FLASH地址  NewData2Flash:被寫入數據
  Output                                :        無
-------------------------------------------------------------------------------------------------*/
#if 1
void Write4Byte2Flash(uint8 xdata *BlockStartAddr,uint32 NewData2Flash)
{
        uint8 xdata *FlashStartAddr = BlockStartAddr;
        uint32 tempofFlashData=0;
        uint32 tempofNewFlashData=0;
        uint8 i;
        
        FLASHUsingStatus=1;                        //FLASH正在使用
        
        tempofNewFlashData = NewData2Flash;
        
        for(i=0;i<32;i++)
        {
                tempofFlashData = *(uint32 code *)(FlashStartAddr+4*i);
                if(tempofFlashData==0)
                {
                        tempofFlashData = (tempofNewFlashData>>24)&0x000000ff;
                        Flash_Sector_Write((FlashStartAddr+4*i),(uint8)tempofFlashData);
                        _nop_();
                        tempofFlashData = (tempofNewFlashData>>16)&0x000000ff;
                        Flash_Sector_Write((FlashStartAddr+4*i+1),(uint8)tempofFlashData);
                        _nop_();
                        tempofFlashData = (tempofNewFlashData>>8)&0x000000ff;
                        Flash_Sector_Write((FlashStartAddr+4*i+2),(uint8)tempofFlashData);
                        _nop_();
                        tempofFlashData = tempofNewFlashData&0x000000ff;
                        Flash_Sector_Write((FlashStartAddr+4*i+3),(uint8)tempofFlashData);
                        _nop_();                        
                        break;
                }
                else
                {
                        if(i==31)
                        {
                                Flash_Sector_Erase(FlashStartAddr);
                                _nop_();
                                tempofFlashData = (tempofNewFlashData>>24)&0x000000ff;
                                Flash_Sector_Write((FlashStartAddr),(uint8)tempofFlashData);
                                _nop_();
                                tempofFlashData = (tempofNewFlashData>>16)&0x000000ff;
                                Flash_Sector_Write((FlashStartAddr+1),(uint8)tempofFlashData);
                                _nop_();
                                tempofFlashData = (tempofNewFlashData>>8)&0x000000ff;
                                Flash_Sector_Write((FlashStartAddr+2),(uint8)tempofFlashData);
                                _nop_();
                                tempofFlashData = tempofNewFlashData&0x000000ff;
                                Flash_Sector_Write((FlashStartAddr+3),(uint8)tempofFlashData);
                                _nop_();                                
                        }
                }
        }
        
                FLASHUsingStatus=0;                        //FLASH空閑
}
作者: man1234567    時間: 2022-8-4 08:17
對照產品說明書就很好理解。
對于小眾產品,除非特殊需要,一般人不會研究的
作者: haiyang201    時間: 2022-8-5 13:44
注釋里面不是寫的很清楚嗎?就是讀寫操作
作者: 1314love    時間: 2022-8-5 15:19
tempofFlashData = (tempofNewFlashData>>24)&0x000000ff就是他右移這個我不理解





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 日韩亚洲视频 | 国产精品久久久久久婷婷天堂 | 久久亚洲视频 | 国产在线观看不卡一区二区三区 | 欧美日韩亚洲国产综合 | 午夜影院| 成人精品福利 | 精品在线一区二区三区 | 欧美大片一区 | 国产精品99久久久久久人 | 麻豆av电影网| 最新免费黄色网址 | 色偷偷人人澡人人爽人人模 | 免费激情网站 | 日韩av一区在线观看 | 亚洲精品在线观看视频 | 亚洲性网 | 免费在线观看一区二区 | 久久久婷婷 | 日韩视频区 | 五月婷婷视频 | 成人在线视频网 | 久久一日本道色综合久久 | 国产高清在线精品一区二区三区 | 国产精品久久久久久久久久久久久久 | 亚洲欧美日韩成人在线 | 亚洲性视频网站 | 国产精品视频在线播放 | 欧美一区二区三区免费在线观看 | 久久精品—区二区三区 | 国产精品特级毛片一区二区三区 | 亚洲欧洲精品在线 | 午夜电影福利 | 爱爱综合网 | 福利片在线看 | 99精品在线| 热re99久久精品国产99热 | 精品一二区 | 中文字幕中文字幕 | 久久久综合精品 | 欧一区 |