我做了一个非常简单的基准测试程序,用4种不同语言计算高达10,000,000的所有素数.
以上是每次平均3次运行,用户时间
Node.js运行速度最快.这让我很困惑,原因有两个:
我用-O2优化编译了c代码,但我尝试了所有级别的优化,并没有产生显着的差异.
"use strict";
var isPrime = function(n){
//if (n !== parseInt(n,10)) {return false};
if (n < 2) {return false};
if (n === 2) {return true};
if (n === 3) {return true};
if (n % 2 === 0) {return false};
if (n % 3 === 0) {return false};
if (n % 1) {return false};
var sqrtOfN = Math.sqrt(n);
for (var i = 5; …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用运行 Angstrom(3.8 内核)的 Beaglebone Black 与位于 9600-N-8-1 的半双工 RS-485 网络上的设备进行通信。
我正在尝试使用与此类似的 RS-485 分线板:https : //www.sparkfun.com/products/10124,但芯片是 MAX3485 http://www.maximintegrated.com/datasheet/index .mvp/id/1079。我购买了预先组装有引脚和端子条的电路板。我的一个朋友用示波器对其进行了测试,并声称 RS-485 板确实可以工作。该板有五个连接到 BBB 的引脚。3-5V(电源)、RX-I、TX-O、RTS 和 GND。
我在 BBB 上禁用了 HDMI 支持,以便UART4_RTSn和UART4_CTSn引脚可用。
mkdir /mnt/boot
mount /dev/mmcblk0p1 /mnt/boot
nano /mnt/boot/uEnv.txt
#change contents of uEnv.txt to the following:
optargs=quiet capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN
Run Code Online (Sandbox Code Playgroud)
然后我找到了一个覆盖来启用带有 RTS/CTS 控制的 UART-4:
/*
* Modified version of /lib/firmware/BB-UART4-00A0.dtbo to add RTS so we can reset Arduinos
*/
/dts-v1/;
/plugin/;
/ {
compatible = "ti,beaglebone", "ti,beaglebone-black";
part-number = …Run Code Online (Sandbox Code Playgroud) 我正在使用 Python 开发一个应用程序,该应用程序通过 RS-485 两线、半双工与设备进行通信。我的应用程序已经足够运行,可以执行一些性能测试。我使用的是带有 USB 至 485 转换器的笔记本电脑。通讯设置为9600,N,8,1。
对于速度测试,我发送一条总长度为 10 个字节的消息,包括校验字节。然后我等待13个字节的回复。我在收到回复时对其进行解码。当回复完成时。然后我发送下一条消息。我尽可能快地重复这句话 100 次。这需要 2.895 秒。
据此,我计算出我正在发送/接收 23 字节 * 100 次迭代/2.895 秒 = 794 字节/秒。
如果我理解正确的话,9600 N-8-1的串口通信有1个起始位,8个数据位和1个停止位。这意味着它有 2 位开销。所以实际理论传输速率为(9600位/秒)*(8个数据位/10个传输位)*(1字节/8位)=960字节/秒。
我的程序以 794 字节/秒的组合速率发送/接收,而可能的 960 字节/秒 = 82.7%。
我应该能够实现接近 100% 的 960 字节/秒吗?或者说这么多的带宽没有被利用是很常见的吗?
我有一个结构数组,一些结构成员是常量我想做一个数组的深层副本.该副本也将具有与常量相同的结构成员.如何在不违反const指令的情况下将值初始化为新数组.
下面是我的代码的摘录.实际的程序很长,但我想我已经包含了所有相关的代码.在这个例子中,键被声明为一个全局变量,我想从中创建新的实例.我认为它有点像带预设值的模板.
当我尝试使用gcc在Debian中编译它时,我收到以下错误:
main.c:216:9: error: assignment of read-only location ‘*(new_keys + (unsigned int)((unsigned int)index * 540u))’make: *** [main.o] Error 1
Run Code Online (Sandbox Code Playgroud)
makefile使用以下限定符:
CFLAGS=-c -g -std=gnu99 -D_XOPEN_SOURCE=700
Run Code Online (Sandbox Code Playgroud)
有趣的是.即使为C语言方言GNU99设置了Xcode,我也可以在Xcode中编译相同的代码而不会出现错误或警告[-std = gnu99]
我可以简单地通过去除const关键字来使我的代码工作.但这些价值确实应该是常数.一旦这些数组初始化,它们将永远不会改变.我想了解如何正确地做到这一点,并且我想知道为什么这在Xcode而不是gcc中有效.
头文件
typedef struct {
char * name;
char * alias;
int number;
} pair_int_t;
typedef struct {
const char * const name;
const kind_t kind; // kind is enum type
const pair_int_t * const enum_array;
bool received;
const char * const alias;
} key_descriptor_t;
typedef key_descriptor_t keys_descriptor_t[_END_OF_KEYS+1]; …Run Code Online (Sandbox Code Playgroud) 可以将pm2与自定义c程序一起使用吗?如果是这样,这是如何完成的?它运作良好吗?您是否已经将pm2用于node.js应用程序,也可以将其用于ac程序吗?
我在两台不同的计算机上使用以下功能.一台计算机运行Ubuntu,另一台运行OS X.该功能适用于OS X,但不适用于Ubuntu.
#include <stdio.h>
#define MAXBUF 256
char *safe_strncat(char *dest, const char *src, size_t n) {
snprintf(dest, n, "%s%s", dest, src);
return dest;
}
int main(int argc, const char * argv[]){
char st1[MAXBUF+1] = "abc";
char st2[MAXBUF+1] = "def";
char* st3;
printf("%s + %s = ",st1, st2);
st3 = safe_strncat(st1, st2, MAXBUF);
printf("%s\n",st3);
printf("original string = %s\n",st1);
}
Run Code Online (Sandbox Code Playgroud)
编译并在Ubuntu上运行
gcc concat_test.c -o concat_test
./concat_test
abc + def = def
原始字符串= def
在OS X中编译并运行Xcode
abc + def = abcdef
原始字符串= …