125008301 发表于 2008-4-22 21:34:06

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

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

为什么不能为unsigned char dis_str[]

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

machao 发表于 2008-4-22 22:40:30

flash unsigned char dis_str[]      是将数组定义在FLASH空间中.
unsigned char dis_str[]            是将数组定义在RAM中.

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

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

曾经沧海难为酒 发表于 2012-11-6 10:25:35

machao 发表于 2008-4-22 22:40 static/image/common/back.gif
flash unsigned char dis_str[]      是将数组定义在FLASH空间中.
unsigned char dis_str[]             ...

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

machao 发表于 2012-11-8 23:49:37

曾经沧海难为酒 发表于 2012-11-6 10:25 static/image/common/back.gif
求教,加了flash后lcd不显示怎么回事

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

曾经沧海难为酒 发表于 2012-11-12 17:01:07

编译器用的是cvavr,在avr studio里面是可以编译通过并能显示的

machao 发表于 2012-11-13 00:16:16

曾经沧海难为酒 发表于 2012-11-12 17:01 static/image/common/back.gif
编译器用的是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显示函数为什么有哪么多,而且各自不同。

livingston 发表于 2012-11-13 07:54:06

machao 发表于 2012-11-13 00:16 static/image/common/back.gif
真的不想多批评,但还是忍不住。
不知道是否理解或者估计的对,就你的一句回复,我认为你还是应该把基础 ...

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

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

曾经沧海难为酒 发表于 2012-11-19 10:56:41

machao 发表于 2012-11-13 00:16 static/image/common/back.gif
真的不想多批评,但还是忍不住。
不知道是否理解或者估计的对,就你的一句回复,我认为你还是应该把基础 ...

谢谢马老师的指点,批评的有道理,小生还只是入门级的,懂得只是皮毛,日后当努力学习,看了上面的指点顿感才疏学浅,孤陋寡闻了。8086估计要等到大三了才能学习,目前只是对c语言有初步的认识而已,并不能应用得融会贯通。谢谢老师的指教。学而不思则罔,思而不学则殆。
页: [1]
查看完整版本: [已解决]flash unsigned char dis_str[] 难道一定要flash吗