使用IAR编程BLE协议栈,调试过程发现的问题
我使用IAR编程BLE协议栈,调试过程发现自己在SimpleBLEPeripheral工程中添加的一个初始化函数没有被执行到直接跳过了,初始化函数是在想要在主函数里面执行的。
请问这有可能是什么原因造成的?
你是没有编译吧。。。
已经编译了,但就是在调试过程中直接跳过了那个语句。
把编译优化选项改成不要优化
已经修改了,还是不行。
把代码贴出来看看
可能编译软件的问题!IAR版本是哪个?
iar软件用的哪个版本?
/**************************************************************************************************
* @fn main
*
* @brief Start of application.
*
* @param none
*
* @return none
**************************************************************************************************
*/
int main(void)
{
/* Initialize hardware */
HAL_BOARD_INIT();
// void all_int(); //
// Initialize board I/O
InitBoard( OB_COLD );
/* Initialze the HAL driver */
HalDriverInit();
/* Initialize NV system */
osal_snv_init();
/* Initialize LL */
/* Initialize the operating system */
osal_init_system();
/* Enable interrupts */
HAL_ENABLE_INTERRUPTS();
// Final board initialization
InitBoard( OB_READY );
#if defined ( POWER_SAVING )
osal_pwrmgr_device( PWRMGR_BATTERY );
#endif
void all_int(); //所有初始化函数
/* Start OSAL */
osal_start_system();
就是那句所有初始化的语句调试时一直执行不到。
EW8051EVweb8101
看不出来有啥问题,你确定你优化选项改了?
在project->option->c/c++ compiler->optimizations->level 改成none试试看
HAL_BOARD_INIT();是这一句吗?
如果是这一句的话,IAR跳过是对的,因为这看似一个函数,其实是以函数的“形”来做的宏定义罢了,宏定义的语句会在程序开始前被编译,所以会整体跳过。
下面是这个的定义:
#define HAL_BOARD_INIT() \
{ \
/* Set to 16Mhz to set 32kHz OSC, then back to 32MHz */ \
START_HSOSC_XOSC(); \
SET_OSC_TO_HSOSC(); \
SET_32KHZ_OSC(); \
SET_OSC_TO_XOSC(); \
STOP_HSOSC(); \
\
/* Enable cache prefetch mode. */ \
PREFETCH_ENABLE(); \
}
定义在hal_board_cfg.h文件中。
void all_int(); //所有初始化函数 是这句,自己添加的初始化语句
感觉是编译生成的可执行文件没生效,最近也碰到这个问题,不知道是不是工程配置的问题?