我正在尝试在C中使用malloc启动静态变量(在函数内),但我得到的是"初始化程序不是常量错误".我知道我不能在C中用非常量启动静态,但是有人能想到一个解决方案吗?我需要代码具有与此相同的效果:
static int *p = (int *)malloc(sizeof(int));
Run Code Online (Sandbox Code Playgroud)
有诀窍/解决方法吗?
编辑:我有一个函数,每次标志变高时调用.在这个函数中,我正在创建并启动一个新线程.我声明了一个指向结构的指针,并使用malloc分配内存,然后将此指针传递给线程.然后该函数返回控制.当我重新进入该函数时,我最初打开的线程仍将运行,我希望能够访问我最初传递给线程的内存区域.这就是为什么我需要一个静态,以便我可以在第一次调用时使用malloc,然后在后续调用中使用相同的地址.这样我就可以从线程中获取信息.这一切都是为了避免使用全局变量.
我正在研究 Pandaboard 上的启动步骤。根据此操作指南,它们有多个引导步骤(引导 rom > X-loader 或 SPL > U-boot > Linux 内核)。实际上,我不明白为什么他们的这些步骤效率低下。我不能只加载 u-boot 而不是使用名为“MLO”的文件吗?“MLO”实际上是做什么的?他们必须放置“MLO”而不是直接加载 u-boot 是否有任何重要原因?
我在中断处理程序中使用静态变量,使中断处理程序不可重入.
谢谢
PS.我正在使用Linux.我正在使用的编程语言是C,如果它有所作为.
我想在Xilinx FPGA的MGT通道上发送信号(无论什么类型的信号,只是随机二进制).这用于测试PCB上的MGT迹线.我能做到这一点最简单的方法是什么?对于常规IO,我只需使用输出缓冲器(OBUF)并将信号发送到输出引脚.对于MGT银行引脚,这相当于(或最简单的等价物)是什么?
编辑:我想尽可能远离ipcores.我正在寻找一种非常简单的解决方案,以某种方式缓冲信号到MGT引脚.
我需要将一块内存与C中的固定值进行比较.我可以用memcmp做这个吗?就像是:
memcmp(starting_address,fixed_value,num_byte)
我需要fixed_value作为固定值而不是块的起始地址.
如果不可能,任何人都可以告诉我一个与memcmp一样快(或更快)的解决方案吗?
谢谢,
编辑:假设我有5GB的内存,保持0.我正在努力确保他们都是0.检查块的第一个字节是否安全,然后执行此操作:
memcmp(starting_address,starting_address + ONE_BYTE,FIVE_GB); ?
编辑:这就是为什么我需要使用memcmp而不是用户定义的循环:
此代码运行了546个时钟周期:
memset(0x80000000 , 0x1 , 0x10000000);
memset(0x90000000 , 0x1 , 0x10000000);
memcmp(0x80000000 , 0x90000000 , 0x10000000);
Run Code Online (Sandbox Code Playgroud)
vs这个花了7669个时钟滴答:
unsigned int i;
int flag = 0;
int *p = 0x80000000;
int *q = 0x90000000;
while(p < 0x90000000)
{
if(*p++ != *q++)
{
flag = 1;
}
}
Run Code Online (Sandbox Code Playgroud) 在C中使用-O0编译器标志时,告诉编译器避免任何类型的优化.将变量定义为时volatile
,告诉编译器避免优化该变量.我们可以互换使用这两种方法吗?如果是这样,有什么优点和缺点?以下是我能想到的一些优点和缺点.还有吗?
优点:
volatile
.如果代码显示错误行为,而不是进入代码并找到哪些变量需要声明为volatile,我们可以使用-O0标志来消除优化导致问题的可能性.缺点:
volatile
关键字只影响特定的变量.例如,如果我们正在研究一个小型微控制器,这可能是一个问题,因为使用-O0可能会产生一个大的可执行文件.这些功能有什么区别吗?如果不是,为什么?
__m128 __mm_set1_ps(float a)
__m128 __mm_set_ps1(float a)
Run Code Online (Sandbox Code Playgroud)
Intel Intrinsics Guide网站上的两种描述是相同的。谢谢你。
在FPGA编程中,在XDC(或UCF)文件中使用create_clock命令有什么意义?假设我有一个时钟端口CLK,它被分配给XDC(或UCF)文件中的物理引脚(我的时钟).为什么我不能继续在我的顶级HDL中使用这个CLK引脚?为什么我需要添加这样的东西:
create_clock -name sys_clk_pin -period "XXX" [get_ports "CLK"]
Run Code Online (Sandbox Code Playgroud)
另外,假设我有一个主时钟"CLK"以及我用HDL生成的其他一些时钟.我是否必须对XDC中的所有次要时钟使用"create_clock"?
我没有得到这整个"create_clock"的东西.任何帮助或方向都非常感谢.
谢谢
我有以下子模块:
module test
(
input [LENGTH : 1] array;
);
...
endmodule
Run Code Online (Sandbox Code Playgroud)
我从顶部模块调用它,如下所示:
...
wire [LENGTH-1 : 0] array_top;
test test_i
(
.array (array_top);
);
...
Run Code Online (Sandbox Code Playgroud)
假设LENGTH
两个模块中的内容相同。
array_top
映射到?array
array_top
array
array[0]
?在我的TCL脚本中,我使用了几个我没有源代码的程序.所有这些过程都执行一些任务并输出大量消息.但我只是希望完成任务,我想要压制消息.有没有办法做到这一点.
所以例如我想运行一个这样的过程:
my_proc $arg1 $arg2 $arg3
Run Code Online (Sandbox Code Playgroud)
并压制它的所有消息.任何变通办法/智能替代方案都值得赞赏.
更多信息:我正在使用一个自定义shell,它将一个TCL文件作为参数并运行它.在这个自定义shell中,我可以访问一些我没有代码的TCL过程.
或者甚至有什么方法可以让脚本的输出转到文件而不是命令提示符(stdout)?
使用ESP8266并使用以下AT命令可以成功获取该网页:
AT+CIPSTART="TCP","www.somewebsite.com",80
AT+CIPSEND=80
> GET http://www.somewebsite.com HTTP/1.0
<I get a bunch of HTML here>
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都很好。现在,我的网站上有一个php页面,该页面带有一些参数并相应地更新了数据库中的表。所以当我输入:
http://www.mywebsite.com/mypage.php?arg1 = one&arg2 = two
它成功更新了表。现在,当我尝试使用ESP8266进行相同操作时,出现DNS失败:
AT+CIPSTART="TCP","http://www.mywebsite.com/mypage.php?arg1=one&arg2=two",80
<get DNS fail here>
Run Code Online (Sandbox Code Playgroud)
即使我尝试不带参数的php页面,我也会收到DNS失败:
AT+CIPSTART="TCP","http://www.mywebsite.com/mypage.php",80
<get DNS fail here>
Run Code Online (Sandbox Code Playgroud)
有人知道发生了什么吗?可能是php页面不在端口80上吗?如果是这样,我如何找出它在哪个端口上?
顺便说一句,如果我对网站上的html页面执行相同操作,则效果很好。
编辑:当我尝试这样做:
AT+CIPSTART="TCP","www.mywebsite.com",80
> GET /mypage.php?arg1=one,arg2=two
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
未找到错误404
当我尝试:
AT+CIPSTART="TCP","www.mywebsite.com",80
> GET http://www.mywebsite.com/mypage.php?arg1=one,arg2=two
Run Code Online (Sandbox Code Playgroud)
我得到的是www.mywebsite.com/index.html的html代码,而不是php页面。
我也不确定GET命令中的“ HTTP / 1.0”是做什么的?