搜索
bottom↓
回复: 7

[已解决]flash unsigned char dis_str[] 难道一定要flash吗

[复制链接]

出0入0汤圆

发表于 2008-4-22 21:34:06 | 显示全部楼层 |阅读模式
flash unsigned char dis_str[] 难道一定要flash吗

为什么不能为unsigned char dis_str[]

系百度都好难搜到 flash的意思

出0入0汤圆

发表于 2008-4-22 22:40:30 | 显示全部楼层
flash unsigned char dis_str[]        是将数组定义在FLASH空间中.
unsigned char dis_str[]              是将数组定义在RAM中.

尽管AVR的内部已经配有比较多的RAM,但RAM的资源还是很宝贵的,如果有些固定数据的数组,如LED7段码表,在系统中不会改动和变化,那么就可以定义在程序空间(只要程序空间够用),这样就可留出更多的RAM提供用户使用.

在本例中数组定义在RAM中是完全可以的.但教材就是提供方法和思路,告诉你可以使用的方法和技巧,至于如何合理的配置使用资源,当然是根据实际情况和产品规划的.

出0入0汤圆

发表于 2012-11-6 10:25:35 | 显示全部楼层
machao 发表于 2008-4-22 22:40
flash unsigned char dis_str[]        是将数组定义在FLASH空间中.
unsigned char dis_str[]             ...

求教,加了flash后lcd不显示怎么回事

出0入0汤圆

发表于 2012-11-8 23:49:37 | 显示全部楼层
曾经沧海难为酒 发表于 2012-11-6 10:25
求教,加了flash后lcd不显示怎么回事

你用的是什么编译器?如果是CVAVR的话,请先看HELP中关于LCD函数的说明

出0入0汤圆

发表于 2012-11-12 17:01:07 | 显示全部楼层
编译器用的是cvavr,在avr studio里面是可以编译通过并能显示的

出0入0汤圆

发表于 2012-11-13 00:16:16 | 显示全部楼层
曾经沧海难为酒 发表于 2012-11-12 17:01
编译器用的是cvavr,在avr studio里面是可以编译通过并能显示的

真的不想多批评,但还是忍不住。
不知道是否理解或者估计的对,就你的一句回复,我认为你还是应该把基础打牢固,这样才能有真正的发展潜力和空间的。也请其他的朋友借鉴吧。
1.CVAVR是高级语言C的编译平台,在AVR STUDIO中是不可能进行编译的。
2.avr studio本身只是使用AVR的汇编,可以使用外挂的GCC AVR,但这个GCC avr同CVAVR有区别,CVAVR支持的语句不是全部都能在GCC AVR中编译的。
3.所以估计你是绕过了这个问题,采用其它的方式去解决这个问题的,但并没有找到原来问题产生的真正原因。
4.原来问题的原因我在4楼已经提示过了,现在我把HELP中一些解释贴在下面,看看是否找我分析的对:
   
    void lcd_putchar(char c)
      displays the character c at the current display position.

      void lcd_puts(char *str)
      displays at the current display position the string str, located in RAM.

      void lcd_putsf(char flash *str)
      displays at the current display position the string str, located in FLASH.

      void lcd_putse(char eeprom *str)
      displays at the current display position the string str, located in EEPROM.

      我们学的C语言都是标准C,其起源的计算机硬件基础结构是基于VON-NEUMANN的,运行代码、内存变量全部都在RAM中。而现在的MCU多采用HARVARD结构,代码在程序存储区ROM中,变量在数据区RAM中,并且还有内部的EEPROM。因此所有为MCU所使用C编译器都是在标准C基础上进行扩展了,而且扩展的方式方法还都不同。AVR有GCC、CVAVR、ICCAVR、IAR avr等4个不同的C编译器,但每个编译器除了标准C部分,其扩展部分都是不同的。因此,当你使用某个C时,应该先仔细看它的HELP帮助。

    拿上面的例子说明什么是“打好基础”。当你学了C语言后,应该学习《8086微机原理》的课程,通过这门基础课程,你会对计算机的基本结构有所了解,通过学习8086汇编,去真正理解C语言是怎么一回事。而使用AVR时,如果你知道AVR与8086的结构上区别,就能领悟到C语言上的变化。如果没有上面的学习和牢固的基础掌握,就是看了CVAVR的HELP,恐怕也很难理解为什么CVAVR中类似的LCD显示函数为什么有哪么多,而且各自不同。

  

出0入0汤圆

发表于 2012-11-13 07:54:06 | 显示全部楼层
machao 发表于 2012-11-13 00:16
真的不想多批评,但还是忍不住。
不知道是否理解或者估计的对,就你的一句回复,我认为你还是应该把基础 ...

每次看马老师的回帖,总是有些收获。

现在能坐住冷板凳的工程师太少了。

出0入0汤圆

发表于 2012-11-19 10:56:41 | 显示全部楼层
machao 发表于 2012-11-13 00:16
真的不想多批评,但还是忍不住。
不知道是否理解或者估计的对,就你的一句回复,我认为你还是应该把基础 ...

谢谢马老师的指点,批评的有道理,小生还只是入门级的,懂得只是皮毛,日后当努力学习,看了上面的指点顿感才疏学浅,孤陋寡闻了。8086估计要等到大三了才能学习,目前只是对c语言有初步的认识而已,并不能应用得融会贯通。谢谢老师的指教。学而不思则罔,思而不学则殆。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 05:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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