我正在使用运行u-boot的嵌入式linux工具包.为了使一切正常启动,我不得不修改一些环境变量并使用'saveenv'命令存储它们.
现在我想回过头来看看默认值是什么,验证我确切知道改变了什么,并想出一种方法来改变这些默认值,这样生产中的每个单元都不需要单独启动和修改.
有没有办法告诉u-boot清除任何已保存的数据,以便我可以再次查看默认值?闪存类型是QSPI,如果这有所不同.
我正在尝试使用64位CentOS 6 将极高速数据从一个应用程序传输到另一个应用程序.我已经完成了以下基准测试dd,发现管道阻止了我而不是程序中的算法.我的目标是达到大约1.5 GB/s的速度.
首先,没有管道:
dd if=/dev/zero of=/dev/null bs=8M count=1000
1000+0 records in
1000+0 records out
8388608000 bytes (8.4 GB) copied, 0.41925 s, 20.0 GB/s
Run Code Online (Sandbox Code Playgroud)
接下来,两个dd进程之间的管道:
dd if=/dev/zero bs=8M count=1000 | dd of=/dev/null bs=8M
1000+0 records in
1000+0 records out
8388608000 bytes (8.4 GB) copied, 9.39205 s, 893 MB/s
Run Code Online (Sandbox Code Playgroud)
我可以对内核或其他任何可以改善通过管道运行数据的性能的调整吗?我也尝试了命名管道,并获得了类似的结果.
根据这里的问题,从double/float到无符号整数的直接转换是不可移植的.我发现我的代码中有一些情况会发生这种情况,我想告诉g ++警告我,如果发生这种情况,但我找不到这样的选择.有谁知道是否有选项可以做到这一点?
注意:我确实看到了-Wconversion,但是它也警告了我不关心的所有其他转换(比如将int转换为unsigned int,它可以按标准移植).
编辑:这是一个代码示例,我希望看到一个警告:
double dblNumber = -234;
unsigned long uintNumber = dblNumber;
Run Code Online (Sandbox Code Playgroud)
在g ++的一个版本中,这给了我一个整数值0xFFFFFF16(在2的补码中为-234).在另一个它给我0.显然代码是模糊的,这就是为什么它可以理解为不被认为是便携式的.
我有两个程序通过linux管道(命名或其他)传递数据.我需要在两个程序之间达到~2600 MB/s的传输速率,但目前看到的速度约为~2200 MB/s.但是,我发现如果用'dd'代替我的第二个进程,传输速率会跳到3000 MB/s以上.关于我的程序从管道中读取的方式是否存在一些效率低于'dd'的方式?我该怎么做才能提高吞吐量?'ifstream'本身是否比从管道中读取二进制数据的其他方法慢?
总结这两种情况:
场景1:
程序1 - > [命名管道] - >程序2
产量~2200 MB/s传输速率
Scenario2:
程序1 - > [命名管道] - >'dd if = pipename of =/dev/null bs = 8M'
产量~3000 MB/s传输 速率.
这是我的程序2当前从管道中读取的方式:
ifstream inputFile;
inputFile.open(inputFileName.c_str(), ios::in | ios::binary);
while (keepLooping)
{
inputFile.read(&buffer[0], 8*1024*1024);
bytesRead = inputFile.gcount();
//Do something with data
}
Run Code Online (Sandbox Code Playgroud)
更新:
我现在尝试使用'read(fd,&buffer [0],8*1024*1024)'代替istream,似乎显示出轻微的改善(但不如dd那么多)
我也尝试使用stream-> rdbuf() - > sgetn(&buffer [0],8*1024*1024)而不是stream-> read(),这没有用.
我有一个CMake项目,我有时想要针对静态boost库进行编译,但我还希望能够轻松地使用cmake GUI中的动态库.在我的顶级CMakeLists.txt我有这个:
option(USE_STATIC_BOOST "Build with static BOOST libraries instead of dynamic" NO)
Run Code Online (Sandbox Code Playgroud)
然后在另一个文件中,我设置了以下逻辑:
if(USE_STATIC_BOOST)
unset(Boost_LIBRARIES)
message(WARNING "Linking against boost static libraries")
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
find_package(Boost REQUIRED COMPONENTS thread program_options system)
else(USE_STATIC_BOOST)
unset(Boost_LIBRARIES)
message(WARNING "Linking against boost dynamic libraries")
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
find_package(Boost REQUIRED COMPONENTS thread program_options system)
endif(USE_STATIC_BOOST)
Run Code Online (Sandbox Code Playgroud)
如果我从头开始使用,这似乎工作正常:
cmake ../.. -DUSE_STATIC_BOOST=YES
Run Code Online (Sandbox Code Playgroud)
但是,当我使用时
ccmake ../..
Run Code Online (Sandbox Code Playgroud)
无论我做什么,我都无法使用静态库.CMake似乎在启动时将动态选项加载到缓存中,并且更改USE_STATIC_BOOST不会切换它.我甚至试图取消设置(Boost_LIBRARIES)以明确清除它.有没有办法做我想做的事情?
使用x86_64 Linux和g ++进行编译.提前致谢!
我最近开始在Fedora Linux上使用Eclipse Juno(4.2).在以前版本的eclipse中,我只需单击并将源文件名拖动到屏幕边缘,然后用鼠标分割我的窗口.现在,当我单击+拖动Eclipse时会显示一些绿色轮廓,我无法弄清楚如何在不按键盘输入的情况下接受更改.有谁知道它是否有可能带回鼠标可以做任何事情的先前行为?谢谢!
编辑:听起来Eclipse中可能存在错误,至少在使用Fedora 17 64位时是这样.
我有一个单一的项目(含子项目),为此,我想生成的而不是在一个单一的NSIS安装列出的多个组件的多个NSIS安装可执行文件.这可能吗?或者我是否需要将代码组织到单独的项目中?
我有一个直接在linux帧缓冲区(没有x-Windows)上运行的嵌入式linux应用程序。现在,我们必须将显示器物理旋转180度。如何使我的Qt应用程序旋转以使其不会倒挂?我看到了使用以下选项的参考:
-platform linuxfb:fb=/dev/fb0:rotation:180
Run Code Online (Sandbox Code Playgroud)
但是,旋转选项似乎被忽略了。
在Ubuntu服务器16.04.6上使用Qt 5.9.2
我正在开发一个基于终端的程序,它具有unicode支持.在某些情况下,我需要确定字符串在打印之前将消耗多少个终端列.不幸的是,有些字符是2列宽(中文等),但我发现这个答案表明检测全角字符的好方法是从ICU库调用u_getIntPropertyValue().
现在我正在尝试解析我的UTF8字符串的字符并将它们传递给此函数.我现在遇到的问题是u_getIntPropertyValue()需要一个UTF-32代码点.
从utf8字符串获取此信息的最佳方法是什么?我目前正在尝试使用boost :: locale(在我的程序中的其他位置使用),但是我无法获得干净的转换.来自boost :: locale的我的UTF32字符串预先设置了零宽度字符以指示字节顺序.显然我可以跳过字符串的前四个字节,但有更简洁的方法吗?
这是我目前丑陋的解决方案:
inline size_t utf8PrintableSize(const std::string &str, std::locale loc)
{
namespace ba = boost::locale::boundary;
ba::ssegment_index map(ba::character, str.begin(), str.end(), loc);
size_t widthCount = 0;
for (ba::ssegment_index::iterator it = map.begin(); it != map.end(); ++it)
{
++widthCount;
std::string utf32Char = boost::locale::conv::from_utf(it->str(), std::string("utf-32"));
UChar32 utf32Codepoint = 0;
memcpy(&utf32Codepoint, utf32Char.c_str()+4, sizeof(UChar32));
int width = u_getIntPropertyValue(utf32Codepoint, UCHAR_EAST_ASIAN_WIDTH);
if ((width == U_EA_FULLWIDTH) || (width == U_EA_WIDE))
{
++widthCount;
}
}
return widthCount;
}
Run Code Online (Sandbox Code Playgroud) 在MVSC中,当我#include <stdint.h>,我最终得到UINTX_C和INTX_C宏的以下定义:
#define INT8_C(x) (x)
#define INT16_C(x) (x)
#define INT32_C(x) ((x) + (INT32_MAX - INT32_MAX))
#define UINT8_C(x) (x)
#define UINT16_C(x) (x)
#define UINT32_C(x) ((x) + (UINT32_MAX - UINT32_MAX))
Run Code Online (Sandbox Code Playgroud)
很明显,8位和16位宏只是通过未经修改的常量,这并不能完全执行它们的设计.是否有一个不同的文件包含在Windows上以获得正确的定义?
c++ ×5
linux ×4
cmake ×2
pipe ×2
boost ×1
c ×1
cpack ×1
eclipse ×1
eclipse-cdt ×1
framebuffer ×1
g++ ×1
ifstream ×1
macros ×1
named-pipes ×1
performance ×1
qt ×1
qt5 ×1
u-boot ×1
ubuntu-16.04 ×1
unicode ×1
utf-32 ×1
utf-8 ×1
windows ×1