#define FLASH_BUFF_SIZE 4 #define FLASH_START_ADDRESS 0x10000 #define FLASH_START_PAGE(FLASH_START_ADDRESS / FLASH_PAGE_SIZE) 。。。 uint32_t readData[FLASH_BUFF_SIZE] = {0};//init,r,g,b,color uint32_t olddata[FLASH_BUFF_SIZE]={0};//用来对比旧数据,如果不一样就保存数据到flash 。。。 //保存数据到flash static void saveData(void){ FLASH_ErasePages(FLASH, FLASH_START_PAGE, 1); uint32_t *pu32Start = (uint32_t *)(FLASH_START_ADDRESS); uint32_t temp[4]; FLASH_Program(FLASH, pu32Start, readData, FLASH_BUFF_SIZE * sizeof(uint32_t)); PRINTF("save data 0=%d,1=%d,2=%d,3=%d
",readData[0],readData[1],readData[2],readData[3]); } void pint_intr_callback(pint_pin_int_t pintr, uint32_t pmatch_status) { PRINTF("f
PINT Pin Interrupt %d eventdetected.
",pintr); readData[0]=1; readData[1]=rand()%2; readData[2]=rand()%2; readData[3]=rand()%2; }//中断数据改变 /*Setup Flash Controller */ FLASH_Init(FLASH); /* Read back data */ uint32_t temp[4]; uint32_t *pu32Start = (uint32_t *)(FLASH_START_ADDRESS); for (uint32_t i = 0; i < FLASH_BUFF_SIZE; i += 4) { FLASH_Read(FLASH, (uint8_t *)(pu32Start +i), 0, (uint32_t *)temp); memcpy(&readData, (void *)temp, sizeof(temp)); } PRINTF("read data 0=%d, 1=%d,2=%d,3=%d
",readData[0],readData[1],readData[2],readData[3]); if(readData[0]==1){ PRINTF("already init
"); GPIO_PinWrite(GPIO,BOARD_LED_RED_GPIO_PORT, 1U, readData[1]); GPIO_PinWrite(GPIO,BOARD_LED_RED_GPIO_PORT, 2U, readData[2]); GPIO_PinWrite(GPIO,BOARD_LED_RED_GPIO_PORT, 3U, readData[3]); }else{ FLASH_ErasePages(FLASH, FLASH_START_PAGE, 1); PRINTF("Flash erased
"); readData[0]=1U; readData[1]=0U; readData[2]=0U; readData[3]=0U; FLASH_Program(FLASH, pu32Start, readData,FLASH_BUFF_SIZE * sizeof(uint32_t)); } while (1) { //PRINTF("delay 1s
"); SysTick_DelayTicks(1000U); if(memcmp(readData,olddata, sizeof(olddata))){ PRINTF("readData!=olddata
"); saveData(); GPIO_PinWrite(GPIO, BOARD_LED_RED_GPIO_PORT,1U, readData[1]); GPIO_PinWrite(GPIO, BOARD_LED_RED_GPIO_PORT,2U, readData[2]); GPIO_PinWrite(GPIO, BOARD_LED_RED_GPIO_PORT,3U, readData[3]); for (uint32_t i = 0; i < FLASH_BUFF_SIZE; i +=4) { FLASH_Read(FLASH, (uint8_t *)(pu32Start + i), 0, (uint32_t *)temp); memcpy(&readData, (void *)temp, sizeof(temp)); } PRINTF("read data 0=%d,1=%d,2=%d,3=%d
",readData[0],readData[1],readData[2],readData[3]); memcpy(readData, olddata, sizeof(olddata)); }else{ //PRINTF("readData=olddata
"); } } |