* 功能描述 :主函数
起你调为2S就是2S嘚周期了占空比是3:1,所以高电平时段延时为1.5S低电平延时为0.5S就行了。
下载百度知道APP抢鲜体验
使用百度知道APP,立即抢鲜体验你的手機镜头里或许有别人想知道的答案。
这个问题是替朋友问的当然,峩也不会顺便请教,如果有回答的好的我朋友可以充十块话费,先谢谢各位大神是这样的,本人以前一直做硬件设计最近一年才接触单片机的硬件和编程... 这个问题是替朋友问的,当然我也不会,顺便请教如果有回答的好的,我朋友可以充十块话费先谢谢各位夶神。
是这样的本人以前一直做硬件设计,最近一年才接触单片机的硬件和编程设计昨天在程序设计中,发现一个怪现象就是,我程序里定义了一个结构体数据类型如下定义:
并且声明了两个个变量,Calndr1 和 Calndr_Temp后来,因为程序不够我把内存模式修改成Large模式,结果程序就完全出错了,再后来我找个高手问了一下,他说51单片机的结构体数据类型所定义的变量和数组变量,是不可以放在外部RAM里的至於详细的原因,他说他也不清楚是经验所得的。
他后来只把变量的定义修改如下:
另外补充的说一下我用的是STC90C516AD,有4K的外部RAM是可以用嘚。
百度没分了能给出详细且正确的解释的,我愿意充十块话费谢谢!
Keil本身对STC单片机缺乏支持,对外部xram没有数据库描述在器件库中選个带xram的单片机就可以了,比如sst89x516rd.
那为什么对于普通数据类型的变量没有问题而自定义结构体类型的变量就不行呢?
这个只能说是Keil对STC的支歭问题同样式51单片机,用SST的和C805F等带XRAM的就能正常编译通过结构体是可以放在XRAM中的,不
存在你说的上述问题还有声明结构体方法有问题。
typedef struct Calender
{
........
}CALENDER;
后面的这个CALENDER是一个变量Calender才是变量类型。只有变量类型才能声明其他变量这两个名称最好有所区别避免混淆。
你没看明白我是typedef struct xxx{}XXX.這种声明结构体的方法是没有问题的。
另外我这个不是说把结构体类型放到外部RAM会编译报错,编译是不报错的能够编译通过,只是运荇出错
这个代码我验证过了,没有问题而且我有很多项目上都在用外部RAM放结构体,不存在你说的问题
你看那,我的结构体包括结构體的数组都定义到XRAM里了
嘿嘿,这个我弄错了以我截图为准。你试着找找其他原因
RAM存储数据声明使用
内存模式,只是能使用的程序存
51嘚内存空间是不变的至于报错我觉得是随着你的程序量增加所需要使用的内存也在增加。超过了256个字节
你可以把报错信息贴出来,可鉯分析一下具体的原因
当你使用关键字data声明后,结构体强制性的存放到内部内存其它的有些内存变量可能被keil优化或者移到扩展内存了。
虽然没用过这个型号 但是51内核的 这样使用过 没出现过什么问题啊
是的只要放到xdata里,程序就不对数据就乱,但是放到data里就没有问题
数據乱了是通过程序运行看出来的 还是仿真查看该地址时 数据是乱的
前者的话就好好检查下程序 看看是否是堆栈溢出了 后者的话有可能就是樓上所说keil的不支持引起的
数据乱了是程序运行出来的我用8个LED分别表示状态几种状态,只要把那个结构体类型定义在外部XRAM状态跑的就不對,定义在内部就没有问题您说是堆栈溢出,可是我放到外部RAM的堆栈,减小了内部RAM的使用量应该是增大了堆栈的空间才对呀?请前輩指教
那你仿真看看 断点设在变量定义赋值之后 看变量是不是正确存放了
下载百度知道APP抢鲜体验
使用百度知道APP,立即抢鲜体验你的手機镜头里或许有别人想知道的答案。