野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2074|回复: 3

火哥DMA_存储器访问的视频讲解

[复制链接]
发表于 2023-11-23 16:14:21 | 显示全部楼层 |阅读模式
#include "stm32f10x.h"
#include "bsp_led.h"
#include "bsp_dma.h"

extern const uint32_t aSRC_Const_Buffer[BUFFER_SIZE];
extern uint32_t aDST_Buffer[BUFFER_SIZE];

#define SOFT_DELAY Delay(0x0FFFFF);

void Delay(__IO u32 nCount);

int main(void)
{
        /* 定义存放比较结果变量 */
  uint8_t TransferStatus;

        /* LED 端口初始化 */
        LED_GPIO_Config();

  /* 设置RGB彩色灯为紫色 */
  LED_PURPLE;  

  /* 简单延时函数 */
  Delay(0xFFFFFF);

  /* DMA传输配置 */
  MtM_DMA_Config();

  /* 等待DMA传输完成 */
  while(DMA_GetFlagStatus(MTM_DMA_FLAG_TC)==RESET);
       
        /* 比较源数据与传输后数据 */
  TransferStatus=Buffercmp(aSRC_Const_Buffer, aDST_Buffer, BUFFER_SIZE);
       
          /* 判断源数据与传输后数据比较结果*/
  if(TransferStatus==0)  
  {
    /* 源数据与传输后数据不相等时RGB彩色灯显示红色 */
    LED_RED;
  }
  else
  {
    /* 源数据与传输后数据相等时RGB彩色灯显示蓝色 */
    LED_BLUE;
  }
       
        //       
        while (1)
        {
       
        }

}
void Delay(__IO uint32_t nCount)         //简单的延时函数
{
        for(; nCount != 0; nCount--);
}
加了while(1)蓝灯才亮,不然一直亮红灯是为什么?

回复

使用道具 举报

发表于 2023-11-29 13:58:47 | 显示全部楼层
本身在最后加一个while1有防止程序跑飞不稳定的作用,可以debug看看运行状况
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-4 15:41:59 | 显示全部楼层
好的,谢谢
回复

使用道具 举报

发表于 2024-8-15 21:57:50 | 显示全部楼层
在嵌入式系统中,程序的末尾通常会加入一个 `while(1)` 或者类似的无限循环,这样做有几个原因:

1. **保持程序运行**:在没有操作系统的裸机嵌入式系统中,程序执行完 `main` 函数后会自然结束。通过在 `main` 函数的末尾添加一个无限循环,可以防止程序自动退出,使微控制器保持在运行状态。

2. **等待事件发生**:在某些情况下,程序可能需要等待外部事件的发生,比如按键输入、定时器中断或其他硬件事件。在这种情况下,无限循环可以作为等待事件发生的一种方式。

3. **节能模式**:在无限循环中,可以加入低功耗模式的代码,如 `sleep` 或者更深层次的休眠状态,以此来降低系统功耗。当事件发生时,硬件中断可以将微控制器从低功耗模式唤醒。

4. **程序稳定性**:在某些应用中,程序可能需要持续监控某些条件或状态,无限循环允许程序持续运行并检查这些条件。

5. **防止跳转到不确定地址**:如果没有无限循环,程序在 `main` 函数结束后可能会跳转到随机的内存地址,这可能导致不可预测的行为或系统崩溃。

6. **简化程序结构**:使用无限循环可以让程序结构更加简单明了,特别是对于初学者来说,容易理解和实现。

在你的代码示例中,`while(1)` 放在程序的最后,一旦执行到这里,程序将永远停留在这里,除非有外部中断事件发生并跳转出去。这样做可以确保程序不会退出,同时提供了一个简单的方法来保持微控制器的持续运行。如果需要实现更复杂的功能,可以在 `while(1)` 循环内部添加代码来处理不同的任务或事件。


AI给出的解释,可以参考下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-23 16:11 , Processed in 0.132657 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表