启用调试信息时引导嵌入式设备

时间:2015-02-20 08:53:39

标签: c stack-corruption

我正在为某些嵌入式设备使用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的其他部分工作正常)或者可能是堆栈损坏(对于示例在代码中的某些地方写出数组中的范围?

谢谢!

0 个答案:

没有答案