DM642的PCI驱动编程笔记:遍历一块内存空间的源码

本文介绍了一个用于测试DM642 DSP端数据写入情况及内存映射关系的简单程序。该程序可在CCS环境中运行,帮助确定特定数据在内存中的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    我是在做WDM驱动时,为了验证DM642的DSP端究竟有没有写入相应的数据,编写了一个这样的程序,用CCS环境Load到仿真器里去遍历 ,并由此推断主机端为DM642分配的虚拟地址空间和DM642的物理地址空间之间的映射关系。

    贴出这个程序并不是说这个程序有多么高深,而是提供一个思路,因为很多朋友在工作或学习中遇到类似的问题往往想不起来编这么个小程序就能解决问题。

    类似的代码当然也可以用于遍历主机的一块内存,甚至主机的整个编程空间。鉴于这属于极基础极Easy的代码,高手请跳过,不要浪费时间。如有遗漏或错误,请大家指正。

代码如下:

#include <std.h>
#include <stdio.h>

#define  BASE             (unsigned int *)0x00000000     //遍历内存块的起始地址
#define  END              (unsigned int *)0x00040000     //遍历内存块的结束地址,我只遍历4M空间

Void main()
{
 unsigned int *addr;
 BOOL    flag = 0;
 printf("This project is used to test memory address!/n");
 addr = BASE;             //赋值为起始地址
    while(addr<END && flag == 0)     //在没遍历完并且没找到指定data的条件下循环
    {
     if(*addr == 0x88888888)    //比对数据
     {
         flag = 1;                //表示找到指定数据
      break;                     //跳出循环
     }
     else
         addr += 100;    //以100个子单元为单位递增,当然可以自己选择步进尺寸,我是用0x88888888写了一块100字的空间,所以步进100字单元
     printf("Addr:0x%8x,Data:0x%8x/n",addr,*addr);//为了调试时看到遍历进度
    }
    if(flag == 1)//找到数据
    {
     printf("Found!/n");
     printf("Addr:0x%8x,Data:0x%8x/n",addr,*addr);
    }
    else//没找到数据
    {
     printf("There is not such a data!/n");
    } 

    exit(0);  
}

    这个程序我在CCS中编译并执行通过。

    当然,如果指定的一个数据可能分散在不同的地址上,而我们想把所有这样的内存地址找到的话,就在比对成功的时候,不要急着跳出循环,而只是输出找到的地址后,继续循环下去就行了。

 

                                            --------------
                                            §  李文凯 2008年04月05日 §
                                            §   作于WHHIT之IMLAB     §
                                            --------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值