完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
嗨,我需要改变一个const数组变量的值。我必须声明变量为const,因为我需要使用的数组有4736个字节。问题是,在程序代码中,我需要给数组的某些元素分配一个不同的值。谢谢。
|
|
相关推荐
18个回答
|
|
|
此外,它是缓慢的。在闪光灯磨损之前,你可以做的次数有限。
|
|
|
|
|
|
它只是你需要改变的一个特殊元素吗?如果是这样,只需处理它作为一个特殊的情况,并把它放在EEPROM中。
|
|
|
|
|
|
也许Microchip即将发布PIC18F47 K42,这将有更多的内存。否则,切换到PIC24F。
|
|
|
|
|
|
“const变量”是一个矛盾修饰词——它是不变的(不变的只读)还是正在变化(变量读/写)?
|
|
|
|
|
|
不完全是这样。假设他确实在flash中更改了值,那么它可能需要一个易变的econst但是从术语上讲,它不同于#define常数。
|
|
|
|
|
|
这是“作业”作业吗?
|
|
|
|
|
|
不完全是这样。假设他确实在flash中更改了值,那么它可能需要是一个volatileconst但是从术语上来说,它和define常量是不同的。你的意思是这样的吗:这同样是一个矛盾修饰符——使编译器不稳定。DCOST告诉编译器值是只读的,不能写入?非常混乱!还是我误解了?
|
|
|
|
|
|
“只读”是从软件的角度出发的;这并不意味着对象不能通过软件以外的方式改变。考虑UART的数据接收寄存器。它显然是只读的,但是它由于软件控制之外的力而改变了值。
|
|
|
|
|
|
也许会迷惑。但是C是由委员会设计的,而Flash中的CONST则是SPEC不覆盖的设计选择。这是一个演进(C18使用ROM指定符)在编译器上没有在Flash中放置变量,可以给一个常量分配一个非常量指针,并改变它。知道这些事情是可能的,将有助于您在它们发生时进行调试。
|
|
|
|
|
|
谢谢,所有好的信息/答案(也是我真正已经理解的东西)但是我认为我不太理解--我在取笑可变常量的语言学--这个想法绝对是矛盾的。微笑:
|
|
|
|
|
|
“const”是一个C关键字,粗略的意思是“只读”。例如:这告诉编译器它不应该改变函数中的变量。这对程序员来说并不重要,如果他不想改变它的话。这对于编译器来说对于优化来说可能是非常重要的。无论如何,人们使用它。现在你用不同的意思呼吸“const”,并说它的意思是“位于闪光灯”。显然,这打破了你作为大图书馆的一部分所带来的dothOththTyg()功能。这样做不好,也不能允许。因此,编译器将尽其所能地在“flash”和“read-.”之间选择“const”的含义。这让程序员在任何特定的上下文中猜测“const”的真正含义。您认为这是与单独的“rom”属性相比的一种演变,单独的“rom”属性明确表示“flash”,而“const”关键字保留标准的C含义。
|
|
|
|
|
|
我说它进化了。我没有评论它的优劣势。它存在,我们作为程序员必须理解WAT的后果是什么。
|
|
|
|
|
|
我认为“进化”并不总是意味着改进。
|
|
|
|
|
|
这是一种权衡。在几乎所有的情况下,XC8中的“const”都会做你想做的事情。不能在文件范围内创建常量RAM数组不是我想要的,并且它比必须使用非标准关键字污染我的代码要好。
|
|
|
|
|
|
谢谢大家!最后,我声明了一个易失性的const变量,然后我使用了在MCC内存代码中实现的FLASHWORKEDYBEL函数。
|
|
|
|
|
|
你不必这么做。您只需创建一个“const”数组,那么它完全取决于编译器想要在Flash或RAM中分配它。这就是C标准所说的。如果你确实想在闪存中分配一些东西,或者特别在RAM中,或者特别在某些特定的银行中,或者特别在DMA可以访问它的地方,你只需要使用一些非标准的东西(因为闪存RA的标准中没有任何内容)。关于“代码污染”这样的机制是完全不合理的。
|
|
|
|
|
|
Hi,1/我的理解是“const”标记仅仅意味着用此标记声明的变量只能用于表达式的右侧。这是检查编译器的非常简单的事情;=)2/在C语言中,“const”的位置没有限制,甚至不知道内存技术。因此const可以位于RAM或FLASH中(它可能需要特殊的属性或声明)。事实上,如果您在PC上学习C语言,const总是在RAM中。在微控制器上,编译器通常将const分配给FLASH内存,但这只是默认的选择。编译器编译器的。应该有办法在RAM中定位const……如果需要的话,对于非const变量也是相同的,它们也可以位于FLASH或E2PROM中……但是非常慢,而且用户必须使用正确的写/擦除算法来执行这个操作,因为C编译器同样没有知识。记忆技术
|
|
|
|
|
|
这引出了一个关于所有这一切的问题:当使用XC8作为编译器时:Ifconst作为修饰符将值放入ROM中,并且还标记为只读时,编译器假设值不会改变,因此(可能)只读取值一次,与由volatile修改的值相比这会导致编译器每次重新读取值(假设它可能改变)?组合挥发性和常量有什么影响(如果有的话)?编译器是否将值存储在ROM中,但每次从ROM重新读取它?只是好奇,如果有人知道答案或可以测试他们。我意识到我已经简化了挥发性修饰剂的作用,只是为了保持这个简短。
|
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
473 浏览 0 评论
5793 浏览 9 评论
2334 浏览 8 评论
2224 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3530 浏览 3 评论
1124浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1095浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
873浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
475浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 02:09 , Processed in 2.048534 second(s), Total 106, Slave 89 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1603