KEIL中的一些细节
1。KEIL中的指针:
基于存储器的指针:数据类型 [指向存储区] *[ 指针存储区]指针变量
char xdata * px //px本身存在于自动分配的空间,一般位于data中,指向的内容位于xdata char xdata * data px //px本身存在于data空间,指向的内容位于xdata data char xdata * px =char xdata *data px;
data空间:内部ram 0~128字节
xdata空间:外部扩展ram, 用movx 及间址访问
一般指针两种类型:默认是万能的,分配三个字节空间
指针本身地址 |
+0(0X05) |
+1(0X06) |
+2(0X07) |
存放内容 |
数据类型 |
高8位数据 |
低8位数据 |
例:OSTCBCur(0X05=0X000014)
MOV R0,#LOW (OSTCBCur) //取得指针的最低地址;R0=0X05
2。汇编相关
$NOMOD51 // disable predefined registers//禁能预定义的 寄存器 #include <reg52.h> // include CPU definition file (for example, )// 包含 CPU 定义文件(例如,) EXTRN CODE (code_symbol) ; May be a subroutine entry declared in ; CODE segments or with CODE directive. ; 可以是在 CODE 段中或用伪指令CODE ; 声明的子程序入口 EXTRN DATA (data_symbol) ; May be any symbol declared in DATA segments ; segments or with DATA directive. ; 可以是在 DATA 段中或用伪指令 DATA ; 声明的的任意符号。 PUBLIC data_variable ; 此处,你可以把符号输出到其它模块 PUBLIC code_entry ; 此处,你可以把符号输出到其它模块 NAME ?C_STARTUP ;// NAME 模块名 ;与文件名无关 ?C_C51STARTUP SEGMENT CODE ; 把 ?C_C51STARTUP 定义在CODE 中。 ?STACK SEGMENT IDATA ; 把 ?STACK 定义在IDATA RAM 中。 RSEG ?STACK ;//切换到 ?STACK 段 DS ;//保留一个字节 EXTRN CODE (?C_START) PUBLIC ?C_STARTUP CSEG AT ;程序绝对起始位置0000
定义重定位段 必须按照C51 格式定义汇编遵守C51 规范段名格式为 : ?PR?函数名?模块名
;声明引用全局变量和外部子程序 注意关键字为EXTRN 没有E
全局变量名直接引用
无参数/无寄存器参数函数 FUNC
带寄存器参数函数 _FUNC
重入函数 _?FUNC
3.keil的printf默认为向串口输出.在一些特定的时候需要软件调试一下我们的程序是否有问题,我们需要使用printf()来输出过程数据做跟踪可是在keil里我发现直接就写上printf("start debug");根本不能输出到终端窗口,在程序的初始化部分往串口数据寄存器SBUF里放一个字符来起用终端显示;
如:
SBUF=' ';
printf("Welcome to debug software!\n");
原因:由于不管是中断还是查询TI标志的方法,都会检测TI,因此首次发送必须置位TI标志,使串口开始发送“在程序的初始化部分往串口数据寄存器SBUF里放一个字符来起用终端显示;”方法最终作用也就是把TI置1,改成TI=1;来启动发送也是一样的
KEIL中的一些细节的更多相关文章
- KEIL中启动文件详解(汇编语言)
原文在此:http://www.cnblogs.com/mddblog/p/4920063.html 概述 在嵌入式系统中,启动文件是整个系统非常关键的部分,它会进行一些底层的初始化,构建程序运行必要 ...
- keil中出现Undefined symbol FLASH_PrefetchBufferCmd (referred from main.o)等问题解决办法
在keil中仿照别人的程序写了RCC初始化的程序,编译后出现以下问题 .\obj\pro1.axf: Error: L6218E: Undefined symbol FLASH_PrefetchBuf ...
- keil中的串口调试:
keil中串口的虚拟调试信息在通过View-serial windows-#usart1/2/3/4/debug(printf)可以看到.当然也可以通过虚拟串口VSPD+串口调试助手在外部实现,方法如 ...
- Keil中的code关键字
一般说来,我们在C语言中定义的每一个变量初始化后都会占用一定的内存(RAM)空间.但是在keil中提供了一个特殊的关键字“code”,这个关键字在标准C中是没有的.其语法举例如下: unsigned ...
- 关于keil中data,idata,xdata,pdata,code的问题
转自关于keil中data,idata,xdata,pdata,code的问题 从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类 ...
- 在KEIL中的模块化程序写法
在使用KEIL的时候,我们习惯上在一个.c的文件中把自己要写的东西按照自己思路的顺序进行顺序书写.这样是很普遍的写法,当程序比较短的时候比如几十行或者一百多行,是没有什么问题的.但是当程序很长的时候, ...
- 在keil中使用Astyle格式化你的代码的方法
一个好的程序,不仅要有好的算法,同时也需要有良好的书写风格.写出好的算法不容易,但是好的代码风格却并不困难.提到格式化代码,Astyle是一个不能错过的工具,它可以方便的将程序代码格式化成自己想要的样 ...
- keil中for循环变量递减,无法跳出循环的问题
定义j时应注意其变量类型char,此循环当j=0时,再执行一次则keil中j=0XFF,而不是-1,所以无法跳出循环.但在vc6.0中是可以跳出循环的. 解决办法如下:不能让j的值为负数 uchar ...
- keil中使用_at_绝对地址定位
使用_at_关键字对存储器进行绝对地址定位程序如下: #include<reg51.h> ] _at_ 0x8000; main() { LED_Data[] = 0x23; } 在kei ...
随机推荐
- BZOJ3412: [Usaco2009 Dec]Music Notes乐谱
3412: [Usaco2009 Dec]Music Notes乐谱 Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 35 Solved: 30[Sub ...
- MongoDB开发学习(1)开天辟地,经典入门
原文地址:http://www.cnblogs.com/xumingxiang/archive/2012/04/08/2437468.html 如果你从来没有接触MongoDB或对MongoDB有一点 ...
- windows下MongoDB的安装及配置
http://jingyan.baidu.com/article/d5c4b52bef7268da560dc5f8.html 使用MongoVUE链接本地mongodb 基本用法见这里:http:// ...
- Spring MVC中各个filter的用法
转载:http://blog.csdn.net/qyp1314/article/details/42023725 Spring MVC中各个filter的用法 2014-12-19 09:08 105 ...
- Mysql auto_increment 重新计数(让id从1开始)
当清空一个表的时候,重新插入数据,发现auto_increment属性的字段计数不是从1开始的时候,可以使用以下命令 方法一 delete from test; alter table `test ...
- HDFS Federation与HDFS High Availability详解
HDFS Federation NameNode在内存中保存文件系统中每个文件和每个数据块的引用关系,这意味着对于一个拥有大量文件的超大集群来说,内存将成为限制系统横向扩展的瓶颈.在2.0发行版本系列 ...
- (转)iOS5:[UIDevice uniqueIdentifier]的替代方案
背景: 大多数应用都会用到苹果设备的UDID号,UDID通常有以下两种用途: 1)用于一些统计与分析目的:[第三方统计工具如友盟,广告商如ADMOB等] 2)将UDID作为用户ID来唯一识别用户,省去 ...
- myPagination5.0 分页简单实例
记得最開始做分页採用的ThreadLocal对象,后面发现有有了更简便的方法,直接使用插件,不但简单.并且高效! 採用的版本号为myPagination5.0,可以解决client多条件无刷新动态分页 ...
- 七、Solr服务部署和安全
概念: 我们知道,Solr是以webapp的形式运行的,那么我们只需要把Solr.war文件部署到web容器中,便可以运行了,但是因为需要连接数据库做索引并且提供线上的服务调用query接口,那么So ...
- css让div水平垂直居中
示例1: .div1{ width:200px; height:300px; border:1px solid #000; position: relative; } .div2{ width: 40 ...