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中的一些细节的更多相关文章

  1. KEIL中启动文件详解(汇编语言)

    原文在此:http://www.cnblogs.com/mddblog/p/4920063.html 概述 在嵌入式系统中,启动文件是整个系统非常关键的部分,它会进行一些底层的初始化,构建程序运行必要 ...

  2. keil中出现Undefined symbol FLASH_PrefetchBufferCmd (referred from main.o)等问题解决办法

    在keil中仿照别人的程序写了RCC初始化的程序,编译后出现以下问题 .\obj\pro1.axf: Error: L6218E: Undefined symbol FLASH_PrefetchBuf ...

  3. keil中的串口调试:

    keil中串口的虚拟调试信息在通过View-serial windows-#usart1/2/3/4/debug(printf)可以看到.当然也可以通过虚拟串口VSPD+串口调试助手在外部实现,方法如 ...

  4. Keil中的code关键字

    一般说来,我们在C语言中定义的每一个变量初始化后都会占用一定的内存(RAM)空间.但是在keil中提供了一个特殊的关键字“code”,这个关键字在标准C中是没有的.其语法举例如下: unsigned ...

  5. 关于keil中data,idata,xdata,pdata,code的问题

    转自关于keil中data,idata,xdata,pdata,code的问题 ‍从数据存储类型来说,8051系列有片内.片外程序存储器,片内.片外数据存储器,片内程序存储器还分直接寻址区和间接寻址类 ...

  6. 在KEIL中的模块化程序写法

    在使用KEIL的时候,我们习惯上在一个.c的文件中把自己要写的东西按照自己思路的顺序进行顺序书写.这样是很普遍的写法,当程序比较短的时候比如几十行或者一百多行,是没有什么问题的.但是当程序很长的时候, ...

  7. 在keil中使用Astyle格式化你的代码的方法

    一个好的程序,不仅要有好的算法,同时也需要有良好的书写风格.写出好的算法不容易,但是好的代码风格却并不困难.提到格式化代码,Astyle是一个不能错过的工具,它可以方便的将程序代码格式化成自己想要的样 ...

  8. keil中for循环变量递减,无法跳出循环的问题

    定义j时应注意其变量类型char,此循环当j=0时,再执行一次则keil中j=0XFF,而不是-1,所以无法跳出循环.但在vc6.0中是可以跳出循环的. 解决办法如下:不能让j的值为负数 uchar ...

  9. keil中使用_at_绝对地址定位

    使用_at_关键字对存储器进行绝对地址定位程序如下: #include<reg51.h> ] _at_ 0x8000; main() { LED_Data[] = 0x23; } 在kei ...

随机推荐

  1. SPOJ694 -- DISUBSTR 后缀树组求不相同的子串的个数

    DISUBSTR - Distinct Substrings   Given a string, we need to find the total number of its distinct su ...

  2. python部落刷题宝学到的内置函数(二)

    感觉到刷题宝有一个好处,也许也不是好处,它的答案必须是真正输出的值,也就是说应该输出字符串aaaa的时候,答案必须写成界面上返回的值,即'aaaa'.有利于真正记忆返回值类型,但是....太繁琐了 1 ...

  3. Apache-common项目提供的工具

    ---- MD5加密与生成UUID例子(依赖于commons-io.jar):begin ------------------------------------------------------- ...

  4. s16_day01

    一.基础 1.编码 ascii-->GB2312-->GB18030-->GBK-->unicode-->UTF8可变长 2.数据类型 int,long,float,co ...

  5. SVN权限修复

    Description : Commit failed (details follow): Suggestion : The operation could not be completed. Tec ...

  6. SurfaceView类透明背景设置

    将SurfaceView背景设置为透明,主要添加以下几句话就可以了: 在SurfaceView创建后设置一下下面的参数: setZOrderOnTop(true); getHolder().setFo ...

  7. hadoop部署工具与配置工具

    https://github.com/xianglei/phpHiveAdmin 随着Hadoop的推出,大数据处理实现了技术上的落地.但是对于一般的公司和开发者而言,Hadoop依旧是一个陌生或者难 ...

  8. sys--system-sysdba-sysoper用户区别

    当Oracle 数据库安装完毕后,系统会自动创建sys和system这两个帐户.1.sys :缺省密码为CHANGE_ON_INSTALL ,且被授予DBA角色system :缺省密码为MANAGER ...

  9. VLV INDEX

    Normally, when the Directory Server conducts a search, the server looks through the entire entry for ...

  10. mybatis 与 反射

    Mybatis是个优秀的ORM框架,所以它的反射层一定不会让我们失望 图比较大,可以开新页面查看 可以看到,Mybatis对这一块抽象的比较复杂,我们可以看到有几个比较主要的部分:Reflector. ...