求大神帮忙看下程序是做什么用的?

2019-07-20 16:34发布

本帖最后由 守候ocean 于 2017-2-28 10:52 编辑

芯片是M058LBN,Data Flash从0x0001_F000 到0x0001_FFFF共4KB,擦除单位为512字节


/*---------------------------------------------------------------------------------------------------------*/
/* Function: LOAD_DATA                                                                            */
/*                                                                                                         */
/* Parameters:                                                                                        */
/*   None.                                                                                              */
/*                                                                                                         */
/* Returns:                                                                                             */
/*   None.                                                                                              */
/*                                                                                                         */
/* Description:                                                                                         */
/*   Load the water data.                                                                           */
/*---------------------------------------------------------------------------------------------------------*/

void LOAD_DATA(void)
{
        uint32_t i;

        /* Unlock protected registers */
        SYS_UnlockReg();

        /* Enable_ISP */
        _FMC_ENABLE_ISP();

        /* Load the water data */
        for(i=0;i<24;i++)      //24块表
        {
                uint32_t x,y,z,j;

                x=~(FMC_Read(FMC_EEPROM_BASE + (i/3)*FMC_FLASH_PAGE_SIZE + 0x1F8));   // FMC_EEPROM_BASE:0x0001F000  
                if(x==0xFFFFFFFF)
                {
                        x=32;
                }
                else
                {
                        x++;
                        j=0;
                        while(x)
                        {
                                x=x/2;
                                j++;
                        }
                        x=j-1;
                }

                y=~(FMC_Read(FMC_EEPROM_BASE + (i/3)*FMC_FLASH_PAGE_SIZE + 0x1FC));
                if(y>=0x000001FF)
                {
                        y=9;
                }
                else
                {
                        y++;
                        j=0;
                        while(y)
                        {
                                y=y/2;
                                j++;
                        }
                        y=j-1;
                }

                SAVE_NUMB[i/3]=x+y;       //uint8_t SAVE_NUMB[8]  存储用的,FLASH是512个字节页擦除,数据存储空间为4K,所以就是8个区域

                z=FMC_Read(FMC_EEPROM_BASE + (i/3)*FMC_FLASH_PAGE_SIZE + SAVE_NUMB[i/3]*12 + (i%3)*4);
                WATER=z%0x1000000;    //水表数WATER是uint32_t的数组
                WATER_ERROR
=z/0x1000000;   //水表状态标志位
WATER_ERROR是uint8_t的数组
                if(WATER
>999999)   
                {
                        WATER
=0;   
                }
                if(WATER_ERROR
>100)
                {
                        WATER_ERROR
=0;
                }
        }

        /* Disable_ISP */
        _FMC_DISABLE_ISP();

        /* Lock protected registers */
        SYS_LockReg();
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。