打印
[其他ST产品]

debug保护放在程序的那个执行

[复制链接]
3479|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lvpeng1979|  楼主 | 2008-1-25 09:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
debug保护放在程序的那个部分执行比较好?

我的产品是基于str711开发的。程序分iap和用户程序部分,现在的问题是想加个debug保护功能,在iap程序中调用str71x库里的FLASH_PermanentDebugPrConfig();先可以调试几次,后来就不能进行jatg调试了,这个符合文档里的叙述。但通过usb下载用户程序后,用户程序不能运行了。
之前没有用到这个功能时通过usb下载用户程序是可以运行的。我试图在用户代码中加去除debug的保护不能成功。
1.这个片子是否废掉了?
2.按理说jatg保护后通过usb下载的程序是可以跑得。
3.FLASH_PermanentDebugPrConfig()放在iap程序中,所以每次程序包起来时都会运行。这样是否不妥?


      vlue=strcmp((char *)SERIALNO_TEMP,"T1000001");
      //序列号为T1000000,是测试序列号。
      if((vlue>0)||(vlue<0))   //若是非测试序列号,则对Debug/Readout保护。 
          FLASH_PermanentDebugPrConfig(ENABLE);
          //u=u+1;
      else
          FLASH_PermanentDebugPrConfig(DISABLE);
          //u=u+6;
沙发
starm| | 2008-1-25 17:33 | 只看该作者

所以每次程序包起来时都会运行

似乎上电后第一次运行保护代码会自动复位,接着再次运行保护代码就没有这个问题了。
我的平台是 str710, 保护代码在用户程序部分的开始。

使用特权

评论回复
板凳
香水城| | 2008-1-25 18:24 | 只看该作者

你是否在加Debug保护时同时加了写保护?

不要每次都调用FLASH_PermanentDebugPrConfig(),最好是需要时才做;既不需调试完毕后上锁。

IAP程序应该与Debug保护无关,它只跟写保护有关,所以IAP程序中不必调用FLASH_PermanentDebugPrConfig()。

使用特权

评论回复
地板
lvpeng1979|  楼主 | 2008-1-25 20:13 | 只看该作者

回到原始状态.

没有在DEBUG保护的同时加FLASH写保护.

如果将FLASH_PermanentDebugPrConfig()放在用户代码区,则通过IAP程序下新的用户代码,其中没有FLASH_PermanentDebugPrConfig()操作,那么DEBUG保护是否会解除,回到原始状态. 还是必须配置DEBUG保护相关的控制寄存器才能解除.

使用特权

评论回复
5
香水城| | 2008-1-25 20:27 | 只看该作者

DEBUG保护需要配置相关的控制寄存器才能被解除

所以FLASH_PermanentDebugPrConfig()操作只需在需要解除DEBUG保护时才会用到,而IAP操作时不必解除DEBUG保护。

使用特权

评论回复
6
lvpeng1979|  楼主 | 2008-1-26 16:37 | 只看该作者

ST的这个文挡UM0116 User manual

ST的这个文挡UM0116 User manual - STR7 family Flash programming.在讲到Debug/Readout protection时.有个Note: The Debug/Readout protection operation can be executed from all the internal/external
memories except Flash Bank 0 of the Flash module.

这个是说 Debug/Readout protection 不能放在Flash Bank 0 of the Flash module执行吗?STR711的FLASH有两个BANK,一个是256K的CODE FLASH,一个是16K的DATA FLASH.Debug/Readout protection 不能放在256K的CODE FLASH中吗?

使用特权

评论回复
7
香水城| | 2008-1-26 16:47 | 只看该作者

can be executed 的意思是“可以被执行”

那句话的意思是“调试/读出保护的操作可以从所有内部/外部存储器中被执行,除了闪存模块中的Bank0”,即执行此操作的程序可以存放在任何地方,但不能在Bank0中运行此段程序;如果你把此段程序存放在Bank0时,运行它之前必须先把它拷贝到其它存储器(如RAM),然后再在那里(如RAM)执行。

使用特权

评论回复
8
lvpeng1979|  楼主 | 2008-1-29 11:58 | 只看该作者

FLASH

我现在在调试FLASH保护,想先弄清楚这个吧:
使用的是STR7X的库.

  FLASH_WritePrConfig(0x03,ENABLE);   //保护Bank 0 sectors 1-0.
  FLASH_WritePrConfig(0x03,DISABLE);   //解除

结果查看FLASH_NVWPAR寄存器发现保护的扇区解除不了,这是什么原因?

下面的话怎么解释:
The first time you program FLASH_NVWPAR or FLASH_NVAPR0 both the non-volatile and volatile part of the register are written. At any later stage, any write to these registers will affect only the volatile part, which will be restored with the content of the corresponding nonvolatile part at the next reset event.

使用特权

评论回复
9
starm| | 2008-1-29 13:57 | 只看该作者

写保护一旦启用, 就无法再禁用

只有临时禁用写保护, 下一次上电写保护自动被启用了。

调试保护可以启用, 然后禁用,再启用,禁用。。。最大16次。

也可以临时禁用调试保护。

使用特权

评论回复
10
lvpeng1979|  楼主 | 2008-1-29 17:37 | 只看该作者

请问没有解除成功

我进行了flash Bank 0 sectors 1-0写保护,
察看FLASHPR->NVWPAR=0xFFFFFFFC。确定被写保护。
然后解除写保护: 
      FLASH_WaitForLastTask(); 
      FLASHR->CR0 |= 0x01000000;  /*Set SPR in FLASH_CR0*/
      FLASHR->AR = 0x4010DFB0;    /*Load Add in FLASH_AR*/
      FLASHR->DR0 = 0xFFFFFFFF;   /*Load Data in FLASH_DR0*/
      FLASHR->CR0 |= 0x80000000;  /*Operation start*/  
发现WMS不是设置为“1”。请问没有解除成功。FLASHPR->NVWPAR 还是0xFFFFFFFC。这是否正确。

使用特权

评论回复
11
zllong2008| | 2014-3-4 14:49 | 只看该作者
请问:使用IAR5.30联机单步调试时,单步到库函数的
FLASH->DR0  = (*(u32*)FLASH_NVWPAR_ADDRESS) | FLASH_Sectors;
这条语句,如再单步向下运行时,程序就跑飞了,哪位前辈可否帮一把。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

36

帖子

0

粉丝