函数适用于arm-gcc,但不适用于Keil

时间:2018-10-06 13:42:56

标签: c arrays compilation stm32 keil

我正在进一步使用STM32进行嵌入式开发,并且最近开始尝试使用Keil,而不是我自己一起使用gcc / st-util的程序(因为将代码导入设备的步骤更少,易于调试等)。 。无论如何,我都在尝试将一个字符串写入一个小的1.8英寸TFT屏幕的函数(这是Geoffery Brown的书中的一项练习),并且如果我使用gcc而不是Keil进行编译,它似乎可以正常工作。感觉我必须做一些不符合标准C的工作,或者在Keil编译器中有我不了解的特质。

我敢肯定还有很多改进的余地,但是我目前的问题是array永远不会更新,当它将实际数据写入屏幕时,它似乎是一个空数组。我已经尝试了一些方法(使用malloc,重新排列了要更新的位置),但是它总是一样的,我可以看到该过程到达了在下一个数组值中设置color的那一行,但该值不会出现在array中。有什么想法吗?

代码:

void ST7735_WriteString(uint8_t *c, uint16_t size, uint16_t fgColor, uint16_t bgColor)
{
  uint8_t i = 0;
  // How many chars fit across
  uint8_t needAnotherLine = 1;
  uint16_t currentPosition = 0;
  uint8_t currentLine = 0;
  uint16_t boxesLeft = size - currentPosition;
  uint16_t arraySize;

  while (needAnotherLine)
  {
    uint16_t boxesThisRow = 0;
    if (boxesLeft > 25)
    {
      needAnotherLine = 1;
      boxesThisRow = 25;
    }
    else
    {
      needAnotherLine = 0;
      boxesThisRow = boxesLeft;
    }

    // Initialize array which holds the pixel-color data for the row
    arraySize = 66 * boxesThisRow;
    uint16_t array[arraySize];

    // Set new box for line
    ST7735_setAddrWindow(110 - 10 * currentLine, 6, 120 - 10 * currentLine, 6 + 6 * boxesThisRow, 0x6);
    for (i = 0; i < boxesThisRow; i++)
    {
            int8_t k = 0, j = 0;
            uint16_t line;  // font column
            uint8_t bit;    // foreground or background?
            uint16_t color; // which color to draw

            for (k = 0; k < 6; k++)
            {
                line = (k < 5) ? ASCII[5 * (*c++) + k] : 0; // 7-bit bitmap
                for (j = 10; j >= 0; j--)
                {
                    // Get bit values
                    bit = (line >> j) & 1;
                    color = bit ? fgColor : bgColor;
                    array[10 - j + k * 11 + i * 66] = color;
                }
            }
    }
    LcdWrite16(LCD_D, array, 66 * boxesThisRow);
    currentPosition += boxesThisRow;
    boxesLeft -= boxesThisRow;
    currentLine++;
  }
}

0 个答案:

没有答案