[国产单片机] 请教:辉芒微,就几条C语句,有些芯片编译正确,有些芯片编译报错

[复制链接]
2268|17
 楼主| panxiaoyi 发表于 2023-4-3 23:32 | 显示全部楼层 |阅读模式
本帖最后由 panxiaoyi 于 2023-4-3 23:53 编辑

请教:辉芒微,就几条C语句,有些芯片编译正确,有些芯片编译报错。
都是默认设置,请问,这是为什么?望指点,多谢


报错截图






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| panxiaoyi 发表于 2023-4-3 23:38 | 显示全部楼层
本帖最后由 panxiaoyi 于 2023-4-3 23:54 编辑

全部代码
  1. #include        "SYSCFG.h"

  2. volatile char W_TMP  [url=home.php?mod=space&uid=72445]@[/url] 0x70 ;    //系统占用不可以删除和修改
  3. volatile char BSR_TMP  @ 0x71 ;  //系统占用不可以删除和修改

  4. void user_isr();                 //用户中断程序,不可删除

  5. void interrupt ISR(void)
  6. {
  7.         #asm;                        //系统设置不可以删除和修改
  8.         NOP;                         //系统设置不可以删除和修改
  9.         NOP;                         //系统设置不可以删除和修改
  10.         NOP;                         //系统设置不可以删除和修改
  11.         NOP;                         //系统设置不可以删除和修改
  12.         NOP;                         //系统设置不可以删除和修改
  13.         NOP;                         //系统设置不可以删除和修改
  14.         NOP;                         //系统设置不可以删除和修改
  15.         NOP;                         //系统设置不可以删除和修改
  16.         NOP;                         //系统设置不可以删除和修改
  17.         NOP;                         //系统设置不可以删除和修改
  18.         NOP;                         //系统设置不可以删除和修改
  19.         NOP;                         //系统设置不可以删除和修改
  20.         NOP;                         //系统设置不可以删除和修改
  21.         NOP;                         //系统设置不可以删除和修改
  22.         NOP;                         //系统设置不可以删除和修改
  23.         NOP;                         //系统设置不可以删除和修改
  24.         NOP;                         //系统设置不可以删除和修改
  25.         NOP;                         //系统设置不可以删除和修改
  26.         NOP;                         //系统设置不可以删除和修改
  27.         NOP;                         //系统设置不可以删除和修改
  28.         NOP;                         //系统设置不可以删除和修改
  29.         #endasm;                     //系统设置不可以删除和修改
  30.         user_isr();                  //用户中断函数
  31. }

  32. void user_isr()                  //用户中断函数
  33. {
  34. }

  35. //上面的是创建 FT61F14 芯片的工程时,软件自动生成的代码

  36. //下面的是我遇到问题,一路排查,最后发现的问题点,以最简单的代码方式展现出来

  37. unsigned char func(unsigned char SW, unsigned char T1, unsigned char T2)
  38. {
  39.         return (SW+T1+T2);
  40. }

  41. main()
  42. {
  43.         while(1)
  44.         {
  45.                 unsigned char aaa=0;
  46.                 unsigned char ccc=3;;
  47.                 unsigned char kkk;

  48.                 aaa++;

  49.                 kkk=func((aaa&5), 2, ccc);  //正确
  50.                 kkk=func((aaa&5), 1, ccc);  //芯片 FT61F14 报错, FT61F13 正确
  51.                 kkk=func((aaa&5), 0, ccc);  //芯片 FT61F14 报错, FT61F13 正确
  52.                 kkk=func((aaa^5), 0, ccc);  //正确
  53.                 kkk=func((aaa+5), 0, ccc);  //正确

  54.                 PORTA=kkk;
  55.         }
  56. }


 楼主| panxiaoyi 发表于 2023-4-4 00:08 | 显示全部楼层
工程代码 FT61F14_FT61F13。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| panxiaoyi 发表于 2023-4-4 00:28 | 显示全部楼层
用C语言模拟编译也能通过,就是不知道上面的为什么不行?
  1. #include <stdio.h>

  2. unsigned char func(unsigned char SW, unsigned char T1, unsigned char T2)
  3. {
  4.         return (SW+T1+T2);
  5. }

  6. void main(void)
  7. {
  8.         unsigned char PORTA;               
  9.         unsigned char aaa=0;
  10.         unsigned char ccc=3;;
  11.         unsigned char kkk;
  12.        
  13.         aaa++;
  14.        
  15.         kkk=func((aaa&5), 2, ccc);  //正确
  16.         PORTA=kkk;
  17.         printf("PORTA=%d\n",PORTA);
  18.        
  19.         kkk=func((aaa&5), 1, ccc);  //芯片 FT61F14 报错, FT61F13 正确
  20.         PORTA=kkk;
  21.         printf("PORTA=%d\n",PORTA);
  22.        
  23.         kkk=func((aaa&5), 0, ccc);  //芯片 FT61F14 报错, FT61F13 正确
  24.         PORTA=kkk;
  25.         printf("PORTA=%d\n",PORTA);
  26. }
运行结果
PORTA=6
PORTA=5
PORTA=4

叶春勇 发表于 2023-4-6 11:28 | 显示全部楼层
我试验了一下,也是如此。
改成
temp=(aaa&5)
kkk=func(temp, 2, ccc);  //正确
就可以了。
 楼主| panxiaoyi 发表于 2023-4-7 22:19 | 显示全部楼层
叶春勇 发表于 2023-4-6 11:28
我试验了一下,也是如此。
改成
temp=(aaa&5)

是的,我也是使用这样的方法解决的,为了进度只能另寻出路,但是,为了查这个错,花了我超过半天的时间,最后才发现是辉芒微的问题,等下再来一个也是IDE软件错误的例子
 楼主| panxiaoyi 发表于 2023-4-7 22:33 | 显示全部楼层
截图和附件都是全部代码,也是很简单的代码,也是编译器的问题

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| panxiaoyi 发表于 2023-4-7 22:39 | 显示全部楼层
本帖最后由 panxiaoyi 于 2023-4-7 22:43 编辑

  1. //Device: FT61F14X

  2. #include "SYSCFG.h"

  3. //===========================================================

  4. volatile char W_TMP    [url=home.php?mod=space&uid=72445]@[/url] 0x70;     //系统占用不可以删除和修改
  5. volatile char BSR_TMP  @ 0x71;     //系统占用不可以删除和修改
  6. void user_isr(void);               //用户中断程序不可删除

  7. unsigned char aaa;

  8. //===========================================================

  9. void interrupt ISR(void)
  10. {
  11.         #asm;    //系统设置不可以删除和修改
  12.         NOP;     //系统设置不可以删除和修改
  13.         NOP;     //系统设置不可以删除和修改
  14.         NOP;     //系统设置不可以删除和修改
  15.         NOP;     //系统设置不可以删除和修改
  16.         NOP;     //系统设置不可以删除和修改
  17.         NOP;     //系统设置不可以删除和修改
  18.         NOP;     //系统设置不可以删除和修改
  19.         NOP;     //系统设置不可以删除和修改
  20.         NOP;     //系统设置不可以删除和修改
  21.         NOP;     //系统设置不可以删除和修改
  22.         NOP;     //系统设置不可以删除和修改
  23.         NOP;     //系统设置不可以删除和修改
  24.         NOP;     //系统设置不可以删除和修改
  25.         NOP;     //系统设置不可以删除和修改
  26.         NOP;     //系统设置不可以删除和修改
  27.         NOP;     //系统设置不可以删除和修改
  28.         NOP;     //系统设置不可以删除和修改
  29.         NOP;     //系统设置不可以删除和修改
  30.         NOP;     //系统设置不可以删除和修改
  31.         NOP;     //系统设置不可以删除和修改
  32.         NOP;     //系统设置不可以删除和修改
  33.         #endasm; //系统设置不可以删除和修改
  34.         user_isr();
  35. }

  36. void user_isr(void)
  37. {
  38.         if(T4UIF)
  39.         {
  40.                 if(aaa==0)
  41.                 LATA=255;           //测试,正常时此语句不应该运行
  42.                 T4UIF=0;            //清零
  43.         }
  44. }

  45. //===========================================================

  46. main()
  47. {
  48.         OSCCON = 0b01110001;        //16MHZ 1:1
  49.         WDTCON = 0b11101001;    //看门狗复位默认值并使能看门狗

  50.         aaa=1;
  51.         LATA=0;

  52.         TIM4EN = 1;             //TIME4时钟使能
  53.         T4CEN  = 1;             //TIME4使能

  54.         T4UIF  = 0;             //清零标记
  55.         T4UIE  = 1;             //允许中断

  56.         GIE=1;                  //全局中断使能
  57.         PEIE=1;                 //外设中断使能

  58.         while(1)
  59.         {
  60.                 WDTCON=0b11101001;  //看门狗复位默认值并使能看门狗
  61.                 NOP();
  62.                 NOP();              //增加/减少空操作语句,可以改变出现错误的命中率
  63.                 aaa=1;              //aaa=1 时会出现错误,aaa=2~255就不会出现错误,因为它们产生的汇编指令不同
  64.                 NOP();
  65.         }
  66. }
之前我使用的是 FT62F133,这次我使用的是 FT61F145,都有问题

发现:

如果书写代码 aaa=1 ,则:

汇编代码 第一步清零 aaa,第二步 aaa+1

如果书写代码 aaa=2,则:

汇编代码 就是一条赋值语句,没有清零步骤

分析:

当 aaa=1 时,并且汇编运行到 清零aaa指令后,这时候刚刚好中断,这时,在中断里面读取aaa的值就是=0,就是错误

评论

这其实还是你的问题,中断用到的变量,定义时需要加 volatile 关键字,你加了再编译看看反汇编的结果.  发表于 2023-5-5 16:08
 楼主| panxiaoyi 发表于 2023-4-7 22:52 | 显示全部楼层
说明一下,上面的  T4UIF=0;  //清零 ,是FT61F133的清零方式,FT61F145是=1才清零的,但是,只要程序运行了 LATA=255;  说明就有问题
叶春勇 发表于 2023-4-8 15:06 | 显示全部楼层
panxiaoyi 发表于 2023-4-7 22:52
说明一下,上面的  T4UIF=0;  //清零 ,是FT61F133的清零方式,FT61F145是=1才清零的,但是,只要程序运行 ...

我下载了ide ,可以用pic得编译器和sdcc编译器,编译。不过需要自己搞makefile
叶春勇 发表于 2023-4-8 15:13 | 显示全部楼层
panxiaoyi 发表于 2023-4-7 22:19
是的,我也是使用这样的方法解决的,为了进度只能另寻出路,但是,为了查这个错,花了我超过半天的时间, ...

这个14系列还是好一点的,真奇怪。
wzjhuohua 发表于 2023-4-10 09:17 | 显示全部楼层
辉芒微的编译器有点牛
DanPianJiFangAn 发表于 2023-4-18 10:52 | 显示全部楼层
书写代码 aaa=1 ,则:

汇编代码 第一步清零 aaa,第二步 aaa+1

这个好像PIC也是这样的吧.
 楼主| panxiaoyi 发表于 2023-4-19 08:22 | 显示全部楼层
DanPianJiFangAn 发表于 2023-4-18 10:52
书写代码 aaa=1 ,则:

汇编代码 第一步清零 aaa,第二步 aaa+1

是啊,这个的确会带来不良后果,我主程序明明aaa=1,在中断里面判断到的是=0。我是在实际应用中遇到的,当时是液晶屏显示一个变量,当这个变量等于1的时候,发现显示有错,于是一路删减代码排查,最后才发现这个问题的,并不是我故意挑剔,当然,问题找到了,程序中避开它即可
 楼主| panxiaoyi 发表于 2023-4-19 08:41 | 显示全部楼层
不过话也说回来,FT62F0Gx 系列,上面的问题都解决了,函数不会报错了,aaa=1,跟  aaa=2,所产生的指令是一样的,而且是 1T 时钟,值得期待

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
lrhsx33 发表于 2023-4-25 11:53 | 显示全部楼层
if+nop   行走天下。IDE一言难尽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

417

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部