本发明涉及一种ide环境下的模拟方法,特别是一种visualdsp++环境下外设读写模拟方法。
背景技术:
visualdsp++是控制软件典型的集成开发环境,由于控制软件的通讯、数据采集、时序控制功能通过读写接口外设地址实现,为实现控制软件闭环仿真运行,需要模拟外设接口功能,一般的外设模拟方法是通过集成开发环境调试运行控制软件的dsp程序,在外设地址上建立观察点,当程序读写接口外设地址时触发dsp暂停,向该地址注入激励数据以完成读外设操作模拟,或获取该地址的输出数据以完成写外设操作模拟。但是,visualdsp++提供的观察点功能对外部存储空间范围的地址无效,程序读写外设地址无法触发dsp暂停,不能提供时机给用户进行外设数据模拟。
技术实现要素:
本发明目的在于提供一种visualdsp++环境下外设读写模拟方法,解决在visualdsp++环境下外设地址上的观察点不能触发dsp暂停的问题。
一种visualdsp++环境下外设读写模拟方法的具体步骤为:
第一步构建visualdsp++环境下外设读写模拟系统
visualdsp++环境下外设读写模拟系统,包括:visualdsp++控制模块和外设模拟模块。
visualdsp++控制模块的功能为:设置外设地址虚拟寄存器、对程序进行插桩、编译生成目标码文件、设置观察点和获取外设模拟时机。
外设模拟模块的功能为:保存和注入外设接口数据。
第二步visualdsp++控制模块在内部存储空间添加外设地址虚拟寄存器
visualdsp++控制模块分析dsp程序的内存映射文件,找出dsp程序未占用的两个内存地址,分别记为$pra,$pwa。
第三步visualdsp++控制模块在程序读写外设处插桩
visualdsp++控制模块在dsp程序读外设的代码块起始位置之前插入一段指令,将源外设地址保存到$pra;在dsp程序写外设的代码块结束位置之后插入一段指令,将目的外设地址保存到$pwa。重新编译生成目标码文件。
第四步visualdsp++控制模块在外设地址虚拟寄存器上建立观察点
visualdsp++控制模块加载dsp程序目标码文件,在$pra上建立一个存储器观察点,触发类型设置为写触发,触发值为程序读外设代码块的源地址;在$pwa上建立一个存储器观察点,触发类型设置为写触发,触发值为程序写外设代码块的目的地址。
第五步visualdsp++控制模块获取外设读写时机
visualdsp++控制模块将$pra和$pwa地址单元的值清零后,记当前指令周期数为0,启动调试运行dsp程序。
visualdsp++控制模块在dsp暂停时,读取当前指令周期数,利用visualdsp++的内存查看功能读取$pra和$pwa地址单元的值,当指令周期数发生变化且$pra地址单元的值非零时,视为读外设事件;当指令周期数发生变化且$pwa地址单元的值非零时,视为写外设事件。
第六步外设模拟模块模拟外设接口数据
外设模拟模块在读事件发生时,向dsp注入接口数据,然后将$pra地址单元的值清零、将当前指令周期数更新为新的指令周期数;在写事件发生时,保存dsp输出接口数据,然后将$pwa地址单元的值清零,将当前指令周期数更新为新的指令周期数。
visualdsp++环境下外设读写模拟方法通过在内部地址空间构造虚拟外设读写寄存器,利用visualdsp++原有观察点机制触发dsp暂停,仅需要插入一条赋值语句,占用两个空闲地址单元,插桩代价和对程序的干扰极小。
具体实施方式
一种visualdsp++环境下外设读写模拟方法的具体步骤为:
第一步构建visualdsp++环境下外设读写模拟系统
visualdsp++环境下外设读写模拟系统,包括:visualdsp++控制模块和外设模拟模块。
visualdsp++控制模块的功能为:设置外设地址虚拟寄存器、对程序进行插桩、编译生成目标码文件、设置观察点和获取外设模拟时机。
外设模拟模块的功能为:保存和注入外设接口数据。
第二步visualdsp++控制模块在内部存储空间添加外设地址虚拟寄存器
visualdsp++控制模块分析dsp程序的内存映射文件,找出dsp程序未占用的两个内存地址,分别记为$pra,$pwa。
第三步visualdsp++控制模块在程序读写外设处插桩
visualdsp++控制模块在dsp程序读外设的代码块起始位置之前插入一段指令,将源外设地址保存到$pra;在dsp程序写外设的代码块结束位置之后插入一段指令,将目的外设地址保存到$pwa。重新编译生成目标码文件。
第四步visualdsp++控制模块在外设地址虚拟寄存器上建立观察点
visualdsp++控制模块加载dsp程序目标码文件,在$pra上建立一个存储器观察点,触发类型设置为写触发,触发值为程序读外设代码块的源地址;在$pwa上建立一个存储器观察点,触发类型设置为写触发,触发值为程序写外设代码块的目的地址。
第五步visualdsp++控制模块获取外设读写时机
visualdsp++控制模块将$pra和$pwa地址单元的值清零后,记当前指令周期数为0,启动调试运行dsp程序。
visualdsp++控制模块在dsp暂停时,读取当前指令周期数,利用visualdsp++的内存查看功能读取$pra和$pwa地址单元的值,当指令周期数发生变化且$pra地址单元的值非零时,视为读外设事件;当指令周期数发生变化且$pwa地址单元的值非零时,视为写外设事件。
第六步外设模拟模块模拟外设接口数据
外设模拟模块在读事件发生时,向dsp注入接口数据,然后将$pra地址单元的值清零,将当前指令周期数更新为新的指令周期数;在写事件发生时,保存dsp输出接口数据,然后将$pwa地址单元的值清零,将当前指令周期数更新为新的指令周期数。