打印

STM 32 简单的指针赋值出问题了,求教

[复制链接]
14895|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mekamerrill|  楼主 | 2011-7-23 14:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
004 unsigned char tmp[128];
005 unsigned char *PC1,*PC2,*PC3;
006 PC1=tmp;
LCDdisplay.c(6): error:  #77-D: this declaration has no storage class or type specifier
LCDdisplay.c(6): error:  #147: declaration is incompatible with "unsigned char *PC1" (declared at line 5)
LCDdisplay.c(6): error:  #144: a value of type "unsigned char *" cannot be used to initialize an entity of type "int"
沙发
mekamerrill|  楼主 | 2011-7-23 14:51 | 只看该作者
数组和指针定义如第四、五行,第六行中我给PC1赋值,报错是下面三行。我对STM32的数据类型还是不清楚,猜是这款MCU数据类型的问题。工程中使用2.0的库。请赐教……

使用特权

评论回复
板凳
mekamerrill|  楼主 | 2011-7-23 15:06 | 只看该作者
还是说STM32根本就不兼容指针操作呢??

使用特权

评论回复
地板
相信哥咯| | 2011-7-23 15:08 | 只看该作者
unsigned char 改成u8试下

使用特权

评论回复
5
mekamerrill|  楼主 | 2011-7-23 15:18 | 只看该作者
LCDdisplay.c(6): error:  #77-D: this declaration has no storage class or type specifier
LCDdisplay.c(6): error:  #147: declaration is incompatible with "u8 *PC1" (declared at line 5)
LCDdisplay.c(6): error:  #144: a value of type "u8 *" cannot be used to initialize an entity of type "int"

使用特权

评论回复
6
mekamerrill|  楼主 | 2011-7-23 15:20 | 只看该作者
u8 tmp[128];
u8 *PC1,*PC2,*PC3;
PC1=tmp;

使用特权

评论回复
7
mekamerrill|  楼主 | 2011-7-23 15:37 | 只看该作者
报错的大概意思是:

LCDdisplay.c(6):错误:   # 77-D:  这个声明没有存储类型或类型说明符   
LCDdisplay.c(6):错误:   # 147:   声明与"unsigned char *PC1" (定义在5号线) 不相容  
LCDdisplay.c(6):错误:   # 144:   一个"unsigned char *"类型的值不能被用来初始化一个"int"类型的实体

不太明白,明明定义的是字符型的。好,如果STM32的类型就这些:
    u8——1个字节,无符号型(不能表达负数,如果用来当作负数的话,就出错了);
    u16 ——2个字节,无符号型(参看前边STM32f10x.h中的定义);
    u32——4个字节,无符号型;
    int——4个字节,有符号型,可以表达负整数;
    float ——4个字节,有符号型,可以表达负数/小数;
    double——8个字节,有符号弄,可以表达负数/小数;
那我把类型改成int得了吧,但是
int tmp[128];
int *PC1,*PC2,*PC3;
PC1=tmp;
LCDdisplay.c(6): error:  #77-D: this declaration has no storage class or type specifier
LCDdisplay.c(6): error:  #147: declaration is incompatible with "int *PC1" (declared at line 5)
LCDdisplay.c(6): error:  #144: a value of type "int *" cannot be used to initialize an entity of type "int"
一个整形指针的值不能被用来初始化一个整形数的实体????(翻译没问题吧)但是我好像是在给指针赋值诶!
还有一个是
117            if (*PC1=='$'&*PC2=='G')
LCDdisplay.c(117): error:  #75: operand of "*" must be a pointer
难道无法定义指针??

使用特权

评论回复
8
相信哥咯| | 2011-7-23 15:45 | 只看该作者
u8 tmp[128];
u8 *PC1,*PC2,*PC3;
PC1=tmp;

-------------------------------

你这里代码的上面的代码有错误

使用特权

评论回复
9
mohanwei| | 2011-7-23 15:53 | 只看该作者
004 unsigned char tmp[128];
005 unsigned char *PC1,*PC2,*PC3;
006 PC1=tmp;
这3行看起来没有什么问题……你列出的3个错误应该是其他地方的,双击错误看看会跳转到那一行

使用特权

评论回复
10
mekamerrill|  楼主 | 2011-7-23 15:54 | 只看该作者
但是……
#include "stm32f10x_heads.h"
#include "HelloRobot.h"

int tmp[128];
int *PC1,*PC2,*PC3;
PC1=tmp;

前面就是头文件了啊
stm32f10x_heads.h里头是对固件库的包含,HelloRobot.h中则是对GPIO,串口,中断和时钟等的配置,不可能有错啊

使用特权

评论回复
11
jinyitong| | 2011-7-23 17:29 | 只看该作者
ARM的地址都应该是32位的,所以,指向地址的指针应该是U32型,我是这样理解(猜)的,
我没玩过ARM.

使用特权

评论回复
12
午夜霓虹| | 2011-7-23 20:33 | 只看该作者
应该是其他地方错了

使用特权

评论回复
13
linqing171| | 2011-7-23 21:31 | 只看该作者
unsigned char tmp[128];
这句声明没用,前面头文件里面有宏定义重名了。
把tmp改成 tmp332[5] 这种名字继续试
在前面加个定义 unsigned char c; 这么一行东西。
如果提示新加的行错,说明新加的行是头文件的继续。
如果是temp332[5] 这个数组错了,说明不是我说的问题。

使用特权

评论回复
14
香水城| | 2011-7-24 08:12 | 只看该作者
这个问题是你使用的编译器的问题,与STM32无关。

赋值语句应该放在函数里面,而不是放在函数外面,那里是变量定义区。有些编译器支持预初始化,但你的编译器不支持。

使用特权

评论回复
15
mcu5i51| | 2011-7-24 08:25 | 只看该作者
执行指令好像在函数外面;
004 unsigned char tmp[128];
005 unsigned char *PC1=tmp,*PC2,*PC3;
不知道这样行不

使用特权

评论回复
16
729144646| | 2011-7-24 10:30 | 只看该作者
哈还

使用特权

评论回复
17
热血神州| | 2012-4-4 17:27 | 只看该作者
我也碰到这个问题了,在stm32中到底怎样定义指针呢

使用特权

评论回复
18
xblei| | 2012-4-5 08:33 | 只看该作者
路过瞧瞧。

使用特权

评论回复
19
香水城| | 2012-4-5 16:45 | 只看该作者
unsigned char tmp[128];
unsigned char *PC1,*PC2,*PC3;
PC1=tmp;  <== 这样放在函数外面怎么可以呢?

foo_func()
{
  ......
}

使用特权

评论回复
20
sailorxing| | 2014-1-19 12:14 | 只看该作者
改成以下形式试下:
PC1 = &tmp0];

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:生活给你的,就是你给生活的!

0

主题

9

帖子

1

粉丝