[讨论] 【TI首届低功耗设计大赛】MSP430FR5969学习中CCS6.0编译遇到问题

lonerzf   2014-8-22 10:26 楼主
今天在学习库函数的时候遇到了这么个问题。
直接使用
__delay_cycles(400000);//延时 函数
是可以的,但是定义成如下方式就不行了
a.png



会报错。提示为
#1530-D: (ULP 5.1) Detected divide operation(s). Recommend moving them to RAM during run time or not using as these are processing/power intensive
b.png

把CPU_F 直接改成浮点数也不成。非得不包含除法,那我可咋办,怎么把这些代码一道RAM中去呢?
c.png

求用过的朋友指点下。不胜感激哈~

这孩子,成熟的象征,理智的典范。

回复评论 (19)

PMM_unlockLPM5();
放在端口初始化之后
点赞  2014-8-22 10:29
能不能用这样的格式delay() { a=b; ___delay__(a); } 本帖最后由 sint27 于 2014-8-22 10:36 编辑
点赞  2014-8-22 10:33
引用: 蓝雨夜 发表于 2014-8-22 10:29
PMM_unlockLPM5();
放在端口初始化之后

还真是唉。但是为什么啊?不是应该从LMPx.5模式退出吗?
这孩子,成熟的象征,理智的典范。
点赞  2014-8-22 10:37
引用: sint27 发表于 2014-8-22 10:33
能不能用这样的格式delay()
{
       a=b;

我刚才试了下,蓝雨夜先生正解。但是不知道为什么。
这孩子,成熟的象征,理智的典范。
点赞  2014-8-22 10:38
#define CPU_F                               ((double)8000000)
#define delay_us(x)                       __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x)                      __delay_cycles((long)(CPU_F*(double)x/1000.0))
点赞  2014-8-22 10:39
度娘说:
不可以赋变量。
__delay_cycles()是编译器内部函数,类似于宏定义,不是真正意义上的函数。编译器在编译链接时,会根据给定的常量值,用最少的汇编指令来代替该函数,通过执行指令来进行延时。不同的常量值,编译器会进行不同的指令编译。
点赞  2014-8-22 10:40
引用: 蓝雨夜 发表于 2014-8-22 10:39
#define CPU_F                               ((double)8000000)
#define delay_us(x)                   ...

对啊,之前这么写的,报错,然后还以为问题在宏定义上呢。
谢谢前辈~
这孩子,成熟的象征,理智的典范。
点赞  2014-8-22 10:42
引用: 蓝雨夜 发表于 2014-8-22 10:40
度娘说:
不可以赋变量。
__delay_cycles()是编译器内部函数,类似于宏定义,不是真正意义上的函数。编 ...

学习了,感谢
点赞  2014-8-22 10:46
引用: lonerzf 发表于 2014-8-22 10:37
还真是唉。但是为什么啊?不是应该从LMPx.5模式退出吗?

嘿嘿
你自己看PDF翻译吧!
1.PNG
点赞  2014-8-22 10:47

11楼 jyb2014 该用户已被删除

提示: 作者被禁止或删除 内容自动屏蔽
点赞  2014-8-22 10:47
引用: lonerzf 发表于 2014-8-22 10:42
对啊,之前这么写的,报错,然后还以为问题在宏定义上呢。
谢谢前辈~

你有时可以试着GOOGLE或百度啊!


现在TI的56XX系列的库还需要多看看,琢磨琢磨了
点赞  2014-8-22 10:48
引用: 蓝雨夜 发表于 2014-8-22 10:48
你有时可以试着GOOGLE或百度啊!

真要命,昨天看用户指南还特地在这块做了笔记。。。
蓝前辈, 不知道10.2.6.2 小节的表是不是表头弄错了。

a.png


非常感谢。又解决了一个问题~
这孩子,成熟的象征,理智的典范。
点赞  2014-8-22 10:55
引用: lonerzf 发表于 2014-8-22 10:55
真要命,昨天看用户指南还特地在这块做了笔记。。。
蓝前辈, 不知道10.2.6.2 小节的表是不是 ...

为什么觉的弄错了呢?
点赞  2014-8-22 11:10
引用: 蓝雨夜 发表于 2014-8-22 11:10
为什么觉的弄错了呢?

a.png
PxIN 0→1 时,输入低电平条变为高电平,如果PxIES设置为0, 则相应的PxIFG位置位;
PxIN 1→0 时,输入高电平条变为低电平,如果PxIES设置为1, 则相应的PxIFG位置位。

那么这个表表头PxIN和PxIES是不是应该换个位置啊?
b.png


这孩子,成熟的象征,理智的典范。
点赞  2014-8-22 13:02
引用: lonerzf 发表于 2014-8-22 13:02
PxIN 0→1 时,输入低电平条变为高电平,如果PxIES设置为0, 则相应的PxIFG位置位;
PxIN 1→0 时,输 ...

PxIES只是个边沿选择
点赞  2014-8-22 13:04
引用: 蓝雨夜 发表于 2014-8-22 13:04
PxIES只是个边沿选择

这个边沿选择寄存器的表不影响整体理解,不纠结了,呵呵。谢谢前辈的指点~
这孩子,成熟的象征,理智的典范。
点赞  2014-8-22 13:13
引用: lonerzf 发表于 2014-8-22 13:13
这个边沿选择寄存器的表不影响整体理解,不纠结了,呵呵。谢谢前辈的指点~

我理解的是这个PxIES只是对管脚上的电平变化的条件选择

根据选择的边沿后,PXIN的电平,导致PXIFG的状态
点赞  2014-8-22 13:31
也跟着楼主学习下
点赞  2014-8-22 15:57
呵呵呵。。。。。。。。学习了
点赞  2014-8-23 14:15
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复