Embedded 将项目从ICCAVR移植到Atmel Studio 7.0的闪存问题
我目前正在将一个大型项目从ICCAVR移植到Atmel Studio,因为我需要为我正在进行的项目使用一些ASF库 我在下面的代码示例中遇到了这个错误,原因是试图将下面的代码行转换为Atmel StudioEmbedded 将项目从ICCAVR移植到Atmel Studio 7.0的闪存问题,embedded,atmega,atmel,iar,atmelstudio,Embedded,Atmega,Atmel,Iar,Atmelstudio,我目前正在将一个大型项目从ICCAVR移植到Atmel Studio,因为我需要为我正在进行的项目使用一些ASF库 我在下面的代码示例中遇到了这个错误,原因是试图将下面的代码行转换为Atmel Studio void debugoutf(__flash char * header, __flash char * msg); 指向地址空间“\uuu flash”的错误指针必须为常量 函数参数“header” 我尝试在文档中使用宏,以便它可以在Atmel Studio中编译 #ifndef FLA
void debugoutf(__flash char * header, __flash char * msg);
指向地址空间“\uuu flash”的错误指针必须为常量
函数参数“header”
我尝试在文档中使用宏,以便它可以在Atmel Studio中编译
#ifndef FLASHVAR_H_
#define FLASHVAR_H_
#include <avr/pgmspace.h>
#if defined(__ICCAVR__) // IAR C Compiler
#define FLASH_DECLARE(x) __flash x
#endif
#if defined(__GNUC__) // GNU Compiler
#define FLASH_DECLARE(x) x __attribute__((__progmem__))
#endif
我的问题是我是否正确地完成了转换,因为我认为我没有正确地完成转换,因为在UART调试中没有打印任何内容 在变量上使用
\uuuuuu attribute\uuuu((\ uuuu progmem\uuuuu))的问题在于,无论何时您想要从这样一个变量中读取数据,您都不能像从RAM中访问变量那样以通常的方式访问它。相反,您必须使用提供的特殊功能,如pgm\u read\u byte
这很烦人,但你不必这样做,因为为什么他们会像\uu flash
一样添加到最新版本的GCC中(假设你使用的是C,而不是C++)。如果您的GCC版本支持,我建议您停止使用\uuuuuuu属性((\uuuuu progmem\uuuuuu))
,而是使用\uuuuu flash
。如果编译器希望flash中存储的项目标记为const
,因此给您一个错误或警告,您只需将const
添加到声明/定义中(在正确的位置)。如果您在这方面有困难,请发布一个新问题或编辑此问题,使其包含一个新问题
对于您给出的示例代码,您应该尝试编写:
void debugoutp(常量flash char*头,常量flash char*msg);
您是否尝试按错误所述操作?也就是说:#define FLASH_DECLARE(x)const(x)__attribute_((__progmem_))
我使用了问题中所示的宏……添加const时会发生什么?
void debugout(FLASH_DECLARE (char * header), char * msg);