/*!
 * @brief main function
 */
int main(void)
{
#if FSL_FEATURE_ADC16_HAS_CALIBRATION
    adc16_calibration_param_t tempSnseCalibraitionParam;
#endif

    hardware_init();
    GPIO_DRV_Init(NULL, ledPins);

    // Configure the power mode protection
    SMC_HAL_SetProtection(SMC_BASE_PTR, kAllowPowerModeVlp);

    ADC16_DRV_StructInitUserConfigDefault(&tempSnseAdcConfig);
#if (FSL_FEATURE_ADC16_MAX_RESOLUTION >= 16)
    tempSnseAdcConfig.resolution = kAdc16ResolutionBitOf16;
#endif

#if BOARD_ADC_USE_ALT_VREF
    tempSnseAdcConfig.refVoltSrc = kAdc16RefVoltSrcOfValt;
#endif
    // Init ADC
    ADC16_DRV_Init(ADC_INSTANCE, &tempSnseAdcConfig);
    // Calibrate VDD and ADCR_TEMP25
#if FSL_FEATURE_ADC16_HAS_CALIBRATION
    // Auto calibraion
    ADC16_DRV_GetAutoCalibrationParam(ADC_INSTANCE, &tempSnseCalibraitionParam);
    ADC16_DRV_SetCalibrationParam(ADC_INSTANCE, &tempSnseCalibraitionParam);
#endif // FSL_FEATURE_ADC16_HAS_CALIBRATION
    calibrateParams();

    // get cpu uid low value for slave
    gSlaveId = SIM_UIDL_UID(SIM_BASE_PTR);

    PRINTF("i2c_rtos_slave_bm demo\r\n");

    // task list initialize
    OSA_Init();

    // create task(in BM: only the first registered task can be executed)
    OSA_TaskCreate(task_slave,
                   (uint8_t *)"slave",
                   512,
                   task_slave_stack,
                   0,
                   (void *)0,
                   false,
                   &task_slave_task_handler);

    OSA_Start();

    return 0;
}
    SMC_HAL_SetProtection(SMC, &smc_power_prot_cfg);

#if FSL_FEATURE_ADC16_HAS_CALIBRATION
    // Auto calibraion
    ADC16_DRV_GetAutoCalibrationParam(HWADC_INSTANCE, &tempSnseCalibraitionParam);
    ADC16_DRV_SetCalibrationParam(HWADC_INSTANCE, &tempSnseCalibraitionParam);
#endif // FSL_FEATURE_ADC16_HAS_CALIBRATION

    ADC16_DRV_StructInitUserConfigDefault(&tempSnseAdcConfig);
    tempSnseAdcConfig.clkSrcMode = kAdcClkSrcOfAsynClk;
    tempSnseAdcConfig.resolutionMode = kAdcResolutionBitOfSingleEndAs16;
    // Initialize ADC
    ADC16_DRV_Init(HWADC_INSTANCE, &tempSnseAdcConfig);
    
    // get cpu uid low value for slave
    gSlaveId = SIM_UIDL_UID(SIM_BASE);
    
    // enable printf
    dbg_uart_init();

    // Configure I2C pins
    configure_i2c_pins(I2C_RTOS_SLAVE_INSTANCE);

    printf("i2c_rtos_slave_bm demo\r\n");
    
    // task list initialize
    OSA_Init();
    
    // create task(in BM: only the first registered task can be executed)
    OSA_TaskCreate(task_slave,
                (uint8_t *)"slave",