无XDATA单片机,高128字节RAM KEIL中使用。
时间:10-02
整理:3721RD
点击:
这是APP上第一篇帖子,写写昨天在做企业项目中遇到的问题(此问题其实比较小儿科,只是以前没注意)。
这之前先说说STC,其实本人最不想用的就是STC,迫于板子体积受限,STC15W204S的SOP8封装很适合,且有256字节的内存。STM8小体积的居然都是小于等于128内存。
言归正传,说的就是和RAM相关的知识点,有没有想过keil 再使用默认配置SMALL模式,如果定义unsigned char a[100]; 会提示内存空间不足,那怎么解决呢?STC15W204不是有256RAM吗!有人说把keil内存配置改成LARGE,那么编译是通过了,可你会发现程序下载到单片机后无法正确执行,这是行为LARGE模式使用的是外部扩张RAM 即XDATA,汇编为MOVX A @DPTR, 可是STC15W204是没有XDATA的,所以无法执行程序。
其实keil内存配置还应该选SMALL,然后在定义变量的时候如下定义:unsigned char idata a[100]; 加idata修饰就好了。
idata 表示内部RAM高128字节,只能是间接寻址,速度比data里的数据要慢。
就写道这,记录一下而已。
这之前先说说STC,其实本人最不想用的就是STC,迫于板子体积受限,STC15W204S的SOP8封装很适合,且有256字节的内存。STM8小体积的居然都是小于等于128内存。
言归正传,说的就是和RAM相关的知识点,有没有想过keil 再使用默认配置SMALL模式,如果定义unsigned char a[100]; 会提示内存空间不足,那怎么解决呢?STC15W204不是有256RAM吗!有人说把keil内存配置改成LARGE,那么编译是通过了,可你会发现程序下载到单片机后无法正确执行,这是行为LARGE模式使用的是外部扩张RAM 即XDATA,汇编为MOVX A @DPTR, 可是STC15W204是没有XDATA的,所以无法执行程序。
其实keil内存配置还应该选SMALL,然后在定义变量的时候如下定义:unsigned char idata a[100]; 加idata修饰就好了。
idata 表示内部RAM高128字节,只能是间接寻址,速度比data里的数据要慢。
就写道这,记录一下而已。