wang2012216 发表于 2023-6-26 14:34:12

新手请教关于硬件IIC, XDATA问题

勿喷,业余爱好者,从keil转到Linux VS+PlatformIO+sdcc,stc8h8k64u, 遇到个问题,定义变量时用xdata关键字分配到xram,用硬件IIC发送数据就出问题,切换到data或者idata就正常。

请问这个xram和iic寄存器有什么讲究吗?
keil编译时选择memory mode - large xdata,编译出来也正常,keil会自动分配吗?
再请问大佬platformio的sdcc能不能像keil一样编译时指定memory mode - large xdata?

8H8K64U 发表于 2023-6-26 17:18:11

1.IIC寄存器跟XRAM没有特别讲究的,IIC DAM传输就是通过XRAM进行数据收发。
2.keil memory model设置large xdata,变量默认设置到xdata区域。

3.暂时没用过,要坐等其他大佬来解答一下

wang2012216 发表于 2023-6-26 18:31:57

STC8H8K64U 发表于 2023-6-26 17:18
1.IIC寄存器跟XRAM没有特别讲究的,IIC DAM传输就是通过XRAM进行数据收发。
2.keil memory model设置large...

非常感谢,我在keil里面指定内存模式为large没问题,sdcc就不行,用的FwLib STC8这个库,ssd1306就是不显示,把IIC的总线速度设置为32以上屏幕闪一下就没了,如果ssd的驱动函数变量用idata或者data就没问题,IIC总线速度能到3,1.2MHz,我再研究看看

hsrzq 发表于 2023-6-26 20:15:55



如上图所示,sdcc编译mcs51时默认是--model-small,地址总线拢共才只有8位,当然只能访问data和idata了。

wang2012216 发表于 2023-6-26 22:55:07

hsrzq 发表于 2023-6-26 20:15
如上图所示,sdcc编译mcs51时默认是--model-small,地址总线拢共才只有8位,当然只能访问data和idata了。 ...

感谢解惑,请问大佬知道在PlatformIO里怎么配置sdcc编译的时候用large模式吗?

hsrzq 发表于 2023-6-26 23:18:19

wang2012216 发表于 2023-6-26 22:55
感谢解惑,请问大佬知道在PlatformIO里怎么配置sdcc编译的时候用large模式吗? ...

我是外行,不是大佬。我没用过PlatformIO,用的是VSCode+eide+sdcc

熊仔 发表于 2023-7-15 10:50:42

编译选项加上 --model-large
我用VSC+EIDE+SDCC测试


当然也可以加上其他设置大小的选项

熊仔 发表于 2023-7-15 10:51:23

当然也可以加上其他设置大小的选项--model-large --xram-size 8192 --iram-size 256 --code-size 65536

熊仔 发表于 2023-7-15 16:03:29

测试PlatformIO方式
解决方法:
1,新建link_large.py文件,放在和platformio.ini文件同一个目录。
   link_large.py内容:
   Import("env")
   env.Append(LINKFLAGS=["--model-large"])
2.platformio.ini文件修改,增加build_flags = --model-large   
我测试STC8H8K64U板子

platform = intel_mcs51
board = STC8H8K64U
build_flags = --model-large      

lzzasd 发表于 2023-9-23 22:51:08

熊仔 发表于 2023-7-15 16:03
测试PlatformIO方式
解决方法:
1,新建link_large.py文件,放在和platformio.ini文件同一个目录。


版主有时间开个帖吗?讲下VSCode编辑单片机程序的编辑,编译插件什么的
页: [1] 2
查看完整版本: 新手请教关于硬件IIC, XDATA问题