[国产单片机]

辉芒微F61FT145资源兼容替代STM8S003,价格小于1

[复制链接]
280|8
手机看帖
扫描二维码
随时随地手机跟帖
哟哟哟

使用特权

评论回复
ghost_z| | 2022-9-27 20:53 | 显示全部楼层
中断里面要加20个NOP,是什么回事?

使用特权

评论回复
stb988| | 2022-9-28 08:44 | 显示全部楼层
ghost_z 发表于 2022-9-27 20:53
中断里面要加20个NOP,是什么回事?

看来他们对编译并没有优化啊

使用特权

评论回复
panxiaoyi| | 2022-9-28 20:10 | 显示全部楼层
全部代码如图,就几十行代码

发现:

如果书写代码 aaa=1 ,则:
汇编代码 第一步清零 aaa,第二步 aaa+1

如果书写代码 aaa=2,则:
汇编代码 就是一条赋值语句,没有清零步骤

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

微信图片_20220928200612.jpg

使用特权

评论回复
panxiaoyi| | 2022-9-28 20:15 | 显示全部楼层
ghost_z 发表于 2022-9-27 20:53
中断里面要加20个NOP,是什么回事?

这20行 NOP 必须要加,少一行,或者同一行书写20个NOP都不行,我就吃过这个亏,而且是批量

使用特权

评论回复
ghost_z| | 2022-9-28 20:24 | 显示全部楼层
是什么原因这样弄?IC BUG?

使用特权

评论回复
panxiaoyi| | 2022-9-28 20:31 | 显示全部楼层

//Device: FT61F14X

#include "SYSCFG.h"

//===========================================================

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

unsigned char aaa;

//===========================================================

void interrupt ISR(void)
{
        #asm;    //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        NOP;     //系统设置不可以删除和修改
        #endasm; //系统设置不可以删除和修改
        user_isr();
}

void user_isr(void)
{
        if(T4UIF)
        {
                if(aaa==0)
        LATA=255;           //测试,正常时此语句不应该运行
                T4UIF=0;            //清零
        }
}

//===========================================================

main()
{
        OSCCON = 0b01110001;        //16MHZ 1:1
        WDTCON = 0b11101001;    //看门狗复位默认值并使能看门狗
   
    aaa=1;
    LATA=0;

    TIM4EN = 1;             //TIME4时钟使能
        T4CEN  = 1;             //TIME4使能
   
        T4UIF  = 0;             //清零标记
        T4UIE  = 1;             //允许中断

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

        while(1)
        {
                WDTCON=0b11101001;  //看门狗复位默认值并使能看门狗
        NOP();
        NOP();              //增加/减少空操作语句,可以改变出现错误的命中率
        aaa=1;              //aaa=1 时会出现错误,aaa=2~255就不会出现错误,因为它们产生的汇编指令不同
        NOP();
        }
}


FT61F14X_bug.zip

3.97 MB

使用特权

评论回复
panxiaoyi| | 2022-9-28 20:32 | 显示全部楼层
估计是编译器,当然,也可能是我的问题,还请大家帮忙看看

使用特权

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

本版积分规则