打印

调试时遇到问题(编译通过)

[复制链接]
258|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hanwe|  楼主 | 2020-4-4 18:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

我做的是usb设备,用仿真器仿真的,编译通过,倒是调试时遇到问题
这是延时2us的
void delay2us()
{
uint i;
for (i=DELAY_START_VALUE; i!=0; i--);
}
但是下面的delay2us()第一个能通过,第二个在运行到for(i=DELAY_START_VALUE; i!=0; i--);时就卡住了

使用特权

评论回复
沙发
yufe| | 2020-4-4 18:20 | 只看该作者
楼主程序可以公开吗?贴程序看下吧,这么说看不出什么原因

使用特权

评论回复
板凳
hanwe|  楼主 | 2020-4-4 18:25 | 只看该作者
void CH375_WR_CMD_PORT(uchar cmd)
{
delay2us();
CH375_CMD_PORT=cmd;
delay2us();
}
如果我把第二个 delay2us()屏蔽了,后面再用到延时2us,还是回运行不下去。郁闷ing,大家帮帮小弟……


}

使用特权

评论回复
地板
wangpe| | 2020-4-4 18:29 | 只看该作者
这种函数没有实际操作,很容易被优化掉。

使用特权

评论回复
5
langgq| | 2020-4-4 18:32 | 只看该作者
建议修改仿真编译软件的优化等级试试。

使用特权

评论回复
6
hanwe|  楼主 | 2020-4-4 18:36 | 只看该作者
哦,还能?

使用特权

评论回复
7
zhanglli| | 2020-4-4 18:38 | 只看该作者

或者在for循环里加入NOP指令

使用特权

评论回复
8
yufe| | 2020-4-4 18:41 | 只看该作者
我也是在第二个延时会卡住。开始以为是延时程序有问题,后来改了两次还是没成功。不过我调试的时候,你多暂停两次就可以跨过卡住的地方,但是如果烧到板子里,板子时钟过不去。

使用特权

评论回复
9
yufe| | 2020-4-4 18:46 | 只看该作者
我的卡顿问题不仅在延时有,在里面有些固定点也有,比如一个定时器的设置,在使能中断后就是不走了,暂停继续下,才接着往下跑,不知道楼主解决了这个问题没有。

使用特权

评论回复
10
hanwe|  楼主 | 2020-4-4 18:49 | 只看该作者
嗯,我再好好缕一缕吧,有了好消息及时通知大家,结贴喽

使用特权

评论回复
11
hanwe|  楼主 | 2020-4-4 18:53 | 只看该作者

void delay2us()
{
        volatile uint i;
        for (i=DELAY_START_VALUE; i!=0; i--)
        {
                __nop();
        }
}

void CH375_WR_CMD_PORT(uchar cmd)
{
        delay2us();
        CH375_CMD_PORT=cmd;
        delay2us();
        __nop();//设置断点
}
如果这样还是有问题,说明问题不在这里

使用特权

评论回复
12
hanwe|  楼主 | 2020-4-4 18:55 | 只看该作者
嗯,我再好好缕一缕吧,有了好消息及时通知大家,结贴喽

使用特权

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

本版积分规则

979

主题

8749

帖子

4

粉丝