嵌入式C语言位操作的移植与优化

导语:?由于嵌入式C语言可读性强、移植性好,与汇编语言相比大大减轻了软件工程师的劳动强度,因而越来越多的单片机工程师开始使用C语言编程。 引言 单片机的应用越来越广泛,种类也越来越多。由于嵌入式C语言可读性强、移植性好,与汇编语言相比大大减轻了软件工程师的劳动强度,因而越来越多的单片机工程师开始使用C语言编程。但C语言的可移植性仅限于与硬件无关的子程序,而与具体硬件有关的子程序则无法移植。在单片机应用中,位操作(特别是对引脚的位操作)非常普遍,如EEPROM数据和IC卡数据的读写、字段式LCD显示等,很多带串口的集成电路都需要单片机用软件来做I/O口读写程序。如何让这些子程序既有很好的通用性,生成代码的效率又高,是很多软件工程师都在考虑的问题。这里介绍两种C语言位操作的移植方法。1 用逻辑运算实现位操作 请看下面这个子程序: INT8U Card102RdByte(void) { INT8U Temp8U, n = 8; do{ Temp8U #definePIN_CARD_SDA_RD()(P6IN & 0x01) #definePIN_CARD_CLK_H()P6OUT |=0x04 #definePIN_CARD_CLK_L()P6OUT &= ~0x04 汇编结果如下: In segment CODE, align 2, keepwithnext __code unsigned char Card102RdByte(void) Card102RdByte: 0000007E42MOV.B#0x8, R14 ??Card102RdByte_0: 0000024C5CRLA.BR12 000004D2B33400BIT.B#0x1, &0x34 0000080128JNC??Card102RdByte_1 00000A5CD3BIS.B#0x1, R12 ??Card102RdByte_1: 00000CE2D23500BIS.B#0x4, &0x35 000010E2C23500BIC.B#0x4, &0x35 0000147E53ADD.B#0xff, R14 0000164E93CMP.B#0x0, R14 000018F423 JNE??Card102RdByte_0 00001A3041RET 这与手工汇编编程的结果几乎一样,代码效率很高。 1.2 用于51系列单片机 在51系列单片机中应用此程序,头文件要加入以下定义: #include”Reg932.h”//Philips LPC932单片机 sbitCradClk=P0︿1; sbitCardSDA=P0︿0; #definePIN_CARD_SDA_RD()CardSDA #definePIN_CARD_CLK_H()CradClk=1 #definePIN_CARD_CLK_L()CradClk=0 原来的程序不作任何改动,汇编结果如下: ; FUNCTION Card102RdByte (BEGIN) ;—— Variable ‘Temp8U‘ assigned to Register ‘R7‘ —— ;—— Variable ‘n‘ assigned to Register ‘R6‘ —— 00007E08MOVR6,#08H 0002?C0007: 0002EFMOVA,R7 000325E0ADDA,ACC 0005FFMOVR7,A 0006308003JNBCardSDA,?C0008 0009430701ORLAR7,#01H 000C?C0008: 000CD281SETBCradClk 000EC281CLRCradClk 0010DEF0DJNZR6,?C0007 0012?C0009: 001222RET ; FUNCTION Card102RdByte (END) 由汇编结果可知,对位的直接清零和置位已达到最简,只是读位值不够理想。 1.3 用于196/296系列单片机 在80C196MC、80C296SA等单片机中,片上I/O口是可以窗口映射到低端地址的。采用这种方式,I/O口可以直接寻址,因而程序代码最短,执行速度也最快,但这样做C程序就无法移植了。若不用窗口技术,则

嵌入式c语言移植,嵌入式c语言位操作的移植与优化.doc相关推荐

  1. 嵌入式c语言移植,嵌入式C语言位操作的移植方法

    单片机的应用越来越广泛,种类也越来越多.由于嵌入式C语言可读性强.移植性好,与汇编语言相比大大减轻了软件工程师的劳动强度,因而越来越多的单片机工程师开始使用C语言编程.但C语言的可移植性仅限于与硬件无 ...

  2. C语言到嵌入式Linux开发项目指导

    C语言到嵌入式Linux开发项目指导 第一阶段C语言 1.常量与变量,数据类型,数据类型转换,数据输入与输出: 2.C语言运算符,C语言操作符,C语言表达式,表达式优先级: 3.C语言流程控制,分支, ...

  3. C语言在嵌入式系统编程时的注意事项

    C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. 尽管C语言提供了许多低级处理的功 ...

  4. 使用Keil语言的嵌入式C编程教程(下)

    使用Keil语言的嵌入式C编程教程(下) 用8051单片机进行定时器/计数器的计算与编程 延迟是应用软件开发中的重要因素之一.然而,在实现定时延迟的过程中,正常的延迟并不能给出克服这一问题的宝贵结果. ...

  5. 使用Keil语言的嵌入式C编程教程(上)

    使用Keil语言的嵌入式C编程教程(上) Embedded C Programming Tutorial with Keil Language Embedded System 嵌入式系统是指以单片机为 ...

  6. keil窗口显示不全_使用Keil语言的嵌入式C编程教程(下)

    使用Keil语言的嵌入式C编程教程(下) 用8051单片机进行定时器/计数器的计算与编程 延迟是应用软件开发中的重要因素之一.然而,在实现定时延迟的过程中,正常的延迟并不能给出克服这一问题的宝贵结果. ...

  7. 学习纯软件开发(如Java/Python...)还是C语言、嵌入式、物联网呢?

    我国科技的迅速发展带动了计算机行业的兴盛发展,越来越多的学生,在职人士以及想要提升自己的人群都想学习这一行,给自己的美好未来打好物质基础,有得人想要学习纯软件开发比如Java/Python...,有的 ...

  8. 工欲善其事必先利其器-C语言拓展–嵌入式C语言(一)

    工欲善其事必先利其器-C语言拓展–嵌入式C语言(一) 我是golang出生,当时做项目的时候java.c++.js.python都折腾过,但是关于c语言的接触,基本上都停留在大一的那个暑假.后来因为要 ...

  9. # 工欲善其事必先利其器-C语言拓展--嵌入式C语言(八)

    工欲善其事必先利其器-C语言拓展–嵌入式C语言(八) 继续来看看新的属性:weak 这个符号知道是弱,但是这个是干嘛的呢?我们先来学习一下强符号和弱符号 文章内容全部来自–><嵌入式C语言 ...

最新文章

  1. Extjs4.2+webAPI+EF实现分页以及webapi的数据传值
  2. gentoo下gnome的抓图功能
  3. linux diff命令_Linux diff命令示例
  4. Linux集群服务 LVS
  5. 开启HDR视觉盛宴:究竟什么视频算得上HDR?
  6. 聊聊如何设计千万级吞吐量的.Net Core网络通信!
  7. Oracle11g新特性:在线操作功能增强-Oracle11g的只读表功能
  8. web端项目展开测试步骤
  9. git merge;fork同步集中库代码;a标签返回
  10. 2招PDF去密码,秒学秒懂秒用上!
  11. 中兴zxr10路由器重启命令_zxr10维护常用命令
  12. redis集群(服务端sharding)
  13. Ubuntu下安装GParted并分区,进行虚拟机内存扩展
  14. php 页面日历形式显示,日历页面展示-PHP制作阴阳历转换的日历插件-PHP中文网教程...
  15. 项目 电话号码和E-mail地址提取程序 地实现
  16. 【python-bug】日期正则表达式 unbalanced parenthesis at position 64
  17. 魔法师元素平衡(C++解法)
  18. android 生成Excel表
  19. codeforces 416E President's Path floyd+D(递)P(推)
  20. C语言技巧:有if时使用likely和unlikely让代码运行更快

热门文章

  1. opencv之解决无法从“cv::Mat”转换为“IplImage”
  2. Eigen教程(6)之高级初始化方法
  3. smtplib python教程_Python基于smtplib实现异步发送邮件服务
  4. Python中的关键字和内置函数
  5. git merge;fork同步集中库代码;a标签返回
  6. Spring Cloud版——电影售票系统七使用 Zuul 构建微服务网关
  7. 隐含社交信任度和基于情感的方法的推荐系统
  8. UIcollectionView 加入尾部视图
  9. sv_labs学习笔记——sv_lab3(System Verilog)
  10. [视频]MAC中如何单独放大文本字体