发 帖  
原厂入驻New
[问答] PIC18F25J50大阵列问题
130 OLED I2C
分享
嗨,我试图控制一个128×64 oled屏幕的基本成功,并遇到了一个数组的问题。我需要一个保存1024字节值的缓冲数组通过I2C将其内容发送到屏幕。I2C通信工作正常,但当我从缓冲数组中删除const关键字时,它找不到合适的值,PIC只发送0x8F(用Salea Logic分析)。我附带了项目(pic18_i2c.X.zip),可以在缓冲区数组初始化之前输入const关键字进行测试。这一个无效:如果我修改并添加const关键字,那么这一个有效:两种情况下其余代码相同:工具链:PIC18F25J50MPLAB-X 3.51XC8 1.31Pherip用PICKit2Attachements上传的erial Library 2.00rc3Hex:const.zip-Logic捕获,当用常数数组(在程序内存中的数组)编译时使用withoutconst.zip-Logic捕获,当用非常数数组(在数据部分中的数组)编译时使用pic18_i2c.X.zip-projectconst.jpg-d上的结果当数组为常数时,当数组不常量时显示结果
Zip(27.06 KB)-下载42次PIC18FI2C.X.Zip(154.95 KB)-下载44次
0
2020-4-13 08:11:37   评论 分享淘帖 邀请回答

相关问题

11个回答
自从我使用XC8编译器已经很久了,但是您可能会遇到这样的问题,即“const”值存储在ROM中,而非“const”值存储在RAM中。XC8编译器可以很好地计算出要使用的正确代码(获取表单RAM和ROM需要不同的指令),但我注意到,在“buf”指针声明中没有const限定符。因此,编译器可能试图读取RAM时,它应该是从ROM读取。只是猜测…苏珊
2020-4-13 08:28:34 评论

举报

无论BUF指针是否“const”,它都应该工作。当表位于ROM(具有const Qualfor)时,用TBLPTR=BUF、TBLRD和TabLAT访问。当表位于RAM中时,用FSRX=BUF和INDFx访问。
2020-4-13 09:00:59 评论

举报

是的,它应该工作摊位的情况下,但它不是工作例外,当它是建立没有const关键字。这就是我提出问题的反常原因。我根本看不出我做错了什么,这就是我在第一篇文章中附加完整项目的原因。也许是我要说的一些配置单词或者我错过了什么。我试着关闭优化来构建,编译的十六进制文件更大,但是我没有看到输出有任何变化。我禁用了看门狗计时器,看看它是否是异常的根源,但是发生了同样的事情。
2020-4-13 09:08:33 评论

举报

在第一个帖子中有一个项目zip文件,它包含一个带有所有链接器和映射文件的内置版本。在这个项目的状态下,我不使用中断,为什么我要处理ISR?
2020-4-13 09:44:34 评论

举报

嗨,如果你使用const,编译器会自动把数组放入FLASH。如果你不放const,编译器会把数组放入RAM。两个版本之间有什么变化是访问Flash或访问RAM的时机。我会在线性之后使用断点进行调试。实际上我会创建一个全局的变量数据,并在调试模式(监视窗口)中添加行和检查数据值,看看发生了什么……
2020-4-13 09:54:38 评论

举报

嗨,你能告诉我如何在模拟器中调试它吗?如果我试着调试,它会在步骤中挂起(一直等待)。有没有办法在这一点上发送一个ACK到模拟器?
2020-4-13 10:11:22 评论

举报

如果它卡在I2C1中,那么您的I2C总线有问题。因为它是模拟器,它可能不完全支持I2C外围设备。您检查了哪个位导致该函数指示“非空闲”吗?你不能发送一个ACK直到它空闲。
2020-4-13 10:24:11 评论

举报

嗨,这个步骤只停留在模拟器中,在真实的硬件中,它发送垃圾并且正常地返回ACK(正如在第一篇文章的附件中可以看到的)。所以我想用I2C模拟项目并不容易(或者说不可能)。也许如果我注释掉所有的IdleI2C1。()命令,它可能会跨过…
2020-4-13 10:39:09 评论

举报

你好,bbb,忘记模拟器……真实生活=真实硬件。你在模拟器中看到的任何问题都更有可能成为模拟问题(模拟器错误)而不是真正的硬件问题。所以你可能会白白浪费时间……
2020-4-13 10:55:04 评论

举报

嗨,通过真正的硬件调试(开始时很痛苦,因为MPLAB-X不能连接/不能获得错误消息),我发现问题不在于指针,而在于数据本身。应该是。但是,如果它不是常数,那么它只是垃圾,在I2C行上正确地发送。所以真正的问题是,如果它位于数据区段,为什么编译器要从我的无符号数组中产生垃圾?
2020-4-13 11:09:20 评论

举报

嗨,我终于可以解决这个问题了,我的显示终于工作了。它是两个小步骤,导致成功。1)将XSIT配置为OFF2)将数组创建为静态的,在用数据填充缓冲区数组之后,不必用DATANOW填充它。很好,谢谢大家!PS:如何将这个主题标记为已解决?我不能把我的答案标记为解决方案…
2020-4-13 11:17:48 评论

举报

只有小组成员才能发言,加入小组>>

108个成员聚集在这个小组

加入小组

创建小组步骤

关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表