dsp编程遇到延时子函数的问题,问题太菜了,但是还是希望得到指点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dsp编程遇到延时子函数的问题,问题太菜了,但是还是希望得到指点相关的知识,希望对你有一定的参考价值。

dsp2812,GPIOA0引脚
#include "DSP28_Device.h"
#include "DSP28_Globalprototypes.h"
void delay_loop(void);
void main(void)

int kk=0;

InitSysCtrl();
DINT;
IER = 0x0000;
IFR = 0x0000;
InitPieCtrl();
InitPieVectTable();
InitGpio();
while(1)

GpioDataRegs.GPACLEAR.bit.GPIOA0=1;
for(kk=0;kk<100;kk++)
delay_loop();
GpioDataRegs.GPASET.bit.GPIOA0=1;
for(kk=0;kk<100;kk++)
delay_loop();



void delay_loop()

short i;
for(i=0;i<30000;i++)

我的问题是,void delay_loop()子函数是做什么用的,我把主函数中for(kk=0;kk<100;kk++)变为for(kk=0;kk<3000000;kk++);去掉void delay_loop()但是达不到之前效果,这是为什么?谢谢了!!

kk为整形,最多能到16位,即-32768-+32767,你写3000000没有意义,只能取最后十六位,所以你改成long型就可以实现效果了。
void delay_loop(),就是一个延时函数。
参考技术A 延时函数,你的做法也应该有延时,但延时时间会比函数调用的方法短

P2331 [SCOI2005]最大子矩阵


在 @皇上巨佬 的提醒下, 发现本题还可以暴力的 (O(N^3)) 转移, 但是我太菜了, 没想出来, 只想出来(O(N^2))的麻烦的转移方法,,,


分析一下, 发现当前一行的转移可以只和上一行的状态有关, 当然, 状态有些复杂. 于是拿出纸笔分析一下.
一开始以为只有这四种情况: 技术分享图片

结果交上去WA了好几发,,,

实际上, 情况(3)没有那么简单. 这个上下都涂色的方案应该有两种小情况, 分别是:技术分享图片

一种是竖着的一个矩形, 一种是横着的跟前面拼起来的两个小矩形. 易证这两种情况完全不同.
所以说, 以后分析的时候一定要细致, 不能只看图的啊,,,

#include <cstdio>
#include <cstring>
#include <cassert>
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 1e2 + 10;
const int MAXK = 10 + 2;
inline int read()
{
    int x = 0; char ch = getchar(); bool flag = false;
    while(!isdigit(ch)) flag |= (ch == '-'), ch = getchar();
    while(isdigit(ch)) x = x * 10 + ch - '0', ch = getchar();
    return flag ? -x : x;
}

int N, M, K;
int a[MAXN][2], sum[MAXN][2];
int f[MAXN][MAXK][5];

int main()
{
    cin>>N>>M>>K;
    for(int i = 1; i <= N; i++)
        for(int j = 1; j <= M; j++) a[i][j] = read();
    for(int i = 1; i <= N; i++)
        for(int j = 1; j <= M; j++) sum[i][j] = sum[i - 1][j] + a[i][j];

    if(M == 1){
        for(int i = 1; i <= N; i++)
            for(int k = 1; k <= K; k++){
                f[i][k][0] = max(f[i - 1][k][0], f[i - 1][k][1]);
                f[i][k][1] = max(f[i - 1][k - 1][0], f[i - 1][k][1]) + a[i][1];
            }
        cout<<max(f[N][K][0], f[N][K][1])<<endl;
    }
    else {
        memset(f, -0x3f, sizeof(f));
        for(int i = 0; i <= N; i++)
            for(int j = 0; j <= K; j++) f[i][j][0] = 0;
                
        for(int i = 1; i <= N; i++)
            for(int k = 1; k <= K; k++){
                f[i][k][0] = max(max(max(f[i - 1][k][0], f[i - 1][k][1]), max(f[i - 1][k][2], f[i - 1][k][3])), f[i - 1][k][4]);
                f[i][k][1] = max(max(max(f[i - 1][k - 1][0], f[i - 1][k][1]), max(f[i - 1][k - 1][2], f[i - 1][k - 1][3])), f[i - 1][k][4]) + a[i][1];
                f[i][k][2] = max(max(max(f[i - 1][k - 1][0], f[i - 1][k - 1][1]), max(f[i - 1][k][2], f[i - 1][k - 1][3])), f[i - 1][k][4]) + a[i][2];
                f[i][k][3] = max(max(max(f[i - 1][k - 1][0], f[i - 1][k - 1][1]), max(f[i - 1][k - 1][2], f[i - 1][k][3])), f[i - 1][k - 1][4]) + a[i][1] + a[i][2];
                f[i][k][4] = max(max(f[i - 1][k - 1][1], f[i - 1][k - 1][2]), f[i - 1][k][4]) + a[i][1] + a[i][2];
                if(k >= 2) f[i][k][4] = max(f[i][k][4], max(f[i - 1][k - 2][3], f[i - 1][k - 2][0]) + a[i][1] + a[i][2]);
            }
        cout<<max(max(max(f[N][K][0], f[N][K][1]), max(f[N][K][2], f[N][K][3])), f[N][K][4])<<endl;
    }
    return 0;
}

以上是关于dsp编程遇到延时子函数的问题,问题太菜了,但是还是希望得到指点的主要内容,如果未能解决你的问题,请参考以下文章

P2331 [SCOI2005]最大子矩阵

最近感到深深的绝望,感觉自己太菜了

leetcode个人秋季赛总结(太菜了,只写出两题)

求助ybt1192放苹果(果然练习两年半的我还是太菜了)

考试总结——20180309

北漂生活第六弹-demo整起