1.I2C程序怎么调
2.为什么我的程序不对,然后贴一堆代码上来
3.为什么我这样写对,那样写不对
首先建立一个观点:程序是搞电子技术里面最最最最简单的东西,因为他最最最说得清楚,你这样写了,处理器就会这样做,如果没有按照你的想法来做,那一定是你没写对。
话说硬件设计还需要很多数据库似的知识支撑,高频还需要黑色艺术细胞,学写程序除了背点语句,掌握一些基本技巧外加做好规划之外,真的不需要啥东西,会说话就会写程序。
现在言归正传,前面说了,程序就是你想处理器做什么。在你动手之前,应该先找张白纸,写下你想干什么,然后画出流程图(贴代码问程序的请扪心自问,是否画了流程图)。再明确程序的模块划分,每个模块的输入、输出变量和占用资源。
模块划分就是把任务拆分成互不相关的部分,比如软主机I2C程序可以拆分成发生启动位、发送停止位、发生一个字节、接收一个字节、发送应答位、发送非应答位、接收一个字节、读取应答位等。
其次是要想方设法从最基本的地方开始调试,来这里贴代码的都是一贴一大篇,要知道我们都不敢这样写代码,何况是自称新手?程序要写一块调一块,细到什么程度?真是菜鸟,就细到写完发送启动位就送出来拿示波器检查,检查边沿、电平和时间参数是否跟自己设计的值一样。
模块有大有小,取决于站在哪个层次看问题和写程序的熟练程度。如果是从一个使用PCF8563的数字钟系统来说,I2C通讯整个可以看成一个模块。另外如果调试技术够成熟,写完整个从器件选址应答过程再看也不迟,甚至连示波器都不需要。
全部回复 20
- 29 主题
- 73 帖子
- 562 积分
身份:LV3 中级技术员
E币:491
发消息
收藏了,感谢楼主分享,感谢原作者
>>资料:例说STM32.pdf
我个人总是担心, 这种哗众取宠的博文, 会误导大批工程师, 特别是像我们这种非专业科班出身的工程师.
类似的博文, 总是力图用日常的生活经验, 去建立一种似是而非的通感, 即"任何事情都很简单".
正好像印度, 土耳其, 韩国, 看到中国科技力量大发展, 而基于开启类似隐身战机立项, 这带来一个思维的误区: "即中国能, 我也能".
coding 本身很简单, 但又很不简单.
简单的意思是, 不管你是哪行出身, 就算你学法医或翻译, 给一块开发板, 任何智商平均值不为负者, 都能把 led 点亮闪烁到飞起.
不简单就很明白, 只要你干过任何一个实操项目. 高级工程师与初级工程师的区别, 就好比建筑师与泥瓦匠那样天差地别.
做出来的产品, 存在可靠性稳定性与效能的区别.
我个人觉得, 首先把操作系统与嵌入式操作系统的课程认真自学一遍是重要的.
尽个人所能, 了解电子科技自上世纪 50~60年代开始的发展史是重要的.
了解基础语言与 embedded 的互动, 特别是 stack 指针的意义是重要的.
思考原始语言从过程式(函数编程, 而不是函数式编程)的出现原因是重要, 它是否符合人类的一般思维模式?
然后开始学习语言. 多学几门语言会发现, 几乎所有的语言都存在广泛的共性, 了解这种共性是重要的.
每种语言能生存的基本原因, 在于其中某几种特别的个性, 了解这些个性是重要.
由于工作在 embedded system, 我们对工作环境的稳定性的思考是重要的, 这涉及了桌面程序不会出现的,
强调可靠性与冗余性的语言设计.
然后, 让我们开始愉快的写下第一个代码, 点亮第一个 led 灯.
在辛苦学习了数年, 并积累了数个项目时, 与花了一个小时自学的外行, 一起把这颗 led 灯点亮到飞起.
你皱着眉头, 他傻X一样舒展眉头, 共同欣赏类似这种博文 --
"其实编程非常简单, 是最简单最明确的事情..."
类似的博文, 总是力图用日常的生活经验, 去建立一种似是而非的通感, 即"任何事情都很简单".
正好像印度, 土耳其, 韩国, 看到中国科技力量大发展, 而基于开启类似隐身战机立项, 这带来一个思维的误区: "即中国能, 我也能".
coding 本身很简单, 但又很不简单.
简单的意思是, 不管你是哪行出身, 就算你学法医或翻译, 给一块开发板, 任何智商平均值不为负者, 都能把 led 点亮闪烁到飞起.
不简单就很明白, 只要你干过任何一个实操项目. 高级工程师与初级工程师的区别, 就好比建筑师与泥瓦匠那样天差地别.
做出来的产品, 存在可靠性稳定性与效能的区别.
我个人觉得, 首先把操作系统与嵌入式操作系统的课程认真自学一遍是重要的.
尽个人所能, 了解电子科技自上世纪 50~60年代开始的发展史是重要的.
了解基础语言与 embedded 的互动, 特别是 stack 指针的意义是重要的.
思考原始语言从过程式(函数编程, 而不是函数式编程)的出现原因是重要, 它是否符合人类的一般思维模式?
然后开始学习语言. 多学几门语言会发现, 几乎所有的语言都存在广泛的共性, 了解这种共性是重要的.
每种语言能生存的基本原因, 在于其中某几种特别的个性, 了解这些个性是重要.
由于工作在 embedded system, 我们对工作环境的稳定性的思考是重要的, 这涉及了桌面程序不会出现的,
强调可靠性与冗余性的语言设计.
然后, 让我们开始愉快的写下第一个代码, 点亮第一个 led 灯.
在辛苦学习了数年, 并积累了数个项目时, 与花了一个小时自学的外行, 一起把这颗 led 灯点亮到飞起.
你皱着眉头, 他傻X一样舒展眉头, 共同欣赏类似这种博文 --
"其实编程非常简单, 是最简单最明确的事情..."