打印
[技术问答]

SC92F8547的PWM应用代码编译错误

[复制链接]
1119|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gdwurc|  楼主 | 2018-5-17 22:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

请高手帮忙看下是什么原因导致编译报错?
谢谢!


代码片段如下:
uint16 xdata PWM_Dutyfactor[8] _at_        0x0740;        //PWM占空比调节寄存器地址

/*****************************************************
*函数名称:void PWM_Dutyfactor_Init(PWM_Pin_TypeDef PWM_Pin,PWM_Direction_TypeDef PWM_Direction,uint16 PWM_Dutyfactor)
*函数功能:PWM占空比设置
*入口参数:PWM_Pin,PWM_Direction,PWM_Dutyfactor
*出口参数:void
*****************************************************/
void PWM_Dutyfactor_Init(PWM_Pin_TypeDef PWM_Pin,PWM_Direction_TypeDef PWM_Direction,uint16 PWM_Dutyfactor)
{
        uint16 xdata PWMRD        = 0x8000;
        if(PWM_Direction == PWM_Direction_N)
        {
                PWMRD        |=        ((uint16)(1<<17));
        }
        else if(PWM_Direction == PWM_Direction_P)
        {
                PWMRD        &=        ~((uint16)(1<<17));
        }
        else
        {
                PWMRD        &=        ~((uint16)(1<<17));
        }
        PWMRD        &=        ~((uint16)0xC000);        //第0~14位全置0
        PWMRD        |=        ((uint16)(PWM_Dutyfactor & 0x0FFF));        //PWM_Dutyfactor的第13~16位全置0,然后与PWMRD进行位或运算
        switch(PWM_Pin)
        {
                case        PWM_Pin_40:        PWM_Dutyfactor[0]        = PWMRD;        break;
                case        PWM_Pin_41:        PWM_Dutyfactor[1]        = PWMRD;        break;
                case        PWM_Pin_42:        PWM_Dutyfactor[2]        = PWMRD;        break;
                case        PWM_Pin_43:        PWM_Dutyfactor[3]        = PWMRD;        break;
                case        PWM_Pin_50:        PWM_Dutyfactor[4]        = PWMRD;        break;
                case        PWM_Pin_51:        PWM_Dutyfactor[5]        = PWMRD;        break;
                case        PWM_Pin_52:        PWM_Dutyfactor[6]        = PWMRD;        break;
                case        PWM_Pin_53:        PWM_Dutyfactor[7]        = PWMRD;        break;
                default:        break;
        }
}




编译错误输出如下:
Rebuild target 'Target 1'
assembling STARTUP.A51...
compiling main.c...
..\src\sc92f854x_pwm.c(92): error C216: subscript on non-array or too many dimensions
Target not created

相关帖子

沙发
gdwurc|  楼主 | 2018-5-17 22:42 | 只看该作者
急,在线等哦。

使用特权

评论回复
板凳
遇见未知的自己| | 2018-5-18 09:16 | 只看该作者
提示是非数组上下标或维度太多异常,但从截图的代码来看是没有错误的,应该是其它未截图的部分出现错误。。。


unsigned int xdata PWM_Dutyfactor[8]  _at_  0x740;
unsigned char PWM_Pin;
unsigned int PWMRD;
void main(void)
{
                                switch(PWM_Pin)
        {
                case        0:        PWM_Dutyfactor[0]        = PWMRD;        break;
                case        1:        PWM_Dutyfactor[1]        = PWMRD;        break;
                case        2:        PWM_Dutyfactor[2]        = PWMRD;        break;
                case        3:        PWM_Dutyfactor[3]        = PWMRD;        break;
                case        4:        PWM_Dutyfactor[4]        = PWMRD;        break;
                case        5:        PWM_Dutyfactor[5]        = PWMRD;        break;
                case        6:        PWM_Dutyfactor[6]        = PWMRD;        break;
                case        7:        PWM_Dutyfactor[7]        = PWMRD;        break;
                default:        break;
        }       
}

Rebuild target 'Target 1'
assembling STARTUP.A51...
compiling main.c...
linking...
Program Size: data=12.0 xdata=16 code=113
creating hex file from "FullResources"...
"FullResources" - 0 Error(s), 0 Warning(s).
Build Time Elapsed:  00:00:00

使用特权

评论回复
地板
遇见未知的自己| | 2018-5-18 09:20 | 只看该作者
还有看下xdata定义变量的地址是否有重叠了。

使用特权

评论回复
5
YanniChen| | 2018-5-18 09:31 | 只看该作者
PWMRD        |=        ((uint16)(PWM_Dutyfactor & 0x0FFF)); 感觉是这一句有问题,PWM_Dutyfactor是个数组名,你这样操作的是数组的指针,你检测下是不是这里有问题

使用特权

评论回复
6
gdwurc|  楼主 | 2018-5-18 09:51 | 只看该作者
解决了,多谢楼上各位相助。
是入口参数与数组名重名了。

使用特权

评论回复
7
遇见未知的自己| | 2018-5-18 10:07 | 只看该作者
gdwurc 发表于 2018-5-18 09:51
解决了,多谢楼上各位相助。
是入口参数与数组名重名了。

好的,

使用特权

评论回复
8
guanjiaer| | 2018-7-13 09:03 | 只看该作者
哦哦哦 恭喜楼主啊

使用特权

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

本版积分规则

17

主题

103

帖子

2

粉丝