搜索
bottom↓
12
返回列表 发新帖
楼主: wye11083

向莫大学习,从今天开始有限解答C/C++/Xilinx方面的较难问题

  [复制链接]
(38611148)

出0入0汤圆

发表于 2020-8-1 04:18:37 | 显示全部楼层
支持楼主
(38371851)

出0入0汤圆

发表于 2020-8-3 22:46:54 | 显示全部楼层
支持楼主
(38334831)

出0入0汤圆

发表于 2020-8-4 09:03:54 | 显示全部楼层
支持,希望在这个帖子下多学习,取得进步
(37336222)

出0入0汤圆

发表于 2020-8-15 22:27:23 | 显示全部楼层
请楼主介绍下,多文档设计,如果躲开MFC,C++还有比较容易上手的工具吗?还有上次提到的线程里加SLEEP(100),加上后CPU的占用率仍是100%。
(37336111)

出0入66汤圆

 楼主| 发表于 2020-8-15 22:29:14 来自手机 | 显示全部楼层
zw_7627 发表于 2020-8-15 22:27
请楼主介绍下,多文档设计,如果躲开MFC,C++还有比较容易上手的工具吗?还有上次提到的线程里加SLEEP(100) ...

不知道了。qt你可以看看。cpu 100%还是你代码有跑,没有执行sleep,你调试。
(37335811)

出0入0汤圆

发表于 2020-8-15 22:34:14 | 显示全部楼层
wye11083 发表于 2020-8-15 22:29
不知道了。qt你可以看看。cpu 100%还是你代码有跑,没有执行sleep,你调试。 ...

谢谢,还有个情况,比如我想开个120秒的定时器,第一种settimier(1,1000,null);然后计数;第二种第一种settimier(1,120000,null);两种定时的时间并不准确。是什么原因,有什么好的解决办法?
(37333804)

出0入66汤圆

 楼主| 发表于 2020-8-15 23:07:41 来自手机 | 显示全部楼层
zw_7627 发表于 2020-8-15 22:34
谢谢,还有个情况,比如我想开个120秒的定时器,第一种settimier(1,1000,null);然后计数;第二种第一种se ...

pc本来就不精确。你可以用mutex配合timeout用。
(33566623)

出0入0汤圆

发表于 2020-9-28 13:34:02 | 显示全部楼层
mark,收藏慢慢学习
(32623456)

出0入0汤圆

发表于 2020-10-9 11:33:29 | 显示全部楼层
请教两个关于 C++的问题,也是困扰我两天的问题。
1、
此处 typedef 的函数指针定义为啥我不能放在类里面,图中第二个箭头所示的方向,放在里面就会报错,参见最下面一个箭头。

2、我在移植一个 shell 类的时候,涉及到函数指针的问题,本意上 shell 的命令都是通过 public 的外部函数进行添加,如下:
  1. void X_Shell::addCommand(const char *name, ShellFunctionT functionPoint)
  2. {
  3.         strncpy(&this->_staticCommand[X_Shell::commandCount].commandName[0], name, sizeof(this->_staticCommand[X_Shell::commandCount].commandName));
  4.         this->_staticCommand[X_Shell::commandCount].functionPoint = functionPoint;

  5.         X_Shell::commandCount++;

  6.         if (X_Shell::commandCount >= X_SHELL_MAX_CMD_COUNT)
  7.         {
  8.                 this->_shellSerial->print("Too many commands has been added!\r\n");
  9.         }
  10. }
复制代码

其中
  1. _staticCommand
复制代码
的结构体定义如下:
  1. typedef struct
  2. {
  3.         char commandName[X_SHELL_CMD_NAME_MAX_LENGTH];
  4.         void (*functionPoint)(char argc, char *argv);
  5. } CommandT;
复制代码


我为了内置一个保留命令,“ls”,所以将这个命令加入
  1. _staticCommand[0]
复制代码

但是在构造函数中初始化的的时候一直报错,
  1. X_Shell::X_Shell(HardwareSerial &serial)
  2. {
  3.         this->_shellSerial = &serial;

  4.         strncpy(this->_shell.userName, X_SHELL_USER_NAME, sizeof(this->_shell.userName));

  5.         strncpy(this->_staticCommand[0].commandName, "ls", sizeof(_staticCommand[0].commandName));
  6.         this->_staticCommand[0].functionPoint = this->shellListCommand;

  7.         this->_shell.command = &_staticCommand[0];
  8. }
复制代码

其中shellListCommand的定义如下:
  1. void X_Shell::shellListCommand(char argc, char *argv)
  2. {
  3.         if (!strcmp("all", &argv[argv[1]]))
  4.         {
  5.                 for (uint8_t i = 0; this->_staticCommand[i].functionPoint != NULL; i++)
  6.                 {
  7.                         this->_shellSerial->printf("%s\r\n", this->_staticCommand[i].commandName);
  8.                 }
  9.         }
  10.         else if (!strcmp("-v", &argv[argv[1]]))
  11.         {
  12.                 this->_shellSerial->printf("%s\r\n", X_SHELL_VERSION);
  13.         }
  14.         else
  15.         {
  16.                 this->_shellSerial->print("ls [options]\r\n");
  17.                 this->_shellSerial->print("options: \r\n");
  18.                 this->_shellSerial->print("\t -v \t: Show version\r\n");
  19.                 this->_shellSerial->print("\t all \t: show all commands\r\n");
  20.         }
  21. }
复制代码


看到网上说涉及到类的函数指针,需要把成员函数声明为 static,这块也不是很理解,还是希望大神指点一下~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(32618909)

出0入66汤圆

 楼主| 发表于 2020-10-9 12:49:16 来自手机 | 显示全部楼层
solojimes 发表于 2020-10-9 11:33
请教两个关于 C++的问题,也是困扰我两天的问题。
1、
此处 typedef 的函数指针定义为啥我不能放在类里面, ...

1 typedef确实是类似于define的东西,但是又不一样,一般是放顶层头文件或者全局,具体你要查c++标准,我也没这样用过。

2 报什么错?
(32614119)

出0入0汤圆

发表于 2020-10-9 14:09:06 | 显示全部楼层
wye11083 发表于 2020-10-9 12:49
1 typedef确实是类似于define的东西,但是又不一样,一般是放顶层头文件或者全局,具体你要查c++标准, ...

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(32605495)

出0入66汤圆

 楼主| 发表于 2020-10-9 16:32:50 来自手机 | 显示全部楼层
solojimes 发表于 2020-10-9 14:09

你加个强制类型转换试试,或者先弄成void*再转换。类里面的函数一般来说都是全局的,继承的函数会通过virtual ptr表去找。
(32599062)

出0入0汤圆

发表于 2020-10-9 18:20:03 | 显示全部楼层
wye11083 发表于 2020-10-9 16:32
你加个强制类型转换试试,或者先弄成void*再转换。类里面的函数一般来说都是全局的,继承的函数会通过vi ...

而类成员函数指针就不仅仅是类成员函数的内存起始地址,还需要能解决因为C++的多重继承、虚继承而带来的类实例地址的调整问题,所以类成员函数指针在调用的时候一定要传入类实例对象。

https://blog.csdn.net/qq_3766843 ... 9#comments_13380571

参考一下
(32598650)

出0入66汤圆

 楼主| 发表于 2020-10-9 18:26:55 来自手机 | 显示全部楼层
solojimes 发表于 2020-10-9 18:20
而类成员函数指针就不仅仅是类成员函数的内存起始地址,还需要能解决因为C++的多重继承、虚继承而带来的 ...

所以我叫你强制转换啊。
(32509136)

出0入0汤圆

发表于 2020-10-10 19:18:49 | 显示全部楼层
solojimes 发表于 2020-10-9 11:33
请教两个关于 C++的问题,也是困扰我两天的问题。
1、
此处 typedef 的函数指针定义为啥我不能放在类里面, ...

1。放到外边是全局的定义,类型是ShellFunctionT,放到类里边定义类型是X_Shell::ShellFunctionT
2。void X_Shell::shellListCommand(char argc, char *argv) 是 void (X_Shell::*)(char , char *)类型,不是void (*)(char , char *) 类型
void (X_Shell::*)(char , char *)是类成员函数指针,参数隐含this指针,是和X_Shell类的实例绑定的,可以使用this指针访问类内部变量。
void (*)(char , char *)不和任何类实例绑定,不能使用this指针。
类内部的static 函数不和类绑定,static void X_Shell::shellListCommand(char argc, char *argv)不和任何类实例绑定,不能访问类内部非static变量


为了通用的话接口不要定义为void (*)(char , char *),定义成std::function<void(char,char*)> 类型,类外的函数和static函数直接传进来,
类内部的函数用std::bind绑定下在传进来
(32352949)

出0入0汤圆

发表于 2020-10-12 14:41:56 | 显示全部楼层
顶一下,学习
(31764374)

出0入0汤圆

发表于 2020-10-19 10:11:31 来自手机 | 显示全部楼层
楼主好人,请教个问题:现在用C#编一个界面,里面有一部分实时显示摄像头图像,现在需要拍一张照片,然后在和摄像头实时采集图像进行对比。但是不知道怎么实现,楼主如有思路,请指教,谢谢
(31763652)

出0入66汤圆

 楼主| 发表于 2020-10-19 10:23:33 来自手机 | 显示全部楼层
heyangfengyue 发表于 2020-10-19 10:11
楼主好人,请教个问题:现在用C#编一个界面,里面有一部分实时显示摄像头图像,现在需要拍一张照片,然后在 ...

对比什么?你这可能涉及到图像检测或图像识别领域了。

如果只是单纯的显示,那你一边一个好了,静态图像最简单的可以用picture控件,但是注意csharp的picture控件非常难用(加载图像文件之后会占有文件句柄造成文件被系统锁定),而且动态刷流时极易崩溃,如果不在乎cpu可以用opengl。mfc做这件事比csharp要方便10000倍。
(31757281)

出0入0汤圆

发表于 2020-10-19 12:09:44 | 显示全部楼层
点赞,支持你,大佬!
(31553328)

出0入0汤圆

发表于 2020-10-21 20:48:57 | 显示全部楼层
wye11083 发表于 2020-10-19 10:23
对比什么?你这可能涉及到图像检测或图像识别领域了。

如果只是单纯的显示,那你一边一个好了,静态图像 ...

拍摄的图像是用于对比位置的,就是拍摄一张图片,然后和摄像头里面的图像进行对比,发现位置有偏差了就纠正偏差,使之对齐。是想实现这样的功能
(31549794)

出0入66汤圆

 楼主| 发表于 2020-10-21 21:47:51 来自手机 | 显示全部楼层
heyangfengyue 发表于 2020-10-21 20:48
拍摄的图像是用于对比位置的,就是拍摄一张图片,然后和摄像头里面的图像进行对比,发现位置有偏差了就纠 ...

那你这得做图像匹配,你找找opencv。
(31548859)

出0入0汤圆

发表于 2020-10-21 22:03:26 | 显示全部楼层
wye11083 发表于 2020-10-21 21:47
那你这得做图像匹配,你找找opencv。

拍个照片只是参考,调节位置,是手动调节的,不是自动调节,用不着OPENCV。我现在是获取了摄像头的实时图像,也可以拍照,但是不知道怎么把图片叠加在摄像头的实时图像上,望指教,谢谢
(31542369)

出0入66汤圆

 楼主| 发表于 2020-10-21 23:51:36 来自手机 | 显示全部楼层
heyangfengyue 发表于 2020-10-21 22:03
拍个照片只是参考,调节位置,是手动调节的,不是自动调节,用不着OPENCV。我现在是获取了摄像头的实时图 ...

取bitmap,然后直接用指针访问就行了。网上有例程。
(31485549)

出0入0汤圆

发表于 2020-10-22 15:38:36 | 显示全部楼层
wye11083 发表于 2020-10-21 23:51
取bitmap,然后直接用指针访问就行了。网上有例程。

好滴,谢谢大神指导
(31468344)

出0入0汤圆

发表于 2020-10-22 20:25:21 | 显示全部楼层
  1. main()
  2. {
  3.         signed char i;
  4.         i=0xff;
  5.         D1=0;
  6.         if(i==0xff)
  7.                 D1=0;
  8.         else
  9.                 D1=1;
  10.         while(1);
  11. }
复制代码

这段代码的执行结果 D1为1,请问是什么原因?
(31464066)

出0入66汤圆

 楼主| 发表于 2020-10-22 21:36:39 来自手机 | 显示全部楼层
iamastu 发表于 2020-10-22 20:25
这段代码的执行结果 D1为1,请问是什么原因?

如果你按signed char,那么它=-1,显然不等于0xff(255)。当值未显式定义长度时,编译器默认为标准int类型数据。
(31205722)

出0入0汤圆

发表于 2020-10-25 21:22:23 | 显示全部楼层
谢谢wye11083,应该是将i的值转换成 int 类型,变为0xffff,与 0xff 不相等了。
(30381795)

出0入0汤圆

发表于 2020-11-4 10:14:30 | 显示全部楼层
我设计的ZNYQ的板子SD卡启动不了,同样的最小系统板子做了几款,其他的都可以,有一款的就是无法启动,困惑一周多了
(30374721)

出0入66汤圆

 楼主| 发表于 2020-11-4 12:12:24 来自手机 | 显示全部楼层
yongjia 发表于 2020-11-4 10:14
我设计的ZNYQ的板子SD卡启动不了,同样的最小系统板子做了几款,其他的都可以,有一款的就是无法启动,困惑 ...

(1)查ddr3,(2)串口跟踪uboot信息,(3)检查ps复位,progb,initb,done,
(30367058)

出0入0汤圆

发表于 2020-11-4 14:20:07 | 显示全部楼层
wye11083 发表于 2020-11-4 12:12
(1)查ddr3,(2)串口跟踪uboot信息,(3)检查ps复位,progb,initb,done,

1,DDR部分重新配置参数表了,
2,串口无输出,但是示波器上能测量到读写的波形
3:PS复位是好的,initb,done 肯定不对啦
(28624603)

出0入0汤圆

发表于 2020-11-24 18:21:02 | 显示全部楼层
在那里向楼主提问呢
(28460947)

出0入0汤圆

发表于 2020-11-26 15:48:38 | 显示全部楼层
为楼主的无私奉献点个赞!最近没有时间上网!来冒个泡!
(28270585)

出0入4汤圆

发表于 2020-11-28 20:41:20 | 显示全部楼层
目前学习FPGA CPLD优先选 Xilinx还是Altera
(28260775)

出0入66汤圆

 楼主| 发表于 2020-11-28 23:24:50 来自手机 | 显示全部楼层
ilan2003 发表于 2020-11-28 20:41
目前学习FPGA CPLD优先选 Xilinx还是Altera

xilinx功能更强大,没有altera了,现在叫intel。xilinx熟了可以考虑安路紫光高云等国产系了,现在可堪用了。
(26814391)

出0入0汤圆

发表于 2020-12-15 17:11:14 | 显示全部楼层
本帖最后由 654705188 于 2020-12-15 17:24 编辑

在a.h中定义结构体
typedef struct a
{
   int x;
}tA;

在b.h中引用tA
#include “a.h”
typedef struct b
{
   tA ab;
}tB;

在c.h中引用tA,tB
#include “b.h”
typedef union c
{
  tB bc;
}tC;
这样写MDk回报\Application\b.h(183): error:  #70: incomplete type is not allowed
请教大神,怎样才能不报错。
(26801311)

出0入66汤圆

 楼主| 发表于 2020-12-15 20:49:14 来自手机 | 显示全部楼层
654705188 发表于 2020-12-15 17:11
在a.h中定义结构体
typedef struct a
{

这typedef struct后面名字放到结构体后面试试。标准c似乎不支持这么写,vc一样会报错。
(26736732)

出0入0汤圆

发表于 2020-12-16 14:45:33 | 显示全部楼层
楼主想请教一下用FPGA做高速信号处理的问题。我现在采样率是3.2G,FPGA的时钟是200M的,相当于一个时钟周期回来16个数据。我现在想对数据做一下滤波(调用FIR的ip核),但是FPGA的时钟只有200M,一个时钟周期出来一个数据的话,数据根本处理不过来。这种情况是怎么处理呢?
(26727799)

出0入66汤圆

 楼主| 发表于 2020-12-16 17:14:26 来自手机 | 显示全部楼层
我是谁712 发表于 2020-12-16 14:45
楼主想请教一下用FPGA做高速信号处理的问题。我现在采样率是3.2G,FPGA的时钟是200M的,相当于一个时钟周期 ...

那你只能放16个核 并行平推了。
(26561044)

出0入85汤圆

发表于 2020-12-18 15:33:41 | 显示全部楼层
请教如何评估一个FPGA的并行总线,能够可靠的驱动多个从机?
(26547518)

出0入66汤圆

 楼主| 发表于 2020-12-18 19:19:07 来自手机 | 显示全部楼层
marshallemon 发表于 2020-12-18 15:33
请教如何评估一个FPGA的并行总线,能够可靠的驱动多个从机?

示波器看沿。
(26124893)

出0入0汤圆

发表于 2020-12-23 16:42:52 | 显示全部楼层
回答了多少问题了?
(26117009)

出0入66汤圆

 楼主| 发表于 2020-12-23 18:54:16 来自手机 | 显示全部楼层
sege1 发表于 2020-12-23 16:42
回答了多少问题了?

没几个。。
(21997922)

出0入0汤圆

发表于 2021-2-9 11:05:43 | 显示全部楼层
求vivado2020.2版本的一个破解license文件,网上搜到的链接都不存在
(21996465)

出0入66汤圆

 楼主| 发表于 2021-2-9 11:30:00 来自手机 | 显示全部楼层
lzlym182 发表于 2021-2-9 11:05
求vivado2020.2版本的一个破解license文件,网上搜到的链接都不存在

随便找一个就能用,所有版本通用。
(21995934)

出0入0汤圆

发表于 2021-2-9 11:38:51 | 显示全部楼层
wye11083 发表于 2021-2-9 11:30
随便找一个就能用,所有版本通用。

找到的有的要会员积分下载,有的链接不存在(百度分享,无一例外),先装一个vivado HL WebPACK(期间限定版的)。不知道限定哪些期间,我要用的器件是zynq7035,不知道会不会有限制

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
(15907650)

出0入0汤圆

发表于 2021-4-20 22:50:15 | 显示全部楼层
支持楼主~
(12325414)

出0入0汤圆

发表于 2021-6-1 09:54:11 | 显示全部楼层
请教大神,如何动态生成函数指针:
如下
typedef void (*PFUN)(void)

void taskConstruct(PFUN fn, const uint8_t period)
{
    _SS
    WaitX(period);
    fn();
    _EE
}

PFUN taskCreate(PFUN fn, const uint8_t period)
{
    taskConstruct(fn, period);

    return taskConstruct;
}

我希望每次taskCreate返回一个新的taskConstruct函数指针,而不是固定的或者要提前写好可能的函数,把指针映射过来。
(12324703)

出0入66汤圆

 楼主| 发表于 2021-6-1 10:06:02 来自手机 | 显示全部楼层
MegaHealth 发表于 2021-6-1 09:54
请教大神,如何动态生成函数指针:
如下
typedef void (*PFUN)(void)

没见过你要的语法。你要对每种数据类型设置一个不同的函数?那就用define,用#define func(a,b) (a)_##(b)这种动态生成函数。具体用法请参考openblas的kernel函数,它的所有函数名都是cname,通过编译时根据一大堆define生成对应符号和优化过的函数。
(12324546)

出0入0汤圆

发表于 2021-6-1 10:08:39 | 显示全部楼层
wye11083 发表于 2021-6-1 10:06
没见过你要的语法。你要对每种数据类型设置一个不同的函数?那就用define,用#define func(a,b) (a) ...

好的,谢谢指教
(12323962)

出0入0汤圆

发表于 2021-6-1 10:18:23 | 显示全部楼层
wye11083 发表于 2021-6-1 10:06
没见过你要的语法。你要对每种数据类型设置一个不同的函数?那就用define,用#define func(a,b) (a) ...

用define似乎还是不行,因为define的函数在调用处是直接拷贝代码,无法获取函数指针,我需要函数指针
(12319887)

出0入66汤圆

 楼主| 发表于 2021-6-1 11:26:18 来自手机 | 显示全部楼层
MegaHealth 发表于 2021-6-1 10:18
用define似乎还是不行,因为define的函数在调用处是直接拷贝代码,无法获取函数指针,我需要函数指针 ...


应该不是。你语法写错了可能。或者你转一下,比如func fn=dfunc(x,y);
调用fn(...);
然后返回fn。这样fn是生成的函数。
否则blas就吃翔了。毕竟blas代码里面全是cname,不存在详细指定的函数名。这也因为blas的kernel函数是通用的。
(9907939)

出0入0汤圆

发表于 2021-6-29 09:25:26 | 显示全部楼层
wye11083 发表于 2020-6-26 07:46
器件批量一致性是不可靠的。而且我们是应用在24x365场合的。加抖动解决不了所有问题,留出足够余量才能做 ...

楼主这个方法确实是个很好的思路,回头试一下效果
(9514116)

出0入0汤圆

发表于 2021-7-3 22:49:09 | 显示全部楼层

为楼主的无私奉献点个赞
(7893154)

出0入0汤圆

发表于 2021-7-22 17:05:11 | 显示全部楼层
靠长时间积累
(7022464)

出0入0汤圆

发表于 2021-8-1 18:56:41 | 显示全部楼层
现在只会一些简单的verilog语法,请问如果要深入学习的话,路径是什么。自己写一个cpu这种怎么样?
(7019787)

出0入66汤圆

 楼主| 发表于 2021-8-1 19:41:18 来自手机 | 显示全部楼层
司马青衫 发表于 2021-8-1 18:56
现在只会一些简单的verilog语法,请问如果要深入学习的话,路径是什么。自己写一个cpu这种怎么样? ...

有钱有闲可以自己慢慢写,一般fpga建议用vexriscv。verilog想要深入必须得有实际项目支持,然后是把语法弄熟,数字电路基础搞熟,常用数字电路模型记熟,然后就能写好一些中低复杂度模块了。流水线算法的可以用hls从c语言转,但hls对ram支持不太好。

fpga代码优化是个长期工作,如果你只是突然的想去学一下,那么不一定能学成。毕竟硬件跟软件是完全的2套不同的东西,硬件更着重积累,积累不够,github也没用。虽然用软件的方法去写多数也能用,然而资源和效率不一定行。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

GMT+8, 2021-10-22 01:37

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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