主题中讨论的其他器件:CODECOMPOSER、
工具/软件:Code Composer Studio
如何使用 FPU 单元。我按照示例操作并运行它。它正常、但当我尝试 使用 FPUEnable 和 FPUlazystacking 运行代码时 、它不起作用。
请指导我如何在 tm4c 的解压缩器中使用 FPU 单元
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
如何使用 FPU 单元。我按照示例操作并运行它。它正常、但当我尝试 使用 FPUEnable 和 FPUlazystacking 运行代码时 、它不起作用。
请指导我如何在 tm4c 的解压缩器中使用 FPU 单元
您好!
问题是什么? 您遇到了什么错误? 您在编译期间还是在运行时遇到错误?
如果没有缩进、您的代码很难读取。 请通过单击编辑器窗口右下角的"使用富格式"粘贴您的代码、然后选择"使用 SyntaxHighighter 插入代码"选项卡。
我快速浏览您的代码、并使用未声明的变量'flag'。 如果有问题、它将不会编译。 请参阅以下代码片段。 变量标志在何处声明?
如果(v[n]<0.95) { VIO[n]=0.96-v[n]; flag=1; } 否则(v[n]>1.05) { VIO[n]=1.04-v[n]; flag=1; } } 如果(flag=1)//如果存在违反 {真}
您好!
与您的代码相关的几个观察结果:
1) 1)您需要创建一个项目、并将文件 startup_ccs.c 添加到该项目中。 在您的评论中没有明确说明这一点。
2) 2)您需要生成列表文件和映射文件;从列表文件中、您应提取有关堆栈使用情况的信息并为其设置正确的维度。 我怀疑您有堆栈使用问题。
3) 3)不要试图重塑车轮-在网上或一些书籍中发布了 C 语言的矩阵操作程序-请查找" C 语言数字插值"第二版。 使用它们、它们已经由其他人测试。 (请记住 CMSIS 软件包是否包含某些软件包、请无论如何检查)
4) 4)在 PC 上测试您的例程、如果满意、则在 CCS 上移动源代码。
5) 5)在您的评论"有错误"中不要太短-什么错误? 我们不能猜到、只需复制/粘贴第一个并发布它们。
虽然供应商的 Charles 和 Friend Petrei 的诊断工作是正确和令人印象深刻的、但我想指出、"海报展示了展示其问题或问题的"最低代码块"(包括定义和配置)、将会大大受益。"
外科医生"将"兴趣领域"(即"紧密关注")"缩小/防止分心、这会减慢并使他们的任务/目标复杂化。
我们的编程领域从类似的"锁定"目标中受益匪浅。 回顾数百(或数千)行代码是"过度"-将任务大幅减少到其本质、"速度、简化和增强"问题解决! 这种"追求精髓"的效果是能够带来比(著名的-努力之光)"不起作用!"更好的问题描述。
这种严格的方法提供的额外关注-最好能快速、更可控和更高效地解决问题。 (在需要"外部援助"时尤其证明...)
你(们)好,查尔斯
我现在运行代码没有错误、但有与依赖关系相关的警告、如
gmake:循环./tm4c123ghp6.cmd.out <-./tm4c123ghp6.cmd 相关性已删除。
gmake:循环 C:/ti/TivaWare_C_Series-2.1.2.111/driverlib/ccs/Debug/driverlib.lib.out <- C:/ti/TivaWare_C_Series-2.1.2.111/driverlib/ccs/Debug/driverlib.lib 相关性已删除。
请告诉我 您声明要编译代码的变量。
以及如何删除这些依赖项警告。我将再次向您发送代码。
#include
#include
#include
#include
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/fpu.h"
#include "driverlib/sysctl.h"
void 逆向(float[6]、int、float[6]);
浮点决定因素(float[6][6]、int);
空系数(float[6][6]、int、float[6]);
void 转置(float[6][6]、float[6][6]、int、float[6]);
int main (空)
{
FPULazyStackingEnable();
FPUEnable();
SysCtlClockSet (SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHz | SYSCTL_OSC_MAIN);
//int i[4]={2、3、5、4};//定义关键电源系统到节点
//int j[4]={1、2、2};
float z[4]={0.003113、01570、6.951e-3、9.029e-3};//定义关键电源系统 float 节点
float v[5]={0.962,0.952,0.963,0.946,0.937};//定义从主电源流代码获取的关键电源系统节点电压
float Q=1.739;//定义从主电源流代码获得的代理无功功率
float P=1.449;//定义从主电源流代码获取的代理活动电源
float S=3.0;//定义代理的最大生成能力
//int unknownsQ=1;//如果下游的另一个代理将影响此区域,则无知情的无功功率变化数
double AQ=powf (S、2);
double bq=powf (P、2);
双 ABQ=AQ-bq;
float SF=7.0/93;//代理节点灵敏度因子
float nqj=0.1/3;//麻醉剂压降系数
double Qmax=sqrtf (ABQ);
//float Qmax=powf (ABQ、0.5);//找到可提供的最大无功功率生成
//printf ("Qmax=%f\n"、Qmax);
float xo[6]={0};//初始化未知
int flag=0;//初始化表示版本的字段(如果存在)=1
int priority=0;//初始化代理优先级
//int DQ[4]={6、6、0、0};//表示 j (1)和 i (1)之间的无功功率流变化等于 x (6)、
//或 i (3)和 j (3)之间的变化不等于零
float A[6]={0};
float VIO[5]={0};
float x[6]={0};
内部分配;
int n、c;
///-------------------- 检查是否有违规
for (n=0;n<5;n++)
{
如果(v[n]<0.95)
{
VIO[n]=0.96-v[n];
flag=1;
}
否则、如果(v[n]>1.05)
{
VIO[n]=1.04-v[n];
flag=1;
}
}
if (flag==1)//如果为 True,则存在违规
{
priority=priority+1;
//选择最大违规的总线
INT maximum = VIO[0];
对于(c = 1;c < 5;c++)
{
如果(VIO[c]>最大值)
{
最大值= VIO[c];
LOC = c;
}
}
x[loc+1]=VIO[loc];//指示最大违规节点所需的解决方案
}
int act、k、l、m、q、s;
float b[6]={0、0、0、0、0、 VIO[loc]};
float B1[6]={xo[5]、0、0、0、0、VIO[loc]};
float ff[6]={{1、0、0、0、-SF}、
{v[0]/v[1]、-1、0、0、-z[0]/v[1]}、
{0、v[1]/v[2]、-1、0、-z[1]/v[2]}、
{0、v[1]/v[4]、0、-1、0}、
{0、v[1]/v[3]、0、-1、0}、
{0、0、0、1、0}};
float FF1[6][6]={{1、0、0、0、-nqj}、
{v[0]/v[1]、-1、0、0、-z[0]/v[1]}、
{0、v[1]/v[2]、-1、0、-z[1]/v[2]}、
{0、v[1]/v[4]、0、-1、0}、
{0、v[1]/v[3]、0、-1、0}、
{0、0、0、1、0}};
float FF2[6][6]={{0、0、0、0、0、1}、
{v[0]/v[1]、-1、0、0、-z[0]/v[1]}、
{0、v[1]/v[2]、-1、0、-z[1]/v[2]}、
{0、v[1]/v[4]、0、-1、0}、
{0、v[1]/v[3]、0、-1、0}、
{0、0、0、1、0}};
float bt[6];
float b1t[6];
对于(n=0;n<6;n++)
{
BT[n][0]=b[n];
b1t[n][0]=b1[n];
}
for (act=0;act<3;act++)
{
float m_invers[6][6];
if (act=0)
{
反向(ff、6、m_invers);
for (k=0;k < 6;k++)
{
x[k]=0;
for (l=0;l<6;l++)
{
x[k]=x[k]+(m_逆向[k][l]*bt[l][0]);
}
}
}
if (act=1)
{
逆向(ff1、6、m_invers);
for (k=0;k < 6;k++)
{
x[k]=0;
for (l=0;l<6;l++)
{
x[k]=x[k]+(m_逆向[k][l]*bt[l][0]);
}
}
}
if (act==2)
{
逆向(ff2、6、m_invers);
for (k=0;k < 6;k++)
{
x[k]=0;
for (l=0;l<6;l++)
{
x[k]=x[k]+(m_逆向[k][l]*b1t[l][0]);
}
}
}
for (m=0;m<=5;m++)
{
a[m][2*act]=x[m];//将某个操作的 x 值存储在矩阵 A 中
//检查每个操作的基础解决方案的特性---
}
for (q=0;q<5;q++)
{
if ((v[q]+x[q])<0.95)
{
a[q][2*act+1]=v[q]+x[q]-0.95;
}
其他
{
if ((v[q]+x[q])>1.05)
{
a[q][2*act+1]=v[q]+x[q]-1.05;
}
}
if (((Q+x[5])>Qmax)
{
A[5][2*act]=(Q+x[5])-Qmax;
}
}
}
float sum1=0;
float sum2=0;
float sum3=0;
for (s=0;s<6;s++)
{
sum1=sum1+a[s][1];
sum2=sum2+a[s][3];
sum3=sum3+a[s][5];
}
浮点 VSTAR;
if (sum1 <fabsf(0.001))
{
//发送消息
VSTAR=A[0][0]*(1+(nqj*a[5][0])/a[0]);
}
否则为 if (sum2 <fabsf(0.001))
{
//发送消息
VSTAR=a[0][2]*(1+(nqj*a[5][2])/a[0][2]);
}
否则、IF (sum3 <fabsf(0.001))
{
//发送消息
VSTAR=a[0][4]*(1+(nqj*a[5][4])/a[0][4]);
}
}
void 逆向(float matrix [6]、int size、float m_invers[6][6])
{
浮点数 d;
int i、j;
float matrial_codfact[6][6];
float m_TRAN置[6][6];
d=决定因素(矩阵、大小);
协因子(矩阵、大小、矩阵协因子);
转置(矩阵、矩阵协因子、大小、m_TRAN置);
对于(i=0 <size;i++)
{
对于(j=0;<size;j++)
{
m_invers[i][j]=m_TRAN置 e[i][j]/ d;
}
}
}
/*用于计算矩阵的决定因素。 此函数为递归*/
浮点决定因素(浮点矩阵[6][6]、int 大小)
{
float s=1、det=0、m_MINOR [6];
int i、j、m、n、c;
如果(size=1)
{
返回(矩阵[0][0]);
}
其他
{
DET=0;
对于(c=0;<size;c++)
{
M=0;
N=0;
对于(i=0 <size;i++)
{
对于(j=0;<size;j++)
{
m_MINOR [i][j]=0;
if (i!= 0 && j!= c)
{
m_MINOR [m][n]=matrix [i][j];
如果(n<(size-2))
N++;
其他
{
N=0;
M++;
}
}
}
}
DET=det + s *(matrix [0][c]* det뚨 因素(m_minor、size-1));
S=-1 * s;
}
}
返回(坐浴盆);
}
/*计算矩阵的系数*/
空协因子(float matries[6][6]、int size、float matries_cofacter[6][6])
{
float m_codum[6][6];
int p、q、m、n、i、j;
对于(q=0;<size;q++)
{
对于(p=0;pg <size;p++)
{
M=0;
N=0;
对于(i=0 <size;i++)
{
对于(j=0;<size;j++)
{
if (i!= q & j!= p)
{
m_cofaction[m][n]=matrix [i][j];
如果(n<(size-2))
N++;
其他
{
N=0;
M++;
}
}
}
}
materize_codum[q][p]=pow (-1、q + p)* dutterm_codfactor、size-1);
}
}
}
/*查找矩阵系数转置*/
void 转置(float matries[6][6]、float matries_cofacter[6][6]、int size、float m_transfose [6])
{
int i、j;
对于(i=0 <size;i++)
{
对于(j=0;<size;j++)
{
m_TRANSPUSE[i][j]=matri_cofaction[j][i];
}
}
}