STC - 同时外挂扩展RAM和12864时, C库函数失效的问题

news2024/9/30 17:29:27

文章目录

    • STC - 同时外挂扩展RAM和12864时, C库函数失效的问题
    • 概述
    • 笔记
    • 原理图 - 外挂XRAM
    • 原理图 - 12864
    • 错误现象
    • 总结
    • END

STC - 同时外挂扩展RAM和12864时, C库函数失效的问题

概述

在写STC15实验箱4的出厂测试程序.
发现memset(buf, 0, 256)一片256字节的xdata内存时, 无法将这片内存全部清0, 只清了不到0x20个字节.
其他标准C库函数e.g. sprintf, strlen 也不好使. 这咋玩啊?

后来通过换件法得知, 是外挂的32KXRAM和外挂的ST7920-12864都在使用P0和P2口引起的问题.
STC官方整出这样的原理图, 真是败笔.
怪不得我买的其他STC官方板子, 都没有焊接外挂RAM的芯片…

尝试分析和折中解决这个问题.

笔记

看看官方原理图关于外挂XRAM和ST7920-12864这块.

原理图 - 外挂XRAM

在这里插入图片描述
XRAM用到了P0, P2, P4.2, P4.4, P4.5,

原理图 - 12864

在这里插入图片描述
可以看到按照官方原有连接, 用到了P0, P2
如果是并口通讯, 就用到P0, P2
如果是串行通讯, 就用到P2

那理论上, 访问xdata时, 就会动到P0, P2.
那保不准12864的上的P0, P2就会不是高阻状态, 如果12864给了P0, P2新的值, 就会对xdata的访问造成错误.

错误现象

初始化外部RAM时, 开始用了 ExternalRAM_enable();
只使用外部RAM, 内部扩展RAM范围(0 ~ 0x6ff)不用.
当初始化buf时, 从memset可以看到, 只清了不到0x20个字节.

#define TMP_BUFFER_LEN 256
// ...
u8 xdata g_tmp_buf[TMP_BUFFER_LEN];
// ...
	BUS_SPEED_1T();	//1T  2T  4T  8T	3V@22MHZ用1T会访问错误
	
	ExternalRAM_enable(); // 只使用外部RAM, 不使用内部扩展RAM(0x0 ~ 0x6ff)
	
	EA = 1;
	
	my_memset(g_tmp_buf, 0, sizeof(g_tmp_buf));

在这里插入图片描述
现在只允许了外部RAM操作, 还没执行memest
将g_tmp_buf放到memory窗口中, 查看到的内容是随机的乱码.

单步进入my_memset, 观察清buf前后, g_tmp_buf在memory窗口中的内容差别.
在这里插入图片描述
步过C库函数 memset, 本来要清0x100个字节, 但是只清了不到0x20个字节.
将LCD-12864硬件摘掉, 再执行这个测试, 可以看到清掉了0x100个字节, memset是正常的.
这说明, 12864连接到P0, P2口时, 对xdata的访问是有影响的.

STC的资料上有说到, 如果使能内部扩展RAM:
当xdata地址小于0x6ff, 会使用内部扩展RAM.
当xdata地址大于0x6ff时, 会自动使用片外口扩展RAM.

尝试使能片内扩展RAM, 再试试memset操作.
在这里插入图片描述
可以看到, 是可以正常清掉xdata中定义的buf.

总结

如果外挂的12864和外扩的XRAM都使用P0, P2, 那一定是有冲突的.
如果是自己画的新板子, 可以考虑将12864用串行通讯, 将串口通讯用到的几个引脚用闲散的GPIO来代替, 然后使用SPI的方式来通讯.

如果是使用已有的板子(e.g. 买的或自己做的STC15实验箱4), 硬件没办法改. 此时只能是尝试使能内部扩展RAM.
当然, 如果xdata的地址超过0x6ff时, 还是会引起xdata操作失败.
如果非要使用32KB的外挂XRAM, 必须要摘掉12864.
如果非要使用12864, 那么XRAM就只能使用内部的扩展XRAM地址范围(0x0~0x6ff), 外部挂的32KBXRAM就没法用了.
因为STC使能内部扩展RAM后, 如果地址超出0x6ff, 就会自动使用外接的32KB的XRAM, 所以不需要特意执行ExternalRAM_enable().
ExternalRAM_enable()这个函数就是废的, 没有需求调用这个函数.

END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/54990.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

生产型企业如何搭建进销存管理系统?低代码平台了解一下

生产型企业在激烈的市场竞争中充分意识到信息化管理的重要性,但限于资金压力无法购买或开发大型的ERP 系统整合企业管理的小型企业而言,比较多的采用部署相对独立的小型信息系统提高管理信息化水平,常见的包括采购管理系统、销售管理系统、库…

Ubuntu开机自动挂载SD卡到指定挂载点并将Docker默认存储路径改为SD卡

Ubuntu开机自动挂载SD卡到指定挂载点并将Docker默认存储路径改为SD卡查看磁盘信息查看磁盘原挂载点永久开机自动挂载分区——修改文件/etc/fstab应用挂载修改docker默认存储路径查看磁盘信息 sudo fdisk -l如果磁盘太多可以用 sudo fdisk -l | grep GiB只看以GB为单位的磁盘&…

【D3.js】2.2-给 Circle 元素添加属性

title: 【D3.js】2.2-给 Circle 元素添加属性 date: 2022-12-02 15:19 tags: [JavaScript,CSS,HTML,D3.js,SVG] 上章节中虽然添加了circle,但是因为缺少某些属性设置而显得不可见,在此章节中将学习circle的cx、cy、r属性。 一、学习目标 circle的x坐标与…

带你玩转序列模型之NLP与词嵌入(一)

目录 一.词汇表征 二.使用词嵌入 三.词嵌入的特性 四.嵌入矩阵 五.学习词嵌入 一.词汇表征 上周我们学习了RNN、GRU单元和LSTM单元。本周你会看到我们如何把这些知识用到NLP上,用于自然语言处理,深度学习已经给这一领域带来了革命性的变革。其中一…

嵌入式 ADC使用手册完整版 (188977万字)(附源码详细篇)

嵌入式 ADC使用手册完整版 (188977万字)💜(附源码详细篇)💜【1】ADC简介【2】ADC主要特征【3】ADC引脚和内部信号【4】ADC 模块框图【5】ADC校准(CLB)【6】ADC 时钟【7】ADCON 开关【…

Gomodule和GoPath

GoLang生态系统 什么是GOROOT GOROOT 是环境变量,它的值是 Golang 安装包路径 什么是GOPATH GOPATH 是Golang 1.5版本之前一个重要的环境变量配置,是存放 Golang 项目代码的文件路径。 可以通过go env命令查看 GOPATH目录 进入GOPATH目录&#xff…

【Docker】redis分片集群搭建:3主3从,容错迁移,扩缩容

Docker是基于Go语言实现的云开源项目。Docker的主要目标是**“Build,Ship and Run Any App,Anywhere”**。也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运…

2022 ios APP最新iOS开发上架测试教程

2022 ios APP最新开发测试教程 本文详细介绍最新的在windows上进行ios app开发编译打包安装到手机测试的完整流程。介绍ios开发经常遇到的问题和解决方法,包括ios开发证书,ios开发描述文件等。 2.Apple开发常用的三个网址: 开发者中心&#x…

羚数智能入选 IDC关于中国制造执行系统(MES)的市场2021年度份额报告

近日,国际权威市场研究机构IDC发布《中国制造业 MES 市场分析及厂商份额,2021》,引起行业关注。 成立短短一年多,羚数智能作为国产生产运营管理软件年度代表企业(Vendor Who Shaped the Year)入选报告&…

LabVIEW比较LabVIEW类对象 LabVIEW接口

LabVIEW比较LabVIEW类对象 LabVIEW接口 使用比较功能比较LabVIEW类对象。 如比较同一个类的两个对象,例如,卡车类的两个对象,LabVIEW将比较类层次结构中所有层次的数据,类似于LabVIEW比较由簇组成的簇。 如比较不同类的两个对…

Coremail邮件安全:如何防范校园邮件新威胁

11月23日,Coremail举办《校园安全交流防护会暨新技术应用分享》直播,Coremail邮件安全解决方案专家刘骞,从目前面临的邮件安全防护难点、盗号威胁等角度提出针对教育行业的有效邮件安全解决方案。 教育行业面临邮件安全问题 问题1&#xff…

[附源码]Python计算机毕业设计Django健身房预约平台

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

【软件测试】身为测试人,经常背锅的我该咋办?

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 当产品上线的或者开…

Live800:智能客服时代,智能营销机器人有哪些套路?

流量已进入存量时代,大量企业为了活下去陷入竞争“内耗”。 面对更挑剔的客户需求、更精细的运营挑战,企业客户服务场景从幕后走向台前,脱离了传统的、被动的消费语境,成为完成客户体验闭环、主动触达客户、甚至成为驱动企业“第…

[附源码]Python计算机毕业设计SSM开放式实验室预约系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

基于无线通信模块对焦炉发讯装置的设计

现有的交换机控制系统多采用PLC控制系统,当焦炉出现故障,需要交换机停止加热时,需有人工进行干预时存在滞后性;以上操作需要操作人员具有良好的心理素质和过硬的技术能力,存在误操作的可能。当交换机本身及外部设备发生…

Lambda表达式

注:函数式接口和Lamda的区别 函数式接口:即只有一个抽象方法的接口,而这一个抽象方法的接口可以由Lamda表达式来实现。 1.Lambda表达式 1.1 省略规则 参数类型可以省略方法体只有一句代码时大括号和唯一一句代码的分号可以省略方法只有一…

Xilinx IOBUF 的用法

Xilinx IOBUF 的用法 文章目录Xilinx IOBUF 的用法一、概念1. 基本概念2. 硬件结构2.1 IOBUF2.2 OBUFT二、实例三、参考文献一、概念 1. 基本概念 **应用场景:**在vivado中,连接的管脚的信号一般都会自动添加OBUF或IBUF。但是对于inout类型的接口&#…

腾讯云发布智慧员工管理方案,支持组织360度协作

提升组织活力和协作效率是企业打造自身竞争力的关键因素。12月1日,腾讯云发布智慧员工管理方案,融合腾讯电子签、腾讯乐享、腾讯微卡、腾讯云HiFlow、数据连接器等多款产品,打造高效、安全、共享、低碳的组织协同网络。 腾讯云副总裁答治茜表…

MyBatis-Plus配置之基础配置(SpringBoot)

系列文章目录 Mybatis-Plus知识点[MyBatisMyBatis-Plus的基础运用]_心态还需努力呀的博客-CSDN博客 Mybatis-PlusSpringBoot结合运用_心态还需努力呀的博客-CSDN博客MyBaits-Plus中TableField和TableId用法_心态还需努力呀的博客-CSDN博客 MyBatis-Plus中的更新操作&#x…