6888|6

7815

帖子

57

TA的资源

裸片初长成(中级)

楼主
 

只为uC而生,uS成长历程 14 [复制链接]

还好,差点以为今晚写不成了。
说说今晚的状况。

今晚还是开始的比较晚。早些时候 超声波似乎套出它的 等效模型参数,看来有点天真。
中间出门跑了会步,洗了个澡什么的。

真正开始弄大概都10点多了。

结果还是在倒腾ultraedit。
最后总算搞定了。

看来下次工具软件一定要存放好啊。

今晚做的事情不多,不过个人觉得挺有教训意义的。

那就是发现了为什么用我自己已经封装成库的stm8s的库函数 去 替代原例程 里 的 stm8s_clk.h和stm8s_uart2.h时,为什么会出现穿口收发不正常。
此帖出自编程基础论坛

最新回复

这个跟uC有关系吗?没看懂啊  详情 回复 发表于 2013-8-13 10:38
点赞 关注
 

回复
举报

7815

帖子

57

TA的资源

裸片初长成(中级)

沙发
 

对比两个uart2.c

这个时候,我用ultra compare这个工具来做对比。
在过去的第一份工作,两年时间里,我有一年半的时间在用这款工具。
所以我非常习惯那个界面,以至于我甚至没办法习惯它的新界面...呵呵

闲话少说,说说结果。

我发现,在stm8s_uart2.c里,居然多了一句
包含

#include "stm8s_clk.h"

而在我的库里没有这一句。
这个时候,还不明白,我只好回到stm8s库的项目去检查

我发现当时有一个不很醒目的 编译警告,没有引起我的注意,以至于导致今天的麻烦。
整整两个晚上!

这个教训是深刻的。

下面我们来看看我为此做的改动并加在 说明文档里的 说明文字
  1. 事实上,我当初没特别留意。
  2. 在stm8s_uart2.c里有一个使用了stm8s_clk.c的函数。
  3. 如果在stm8s_uart2.c里不包含stm8s_clk.h 就会导致这个警告,而实际上,也会使得这个函数调用无效。
  4. 而这次,使用我的库去替代例程里的stm8s_clk.c和 stm8s_uart2.c导致串口不能收发正是这个原因。
  5. 这点事情告诉我。

  6. 一定要特别注意警告。

  7. 事实上,我现在的编译里,还有5个警告,但有一些我一时半会解决不了,老规矩,仍然贴上来。
  8. 分割线以下是上一次编译的 信息,也许意义不大,作废了,故而被我删除了。

  9. Building configuration: stm8s105-lib - Debug
  10. Updating build tree...

  11. 40  file(s) deleted.
  12. Updating build tree...
  13. Add_clk.c  
  14. stm8s_adc1.c  
  15. stm8s_awu.c  
  16. stm8s_beep.c  
  17. stm8s_clk.c  
  18. stm8s_exti.c  
  19. stm8s_flash.c  
  20. stm8s_gpio.c  
  21. stm8s_i2c.c  
  22. Warning[Pe550]: variable "tmp1" was set but never used E:\STM8S-WORKFILE\stm8s105-lib\src\stm8s_i2c.c 594
  23. Warning[Pe550]: variable "tmp2" was set but never used E:\STM8S-WORKFILE\stm8s105-lib\src\stm8s_i2c.c 595
  24. Warning[Pe550]: variable "tmp1" was set but never used E:\STM8S-WORKFILE\stm8s105-lib\src\stm8s_i2c.c 705
  25. Warning[Pe550]: variable "tmp2" was set but never used E:\STM8S-WORKFILE\stm8s105-lib\src\stm8s_i2c.c 706
  26. stm8s_itc.c  
  27. Warning[Pe940]: missing return statement at end of non-void function "ITC_GetCPUCC" E:\STM8S-WORKFILE\stm8s105-lib\src\stm8s_itc.c 56
  28. stm8s_iwdg.c  
  29. stm8s_rst.c  
  30. stm8s_spi.c  
  31. stm8s_tim1.c  
  32. stm8s_tim2.c  
  33. stm8s_tim3.c  
  34. stm8s_tim4.c  
  35. stm8s_uart2.c  
  36. stm8s_wwdg.c  
  37. Building library

  38. Total number of errors: 0
  39. Total number of warnings: 5

  40. 相对而言,前四个警告不算很严重的事情。只是几个暂存变量,设置了却没用;
  41. 至于第五个感觉需要严阵以待。然而,这个地方,它是宏条件编译的,而且两个分支是不对称的。
  42. 本想去掉,可惜其调用的地方需要用到返回值,不能简单去掉。
  43. 再回头看。代码中注释提到 忽视警告即可。

  44. stm8s_itc.c

  45. /**
  46.   * @brief  Utility function used to read CC register.
  47.   * @param  None
  48.   * @retval CPU CC register value
  49.   */
  50. uint8_t ITC_GetCPUCC(void)
  51. {
  52. #ifdef _COSMIC_
  53.   _asm("push cc");
  54.   _asm("pop a");
  55.   return; /* Ignore compiler warning, the returned value is in A register */
  56. #elif defined _RAISONANCE_ /* _RAISONANCE_ */
  57.   return _getCC_();
  58. #else /* _IAR_ */
  59.   asm("push cc");
  60.   asm("pop a"); /* Ignore compiler warning, the returned value is in A register */
  61. #endif /* _COSMIC_*/
  62. }

  63. 这里就暂时不动它。
  64.                                                                       2013.8.13 00:00(之所以特别提这个,是觉得才过了几秒钟就变成第二天挺吃亏的)
  65. --------------------------------------------------------------------------------------------
复制代码
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

板凳
 
这里,我想说多几句的。

我个人认为,这也可以认为是stm8s的这个库的组织的一个缺陷。

因为在它提供的 外设库里,每个模块的文件 都是 以 一种给人各自平行的地位并存在同一级文件夹里的。
然而实际上,它们却不完全是平行关系。


上面出现了同级引用就是一个最好的例子。

也正是这种组织方式,让我一直以来都没足够重视 这个问题。

当然,这个地方也难怪stm8s库的封装者难以取舍。
毕竟这些都是外设。

然而说对也不对

比如说,因为clk从功能上来说,本来就是高于其他任何模块的

因为,其他任何模块都需要挂到 时钟总线上,被它驱动。

这里给我们一个启发
一定要注意 组织的层次。
它和代码风格和规范一样
“是一种通过外观展现内在逻辑关系的手段”


[ 本帖最后由 辛昕 于 2013-8-13 00:18 编辑 ]
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

4
 
晚安
此帖出自编程基础论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

5
 

uC?

这个跟uC有关系吗?没看懂啊
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

6
 

回复 5楼fisheneew 的帖子

你说的uC是什么uC?
这里说的uC是 低端微处理器
u是 微 的意思 C是处理器
此帖出自编程基础论坛
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

7
 
辛昕 发表于 2013-8-13 00:13
这个时候,我用ultra compare这个工具来做对比。
在过去的第一份工作,两年时间里,我有一年半的时间在用 ...

可恶!!搞stm8s003时,又被这里拌了一脚!!
看来,我必须学习某个老外程序员大大,准备一份 嵌入式灾难集了!!
此帖出自编程基础论坛
 
个人签名

强者为尊,弱者,死无葬身之地

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表