搜索
bottom↓
回复: 0

为何新塘N76E003 开启“9:common block subroutines”无法写Flash?

[复制链接]

出5入10汤圆

发表于 2018-4-17 15:14:25 | 显示全部楼层 |阅读模式
Keil C51默认优化等级是“8:Reuse Common Entry Code”,再次优化等级下,能够正常操作Flash,为何将优化等级提高到“9:common block subroutines”,代码就无法写Flash?

注意到 write_DATAFLASH_BYTE 函数注释,这个咋破?

  1. /*****************************************************************************************************************
  2. write_DATAFLASH_BYTE :
  3. user can copy all this subroutine into project, then call this function in main.
  4. ******************************************************************************************************************/
  5. void write_DATAFLASH_BYTE(UINT16 u16_addr, UINT8 u8_data)
  6. {

  7.     UINT8 looptmp = 0, u8_addrl_r;
  8.     unsigned char code *cd_longaddr;
  9.     unsigned char idata *xd_tmp;

  10.     //Check page start address
  11.     u8_addrl_r = u16_addr;

  12.     if (u8_addrl_r < 0x80)
  13.     {
  14.         u8_addrl_r = 0;
  15.     }
  16.     else
  17.     {
  18.         u8_addrl_r = 0x80;
  19.     }

  20.     //Save APROM data to XRAM
  21.     xd_tmp = 0x80;
  22.     cd_longaddr = (u16_addr & 0xff00) + u8_addrl_r;

  23.     while (xd_tmp != 0x100)
  24.     {
  25.         *xd_tmp = *cd_longaddr;
  26.         looptmp++;
  27.         xd_tmp++;
  28.         cd_longaddr++;
  29.     }

  30.     // Modify customer data in XRAM
  31.     u8_addrl_r = u16_addr;

  32.     if (u8_addrl_r < 0x80)
  33.     {
  34.         xd_tmp = u8_addrl_r + 0x80;
  35.     }
  36.     else
  37.     {
  38.         xd_tmp = u8_addrl_r + 0;
  39.     }

  40.     *xd_tmp = u8_data;
  41.     //Erase APROM DATAFLASH page
  42.     IAPAL = u16_addr;
  43.     IAPAH = u16_addr >> 8;
  44.     IAPFD = 0xFF;
  45.     set_IAPEN;
  46.     set_APUEN;
  47.     IAPCN = 0x22;
  48.     set_IAPGO;
  49.     //Save changed RAM data to APROM DATAFLASH
  50.     u8_addrl_r = u16_addr;

  51.     if (u8_addrl_r < 0x80)
  52.     {
  53.         u8_addrl_r = 0;
  54.     }
  55.     else
  56.     {
  57.         u8_addrl_r = 0x80;
  58.     }

  59.     xd_tmp = 0x80;
  60.     IAPAL = u8_addrl_r;
  61.     IAPAH = u16_addr >> 8;
  62.     set_IAPEN;
  63.     set_APUEN;
  64.     IAPCN = 0x21;

  65.     while (xd_tmp != 0xFF)
  66.     {
  67.         IAPFD = *xd_tmp;
  68.         set_IAPGO;
  69.         IAPAL++;
  70.         xd_tmp++;
  71.     }

  72.     clr_APUEN;
  73.     clr_IAPEN;

  74. }
复制代码

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 04:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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