打印
[STM32F1]

KEIL软件仿真和JLINK仿真的时候还没开始就不一样

[复制链接]
2662|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hgmmym|  楼主 | 2014-7-6 15:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
同是一个变量,叫USART1_In
程序还没开始执行的时候
软件仿真的时候,USART1_In初始值是0,没问题。
JLINK仿真的时候,USART1_In=0xbd ,预先存入了一个值,这是什么情况?
沙发
mmuuss586| | 2014-7-6 15:06 | 只看该作者
不太好猜,程序发上来看看;

另外以实际仿真为准;

使用特权

评论回复
板凳
hgmmym|  楼主 | 2014-7-6 20:53 | 只看该作者
mmuuss586 发表于 2014-7-6 15:06
不太好猜,程序发上来看看;

另外以实际仿真为准;

串口中断处做了一个缓冲,然后每存一个数据就++一个变量当计数器,现在软件仿真完全正常,但是一旦JLINK仿真就会递增3,而不是软件仿真时候的递增1,这是什么回事?

使用特权

评论回复
地板
hgmmym|  楼主 | 2014-7-6 21:04 | 只看该作者
//中断函数: (可在stm32f10x_.it.c中调用)
void USART1_IRQHandler(void)
{
        unsigned char RX_dat; //定义字符变量
        if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //判断发生接收中断
        {
                RX_dat=USART_ReceiveData(USART1); //接收数据
                USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清除中断标志
                USART1_Cache[USART1_End-1]=RX_dat;
                USART1_End++;
        }
}


就上面这些代码在串口中断1里面,软件仿真的时候USART1_End正常递增1,但是JLINK里面会递增3.


刚刚修改了上面源码,变成
//中断函数: (可在stm32f10x_.it.c中调用)
void USART1_IRQHandler(void)
{
        unsigned char RX_dat; //定义字符变量
        if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //判断发生接收中断
        {
                RX_dat=USART_ReceiveData(USART1); //接收数据
                USART_ClearITPendingBit(USART1, USART_IT_RXNE); //清除中断标志
                USART1_Cache[USART1_End-1]=RX_dat;
                USART1_End++;

                USART_SendData(USART1,RX_dat);
                while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);       
                USART_ClearFlag(USART1, USART_FLAG_TXE);
        }
}

结果发字符“1”过去,就返回0xBD,发a就返回0x7D,b就是0x7B。
而软件仿真完全正常,该1就是1,该a字符就是a字符。。。

使用特权

评论回复
5
江枫渔火| | 2014-7-7 00:06 | 只看该作者
从来不用软件仿真,用jlink连上去仿真吧。

使用特权

评论回复
6
拿起书本| | 2014-7-8 21:09 | 只看该作者
用JLINK可以在开发板上进行实时仿真,可以一步一步的观察各段程序的功能效果,方便程序查错。

使用特权

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

本版积分规则

2

主题

5

帖子

0

粉丝