[技术问答]

牛版主,新唐N76E003的XRAM怎么用C操作啊?

[复制链接]
2213|12
手机看帖
扫描二维码
随时随地手机跟帖
xuanhuanzi|  楼主 | 2018-11-29 12:19 | 显示全部楼层 |阅读模式
手册只给了用汇编操作的方法,不过大家都是用C的,有没有什么关键字或者方法直接用C实现操作。比如怎么直接把变量定义到该位置。
xuanhuanzi|  楼主 | 2018-11-29 12:20 | 显示全部楼层
下面是官方的例子,除了汇编,还有其他方法使用C操作吗?
#include <stdio.h>
#include "N76E003.h"
#include "Function_define.h"

/******************************************************
The C file combine with assembler code compiler
  Please always confirm the .c file option mark enable
        "Generate assembler SRC file" and "Assembler SRC file
******************************************************/


/*------------------------------------------------
The main C function.  Program execution starts
here after stack initialization.
------------------------------------------------*/
void main (void)
{

        Set_All_GPIO_Quasi_Mode;
               
#pragma asm
                        MOV DPH,0
                        MOV DPL,0
                       
                        ;Write XRAM
L1:
                        MOV A,DPL
                        MOVX @DPTR,A
                        INC DPTR
                        MOV A,DPH
                        CJNE A,#03H,L1


                        ;read check
                        MOV DPL,#0
                        MOV DPH,#0
L2:
                        MOV A,DPL
                        MOV 11H,A
                        MOVX A,@DPTR
                        CJNE A,11H,L3
                        INC DPTR
                        MOV A,DPH
                        CJNE A,#03H,L2
                        MOV P1,#69
                        sjmp $
                        ;read check end       


                        ;error alart
L3:
                        MOV R0,#05h
                        MOV A,#55H
                        MOVX @R0,A
                        MOV P1,A
                        sjmp $
                       
#pragma endasm
            

}


使用特权

评论回复
xuanhuanzi|  楼主 | 2018-11-29 12:21 | 显示全部楼层
有没有大神研究出方法,分享分享。

使用特权

评论回复
tianxj01| | 2018-11-29 15:04 | 显示全部楼层
xuanhuanzi 发表于 2018-11-29 12:21
有没有大神研究出方法,分享分享。

unsigned char xdata  test[128];
这样就把内存定义到XRAM了。

使用特权

评论回复
xuanhuanzi|  楼主 | 2018-11-29 15:12 | 显示全部楼层
tianxj01 发表于 2018-11-29 15:04
unsigned char xdata  test[128];
这样就把内存定义到XRAM了。

多谢,多谢。

使用特权

评论回复
xuanhuanzi|  楼主 | 2018-11-29 15:20 | 显示全部楼层
多谢各位大侠,我已经查了资料和启动文件。发现启动文件里已经定义了该空间位置。
启动文件位置:\N76E003_BSP_Keil_C51_V1.0.6\Startup\STARTUP.A51
下面是文件的部分内容
;------------------------------------------------------------------------------
;
;  User-defined Power-On Initialization of Memory
;
;  With the following EQU statements the initialization of memory
;  at processor reset can be defined:
;
;               ; the absolute start-address of IDATA memory is always 0
IDATALEN        EQU     80H     ; the length of IDATA memory in bytes.
;
XDATASTART      EQU     0H      ; the absolute start-address of XDATA memory
XDATALEN        EQU     2FFH     ; the length of XDATA memory in bytes.
;
PDATASTART      EQU     0H      ; the absolute start-address of PDATA memory
PDATALEN        EQU     0H      ; the length of PDATA memory in bytes.
其中
XDATASTART EQU 0H ; the absolute start-address of XDATA memory
XDATALEN EQU 2FFH ; the length of XDATA memory in bytes.
721955bff928a7af86.png
就是这里,看好关键字。
XDATA指片外SRAM空间,X指external
所以可以用C51的关键字xdata

使用特权

评论回复
评论
xdlbass 2018-12-7 19:34 回复TA
学习了 
wahahaheihei| | 2018-11-29 19:48 | 显示全部楼层
多谢大仙分享啊。要不然我也不会啊,还以为必须用汇编呢

使用特权

评论回复
wahahaheihei| | 2018-11-29 19:48 | 显示全部楼层
新唐的例程真是的,希望例子提供一下C代码的参考,这样大家心里有底了。

使用特权

评论回复
yiyigirl2014| | 2018-12-7 20:33 | 显示全部楼层
多谢分享,终于知道怎么搞了。

使用特权

评论回复
天灵灵地灵灵| | 2018-12-8 18:12 | 显示全部楼层
用C51的这个关键字还是很强的

使用特权

评论回复
heisexingqisi| | 2018-12-18 18:16 | 显示全部楼层
人才啊,多谢。

使用特权

评论回复
xinxianshi| | 2018-12-23 23:49 | 显示全部楼层
关键字定义。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

152

主题

2055

帖子

2

粉丝