微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 使用IAR编程BLE协议栈,调试过程发现的问题

使用IAR编程BLE协议栈,调试过程发现的问题

时间:10-02 整理:3721RD 点击:

我使用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(); //所有初始化函数   是这句,自己添加的初始化语句

感觉是编译生成的可执行文件没生效,最近也碰到这个问题,不知道是不是工程配置的问题?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top