技术备忘

本文章为技术文章,仅电子开发类人员能看懂,其他人请不要点开浪费时间。

写本文章目的是备忘。

各种MCU、DSP、CPU由于处理速度,存储器大小等资源差别巨大,采用了不同的软件架构,不同的开发调试方式,开发平台。

1,STM8 MCU单片机。

2,PI32 DSP杰理蓝牙芯片。

3,8051 MCU杰理播放器芯片。

4,全志ARM926系统芯片(上)。

5,全志ARM926系统芯片(下)。

6,单片机8051的RTX51-Tiny。

一,8051单片机引脚图:

二,由于国内大学课本的关系,8051单片机软件工程师一般是先学习汇编语言写程序,工作中逐渐改用C语言,很多C语言代码仍保留着汇编语言面向硬件的思维方式和程序结构特点。

引入新的编程思路、编程方式可以提高代码的可读可理解性,提高软件品质,并降低工作量和代码量,这一般分3个层次,

1,结构化、层次化的编程。

当代码规模达到千行以上时,软件工程师会把模块例如串口通信独立成文件编写,减少单个文件总行数以便于阅读和修改。

做得最好的是8051核专用芯片原厂的代码,把结构化层次化做得很仔细。

2,使用系统库文件的编程。

系统库文件在C:\Keil\C51\LIB,我们只要#include头文件就行。

absacc.h,数组形式绝对地址存储

assert.h,断言

ctype.h 字符类型判断、大小写转换、字符转数值。

errno.h 错误枚举值

float.h 浮点数范围

intrins.h C语言不好表达的8051特殊指令

limits.h 有无符号的字节/短整/长整型的范围

math.h 浮点型数学函数

setjump.h 设置跳转并指定其堆栈等信息,用于多线程编程

srom.h 复制rom内容到ram并运行它,仅适用于部分CPU

stdarg.h 不定参数变量处理,“...”之类

stddef.h 空指针,位置差等

stdio.h 字符串形式串口IO处理函数

stdlib.h 绝对值,支付转数值,随机数,内存分配释放等

string.h 字符串操作及内存块操作(数组操作)

使用系统库函数使得程序可以运算整数/浮点数,处理几何计算,处理字符字符串,操作ram+rom空间,使用8051特殊指令等等。

使用系统库函数可以使程序高效率,降低工作量和代码量。

也避免“土方法代码”运算的结果偏差,避免“土方法代码”的不完善不通用和难读等特点。

3,使用多线程编程。

keil C51内置了一个嵌入式操作系统RTX51-TINY。

RTX51-TINY对系统要求极低,开4个线程大约需要ROM 846 字节和ram 44 字节,占用一个timer0,AT89C2051单片机就可以运行。

多线程的编程一般把耗时任务(例如通信接收及解析)写成一个线程,使它可以按照其工作流程编写代码,在各个点把状态交给主线程。这样能使流程清晰可读,运行可靠。

思路类似于windows多线程编程,不是多进程编程。

主线程用来写主要的交互,对于耗时任务只关心其状态,不进行具体IO及运算,保证了主线程函数的代码整洁易读和运行可靠。

另外,中断服务子程序通过isr_send_signal或isr_set_ready使指定线程的os_wait返回,该线程可以立刻对采集或接收的数据进行读出和处理。这样的写法减少中断服务子程序避免中断服务子程序冗长难懂。

RTX51-Tiny函数分析、代码流程分析见附文《RTX51-Tiny代码分析》。

作者介绍:

丑木,原名黄华林,80后。

读大学期间由师兄带入电子开发路子,蹉跎岁月10多年,玩过简单应用程序开发、车载音响导航产品、数码产品、视频产品、手机产品等,无系统MCU、嵌入式系统UCOS/ThreadX、开放式操作系统Win32/Linux/android什么都做。

由于微信朋友圈内容不能对外转帖,故开通公众号瞎写东西方便转帖。

个人微信二维码:

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180225G01APX00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券