OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 14473|回复: 9

求助keil编译显示错误无法包含我写的.h文件

[复制链接]

12

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2012-4-25
在线时间
0 小时
发表于 2012-5-19 10:09:12 | 显示全部楼层 |阅读模式
 我写了的是modbus文件,我把.c和.h都保存在库文件的src文件夹中







真正和谐
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-5-19 11:53:55 | 显示全部楼层
你找一下modbus.h在哪个文件夹里面?加入头文件包含路径就好了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2012-4-25
在线时间
0 小时
 楼主| 发表于 2012-5-21 09:35:46 | 显示全部楼层
回复【2楼】正点原子:
-------------------------------
我把.c和.h文件放到另一个文件夹就ok了,请问一下include”.h“自动找的范围是创建的工程文件还是更大的范围
真正和谐
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-5-21 10:38:58 | 显示全部楼层
回复【3楼】txz:
---------------------------------
貌似是工程根目录.
所以一般我们会要求设置头文件包含路径.或者采用"..\XX\XX\xxx.h"的形式
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2012-4-25
在线时间
0 小时
 楼主| 发表于 2012-5-22 09:39:41 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
原子哥,我用keil调试时,在串口接收中断时如果断点设在if(USART1->SR&(1<<5))//接收到数据  的前面那么程序会跳开if
的语句体,如果把断点设置在if的程序语句体中就可以进入if语句,那么我就不知道程序运行时要不要运行if语句了,这个是什么情况

 断点在这里跳过if语句 if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != 0)
 { GPIO_SetBits(GPIOA, GPIO_Pin_11); //485准备接受
    //COM_FLAG_H;
GPIO_SetBits(GPIOB, GPIO_Pin_2);
 断点在这里程序会运行到这里   RxBuffer[RxCounter] = (uint8_t)(USART1->DR & 0x01FF);  //接收数据
//iv = USART_ReceiveData(USART1);   //清接受缓存

    if(RxStart==RESET)  //刚开始接收
    {
      if(RxBuffer[RxCounter]==MODBUS_ADDRESS)  //板地址正确
      {
    TIM_Cmd(TIM7, ENABLE); //定时开始
        RxCounter++;
        RxStart=SET;    //
真正和谐
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-5-22 11:01:38 | 显示全部楼层
回复【5楼】txz:
---------------------------------
串口中断有很多种,但是他们共用一个中断服务函数,你的现象可能是其他中断类型进入中断函数导致的.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

12

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2012-4-25
在线时间
0 小时
 楼主| 发表于 2012-5-22 14:29:44 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
我看了usart1的寄存器发现应该只有接受中断是打开的,也没有过载错误等标志置位,我感觉是不是keil仿真做的不靠谱(充分发挥了怀疑精神这也敢怀疑)。我手动发送一个数据后,程序进入中断函数的if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != 0),这时keil的外设菜单的串口接收标志rxne是灰色打钩的(这个和白色打钩一样吗),当单击调试下一步时,跳过if语句体,同时接受标志rxne变为灰色不打钩(难道是运行太快,仿真无法捕捉到if语句体程序的运行,太无解了,我是不是很人才,所以原子哥应该实际调试一下我的程序,你邮箱qq信用卡号加密码发给我,我把程序发给你),我把程序全速运行(不设断点),发现是能够收到数据的,
真正和谐
回复 支持 反对

使用道具 举报

12

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2012-4-25
在线时间
0 小时
 楼主| 发表于 2012-5-22 17:01:44 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原子哥我改了别人用us操作系统写的modbus程序,但是有一个问题,发现在modbus.c中有while(1){对收到的数据处理},那么主函数调用了modbus程序就会一直在while中执行,那怎样去处理其他事情,比如触摸屏控制一个开关,如果有while那么相当于一直处理与触摸屏通信,控制开关的程序该放在那里
真正和谐
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-5-22 20:04:56 | 显示全部楼层
回复【7楼】txz:
---------------------------------
可以在刚进入中断的时候,读取SR的值,看看是什么触发的中断.
回复【8楼】txz:
---------------------------------
这个你修改代码就好了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

平心静气 该用户已被删除
发表于 2017-5-8 10:48:44 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-21 14:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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