原创 关于单片机程序设计的几点

2013-5-23 13:54 1313 18 5 分类: 消费电子

 

需要的一些:
  1. 对于单片机程序,首先要对于要使用的单片机比较了解,对于硬件设计比较了解,对C编程比较熟悉;
  2. 了解单片机是因为当需要设置某些寄存器的时候,会知道相应的设置方式,避免出现因为寄存器设置造成的不必要的调试时间。
  3. 对硬件比较了解,因为硬件电路是程序运行的前提,如果硬件电路出现了问题,软件无论如何也跑不起来;
  4. 对C比较熟悉,因为过了初始化以后主要工作就是由C来承担了;
  5. 对于需要操作模块的了解与设置,知道相应的设置或操作引发的结果。
遗忘的死角:
 
最近在查看一段代码的时候,发现里边有一个潜在的递归操作,而且没有限制递归的次数。
 
对于在PC上运行的程序,很多时候是不用担心的,毕竟内存还是够用的。当然对于数据量比较大的时候,还是需要注意。
 
但是对于在单片机上运行的只有512字节栈空间的uC/OS系统的一个任务而言,如果发生了,很容易造成内存溢出。
 
确实,有时候使用递归会使问题更容易解决,但是它所带来的资源消耗也是很可观的。由于不知道何时终止,对于内存受限的系统而言,更像是一个定时**。
 
对于递归的使用,在很多时候还是不建议使用的。
 
虽然,它是我们C基础教材上经常出现的一种方法,但是它确实在很多时候都不适合使用。
 
关于Flash初始化及Fatfs初始化:
  1. 如果遇到FR_NOT_ENABLED,则是没有正常挂载需要f_mount,挂载成功Flash;
  2. 如果遇到FR_NO_FILESYSTEM,则需要f_mkfs初始化文件系统,创建Fat文件系统;
  3. 但是如果遇到了f_mkfs成功了,这时调用f_open时,又出现了FR_NO_FILESYSTEM,该如何是好呢?f_mkfs的哪一点漏洞,会造成没有正确的返回?
  4. 关于(3)的疑问,找到了是硬件焊接不牢固的问题。
  5. 虽然(3)的问题解决了,但是在f_open的时候,却依旧返回FR_NO_FILE,即使创建文件,也返回同样的错误,为何?
  6. (5)的问题在代码上定位到ff.c的1029行,发现注释是Initialize the SFN entry失败。 分析发现既然Flash可创建文件系统,即可写入,这一步通不过应该不是硬件的原因,可能是软件上的某个操作,导致了不正常的文件,于是重新初始化了文件系统,发现可以。应该是因为初始化完成后,没有关闭文件,导致再一次操作时,一直失败。这个时候需要先关闭文件,再次打开。当然,重新f_mkfs也是可以的。
  7.  
PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

1989tie_959541171 2013-5-24 23:38

本来想总结一些相关的程序设计,现在整理出了这几个。有些整理了,但是还没有想好。

xucun915_925777961 2013-5-24 18:58

来学习一下^_^

用户1602177 2013-5-23 13:55

博主这是还没有写完吗?

用户1318043 2013-1-14 22:12

一颗功能极其强大的视频转换IC!
相关推荐阅读
catch2000 2015-07-19 11:44
信号线小电阻的作用
在一块新的PCB上,测试系统能否正常运行的时候,发现系统上电后没有正常启动。  系统框图如下:   在上电的时刻,CPU A(GPIO电平2.6V)会向串口发送启动日志数据,CPU A启动后,...
catch2000 2015-07-05 17:04
协议设计中ACK机制的影响
在TCP/IP中,延时ACK和Nagle算法。  TCP为了同时处理成块数据(通常为512字节的用户数据)和交互数据(通常用户数据比较少,例如不大于10个字节),采用了延时ACK和Nagle算法...
catch2000 2015-05-23 15:48
话说物联网操作系统
最近好多家都宣布推出自己的物联网操作系统。   1. Google将要在Google I/O大会发布的Brillo; 2. 三星推出的Artik芯片搭载Mentor Graphics的...
catch2000 2015-03-31 23:52
不要采用异或来交换两个变量
在进行两个变量的时候,经常会看到有些书误人子弟的推荐使用异或的方式: 方式一 {   x = x ^ y;   y = x ^ y;   x = x ^ y; } 而不是...
catch2000 2014-10-09 07:28
为什么要测试先行
在产品的研发过程中,测试一项至关重要。不论是软件还是硬件。   软件的测试先行,在研发过程中,就做到质量的保证,因为在出现Bug的时候,容易定位Bug,而且即使是在客户端出现Bug,也能够...
catch2000 2014-10-09 07:26
C语言的面向对象编程(一)
一、前言 对于编程而言,重要的是解决问题的方式,而不是语言本身。面向对象与面向过程是解决问题和思考问题的方式。C语言常说是面向过程开发的语言,因为其缺少很多对于面向对象特性的支持。但,这并不影...
EE直播间
更多
我要评论
3
18
关闭 站长推荐上一条 /3 下一条