我正在开发一个应用程序,我使用IAR Embedded Workbench解决方案进行编译。在这种应用中,我已经嵌入了expat库 - 一个很小的XML解析器工作正常 - 它使用time()
标准函数生成盐,你可以在此块的代码中看到:bpkt ARM指令冻结了我的嵌入式应用程序
static unsigned long
generate_hash_secret_salt(void)
{
unsigned int seed = time(NULL) % UINT_MAX;
srand(seed);
return rand();
}
看来, time()
函数在semihosting模式下工作正常(我想用Segger调试J-link JTAG设备时),但是当我在没有j-link调试器的情况下运行我的应用程序时,它根本不起作用。
所以我碰到time()
功能的汇编代码 - 这实际上似乎是由IAR一个专有实现 - 并且看到这个单指令:
BPKT #0xab
通过网页查找信息,我来与以下段落:
如果需要,调试器可以使用它来存储有关断点的附加信息 。 ARM不建议使用BKPT指令,将立即 值设置为0xAB用于半主机以外的任何用途。
是否是由于这样的问题?我必须承认,我在ARM汇编器方面的知识很差,而且由于我不能在半主机模式下调试我的应用程序,所以我非常困惑。
对于您的信息,无论您可能传递给time()
的参数如何,在非半主机模式下它总是处于冻结状态。
最后,为了绕过这样的实现,你能建议我做些什么?我应该导入另一个到我的C项目中吗? ...
感谢
BKPT会将cpu置于调试模式,您需要找到一种方法来使构建不同以摆脱它。 http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0068b/CIHEDHIF.html – auselen 2013-05-06 09:53:29
对我来说,这听起来像一个'assert'或类似的射击。您的BSP(板卡支持包)是否可能没有实现'时间'的必要功能,因此时间说“抱歉不能这样做”。 – 2013-05-06 10:05:31
您是否尝试在发布模式下编译代码?也许这会使BKPT指令消失。 – Adi 2013-05-06 11:57:31