小编Ber*_*ano的帖子

什么在FLASH中占用更多空间?静态变量或全局变量

正如标题所说,在FLASH中占用更多空间(例如在STM32μC中)?声明一个全局变量或在函数内声明一个静态变量?或者他们是否占用相同的空间?根据我的理解,这两个变量在整个程序运行时都可用.只是他们的范围不同.

c stm32 ansi-c

1
推荐指数
1
解决办法
682
查看次数

将全局声明的缓冲区写入FLASH时出现STM32 Hardfault异常

我正在尝试为STM32F030x8编写一个bootloader应用程序.我通过UART将bin文件写入控制器.当UART RDR寄存器中存在数据时,我将其放入全局声明的1Kb缓冲区中.每次缓冲区已满,我都会尝试将其写入FLASH.写入FLASH后,应用程序向PC软件发出确认,并准备接受新的1Kb块.因此,在写入FLASH时,不会写入缓冲区.当我尝试将全局缓冲区写入FLASH时,应用程序进入Hardfault处理程序.

但是当我使用memcpy()将缓冲区复制到1Kb的本地声明的缓冲区中,并尝试将该缓冲区写入FLASH时,它没有任何问题.

为什么我不能只将全局声明的缓冲区写入FLASH?当本地声明的缓冲区写入FLASH时为什么没有问题?

提前致谢!

编辑:

uint32_t FLASH_If_Write(__IO uint32_t* FlashAddress, uint32_t* Data ,uint16_t DataLength)
{
  uint32_t i = 0;

  for (i = 0; (i < DataLength) && (*FlashAddress <= (USER_FLASH_END_ADDRESS-4)); i++)
  {
    /* the operation will be done by word */ 
    if (FLASH_Program(FLASH_TYPEPROGRAM_WORD, *FlashAddress, *(uint32_t*)(Data+i)) == 1)
    {
     /* Check the written value */
      if (*(uint32_t*)*FlashAddress != *(uint32_t*)(Data+i))
      {
        /* Flash content doesn't match SRAM content */
        return(2);
      }
      /* Increment FLASH destination address */
      *FlashAddress += 4;
    }
    else …
Run Code Online (Sandbox Code Playgroud)

c stm32 flash-memory bootloader stm32f0

1
推荐指数
1
解决办法
2217
查看次数

标签 统计

c ×2

stm32 ×2

ansi-c ×1

bootloader ×1

flash-memory ×1

stm32f0 ×1