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 ...
随机推荐
- cf509A Maximum in Table
A. Maximum in Table time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- HTTP response codes
面试被问起了413和503,我觉得也是够BT的,能问出这种无聊的问题.很多返回码几乎很难遇到,不过还是把MDN上很好的描述转过来作为一个reference. HTTP协议状态码表示的意思主要分为五类 ...
- HDU_2021——最少RMB问题
Problem Description 作为杭电的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵但是对于学校财务处的工作人员来说,这一天则是很忙碌的一天,财务处的 ...
- openstack 安装
- Mac OS X Shell 脚本和终端命令
系统 重启 Mac OS X: 1 shutdown - r now 关闭 Mac OS X: 1 shutdown now 电源管理/省电 获取当前电源管理设置的信息 1 pmset -g 设置显示 ...
- 禁止浏览器发送referer
有时候我们需要把其他网站的链接爬取到自己网站,比如各种信息集成网站. 有些网站会有防盗链的措施,我们无法“引用”他人链接(这种情况暂时不考虑),如果网站没有防盗链措施,那就恭喜了! 但是,为了不让“被 ...
- MyBatis的简单操作
这里将的是简单的增.删.改.查等基本操作 首先创建java项目,导入相应的依赖包,这里可以参考上一篇博客 1.添加数据 在jike.book.pojo包中,新建java类 JiKeUser.java: ...
- SOFTWARE_INTRODUCE_01
&amp;amp;amp;lt;br data-mce-bogus="1"&amp;amp;amp;gt;&amp;amp;amp; ...
- INSERT command denied to user
问题分析: 网站运行突然出现下面的 MySQL 错误: 645297 [http-88-13] ERROR com.mes.cart.dao.impl.CartDAOImpl - CartDAOImp ...
- 苹果有益让老iPhone变慢以迫使消费者购买新一代的iPhone?
首先,来一组来自谷歌Trends的图片.(谷歌Trends记录了某段时间内相关关键词搜索的次数.) 假设你做数据,那么你应该会有些感觉. 特别是第一幅图,它规律似乎比第二幅更明显,第二幅图仅仅是一个普 ...