OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8929|回复: 17

请教STM8移植USMART时编译出现“常量表达式截断”的错误

[复制链接]

2

主题

12

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-11-20
在线时间
0 小时
发表于 2014-11-20 21:14:11 | 显示全部楼层 |阅读模式
5金钱
今天尝试移植原子的USMART到STM8上,但是移植到最后一步,函数名列表初始化的时候,IAR编译报错了,报错如下:
Error[Pa128]: truncating cast in constant expression

出错代码是在usmart_config.c里,如下:
[mw_shl_code=c,true]struct _m_usmart_nametab usmart_nametab[]= { #if USMART_USE_WRFUNS==1 //如果使能了读写操作 #endif (void*)Set_Charge_Current,"void Set_Charge_Current(u16 curr)", (void*)Charge_Enable,"void Charge_Enable(u8 STATUS);", (void*)LDO_Enable,"void LDO_Enable(u8 STATUS);", (void*)OTG_Enable,"void OTG_Enable(u8 STATUS)", }; [/mw_shl_code]

这几个函数都放在了main.c里,在main.h中做了声明,usmart_config.c也include了main.h

请问,问题可能出现在哪里呢?


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2014-11-20 23:04:34 | 显示全部楼层
这个问题不太清楚,呵呵
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2014-11-21 11:48:55 | 显示全部楼层
加上 { }, {}, 看下
回复

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-11-20
在线时间
0 小时
 楼主| 发表于 2014-11-21 11:52:58 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
现在把这几个函数注释掉,填0,编译通过,但看样子STM8S103放不下了。。

          unable to allocate space for sections/blocks with a total estimated minimum size of 0x4450 bytes in <[0x008000-0x009fff]> (total uncommitted space 0x1f80). 

就几个基本函数。。
回复

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2014-11-21 11:53:12 | 显示全部楼层
struct ...  ...[]
{
  {... ,  ...} ,                //跟类型定义的格式要一样
  {... ,  ...} ,

};
回复

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-11-20
在线时间
0 小时
 楼主| 发表于 2014-11-21 11:57:29 | 显示全部楼层
 回复【3楼】 aleda303 :
---------------------------------
还是不行。。

回复

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2014-11-21 12:00:46 | 显示全部楼层
回复【6楼】wz18th:
---------------------------------
你加错地方了。
struct .......{
   { (void)Set.. , "......." },
   { (void)Set.. , "......." },

};
回复

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-11-20
在线时间
0 小时
 楼主| 发表于 2014-11-21 12:05:19 | 显示全部楼层
 回复【7楼】 aleda303 :
---------------------------------
改了,问题依旧啊。。


回复

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2014-11-21 12:26:19 | 显示全部楼层
那你这个结构体是怎么定义的?
回复

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-11-20
在线时间
0 小时
 楼主| 发表于 2014-11-21 12:50:15 | 显示全部楼层
回复【9楼】aleda303:
---------------------------------
 //函数名列表  
struct _m_usmart_nametab
{
void* func; //函数指针
const u8* name; //函数名(查找串)  
};

这个地方没动,是原子的USMART3.1的内容
回复

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2014-11-21 13:22:41 | 显示全部楼层
回复【10楼】wz18th:
---------------------------------

结构体内定义的  void * , 实例里就不必要强制转换为 void* ;

另外 对于 字符串 ,  u8 * 改为 char* 会更好些。
回复

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2014-11-21 13:26:34 | 显示全部楼层
而且  如果是函数指针  

你可以定义成如下格式 

void (*funName)();
回复

使用道具 举报

36

主题

1263

帖子

1

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1612
金钱
1612
注册时间
2012-6-15
在线时间
39 小时
发表于 2014-11-21 13:29:23 | 显示全部楼层
不过 上面  感觉似乎不是导致这个错误的原因。 
你改改试试。如果不是的话 
具体原因 就不是很清楚了
回复

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-11-20
在线时间
0 小时
 楼主| 发表于 2014-11-22 13:07:08 | 显示全部楼层
回复【13楼】aleda303:
---------------------------------
按您的方法都试了一遍,可惜都不能成功。。而且就算不初始化函数列表,程序也已经超过FLASH大小,暂时把这个移植放一放了。。
回复

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-11-20
在线时间
0 小时
 楼主| 发表于 2014-11-22 13:08:30 | 显示全部楼层
回复【13楼】aleda303:
---------------------------------
依然很感谢老师的指导!
回复

使用道具 举报

0

主题

7

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2014-10-21
在线时间
0 小时
发表于 2014-11-23 18:57:42 | 显示全部楼层
回复【4楼】wz18th:
---------------------------------
这个问题是link进来的库函数大小超过STM8片上容量了。
回复

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-11-20
在线时间
0 小时
 楼主| 发表于 2014-11-24 12:18:50 | 显示全部楼层
回复【16楼】JamesZeng:
---------------------------------
是的,只要#include “stdio.h” 就超。
回复

使用道具 举报

3

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
88
金钱
88
注册时间
2012-12-13
在线时间
12 小时
发表于 2016-5-12 20:52:16 | 显示全部楼层
wz18th 发表于 2014-11-24 12:18
回复【16楼】JamesZeng:
---------------------------------
是的,只要#include&nbsp;“stdio.h”&nbsp;就 ...

你好,我移植STM8也遇到超flash问题,请问你解决了吗
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 01:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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