如下图所示, 该问题也是不定时会发生的, 我在使用WCH-Link调试时遇到的:
如上代码所示, GlobalData是我自定义的结构体, 并且是全局变量, 上面刚用memset修改完GlobalData, 并初始化了两个字段,
在下面printf处打印出来, 就已经不是上面修改过的值了, 不知在哪里被篡改了...
热门产品 :
CH641: PD及无线充电专用MCU
如下图所示, 该问题也是不定时会发生的, 我在使用WCH-Link调试时遇到的:
如上代码所示, GlobalData是我自定义的结构体, 并且是全局变量, 上面刚用memset修改完GlobalData, 并初始化了两个字段,
在下面printf处打印出来, 就已经不是上面修改过的值了, 不知在哪里被篡改了...
部分代码如下:
typedef struct __attribute__((aligned(4))) _GLOBAL_DATA_S { uint16_t magic; uint16_t version; uint32_t flags; float ADC1_sense_volt_fp; float ADC2_sense_volt_fp; float ADC1_vagc_volt_fp; uint16_t ADC1_sense_volt; uint16_t ADC2_sense_volt; uint16_t ADC1_vagc_volt; uint16_t ADC1_vntc_volt; uint16_t ADC1_vtmp_volt; uint8_t ADC2_PgaGain; int8_t tia_temp; int8_t mcu_temp; int8_t tia_init_temp; int8_t mcu_init_temp; } GLOBAL_DATA_T, *PGLOBAL_DATA_T; void Init_Periph(void) { RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div2); RCC_PCLK2Config(RCC_HCLK_Div1); RCC_ADCCLKConfig(RCC_PCLK2_Div8); RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2 | RCC_APB1Periph_TIM3 , ENABLE); RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2 | RCC_APB2Periph_TIM1 | RCC_APB2Periph_AFIO , ENABLE); } int main(void) { int i, sum; uint32_t u32; uint16_t u16buf[16]; float favg; uint16_t avg; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); Init_Periph(); Delay_Init(); Init_GPIO(); USART_Printf_Init(115200); memset(&GlobalData, 0, sizeof(GLOBAL_DATA_T)); GlobalData.magic = 0x55AA; GlobalData.version = 1; #if 0 GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); #endif printf("SystemClk:%d\r\n", SystemCoreClock); Delay_Ms(1); //AGC_PWMOut_Init( 4095, 16-1, 3685 ); // ≈2940mv AGC_PWMOut_Init( 4095, 16-1, 3685 ); // ≈2954mv SetPowerControl(0); SetLedState(1); Delay_Ms(1); // ...... }