我正在为某些嵌入式设备使用SDK。有一些专有的RTOS和应用程序代码。我在这个sdk中发现了一些错误:在打印一些调试信息期间重启了设备(通过宏DEV_PRINTF)。
Bug只在一个地方被复制(但并不总是):当调用DEV_PRINTF时(在我的例子中我已经注释了这一行)。在其他功能中,这个宏工作正常。
下面是问题代码:
#define DEV_PRINTF printf_realization
static int txrx_config(struct device *dev, int size, int loop, const UINT8 *buffer)
{
struct private *p = (struct private *)dev->priv;
if (p == NULL)
return -1;
DEV_PRINTF("%s: p = %x\n", __FUNCTION__, p); // p is correct in all cases
// BUG: when DEV_PRINTF is uncommented in that place than device is rebooted.
/*DEV_PRINTF("In %s method %d %d\n",
__FUNCTION__, p->rx, p->tx);*/
if ((!p->force_tx_rx) && (!p->auto_tx_rx))
{
return txrx_config_group_one(dev, size, loop);
}
else
{
return txrx_config_group_two(dev, size, loop, buffer);
}
}
下面是重现错误时的日志:
txrx_config: p = 0x80772c00
In txrx_config: method 0 1
txrx_config: p = 0x80772c00
In txrx_config: method 1 1
txrx_config: p = 0x80772c00
In txrx_config: method 1 0
txrx_config: p = 0x80772c00
In txrx_config: method 0 1
txrx_config: p = 0x80772c00
In txrx_config: method 1 0
txrx_config: p = 0x80772c00
In
所以主要问题:我必须找到问题 - 在printf_realization函数中(但我不这么认为,因为这个函数在sdk的其他部分工作正常)或者可能是堆栈损坏(对于示例在代码中的某些地方写出数组中的范围?
谢谢!