请教老师,我最近用boa搭了个web服务器,怎么做压力测试呢?
基于嵌入式的语音压缩系统
老是您好,我想做个基于S3C2410的语音压缩系统,请问下直接在ARM里跑算法呢,还是用ARM控制带有压缩算法的DSP这种方案呢?哪种方案更实惠,或者说怎么做更容易实现功能啊?谢谢老师
回答swz的问题:基于嵌入式的语音压缩系统
如果你想做比较成功的产品,建议你采用ARM+DSP的方案,因为直接在ARM里跑语音压缩算法的方式性能比较受限,通常难以达到商用的要求,需要借助DSP中的硬件压缩算法。当然,如果你只是做做实验,可以直接用ARM
顶嵌与您一起关注嵌入式行业!
http://www.top-e.org/
回复 25楼 topembedded 的帖子
谢谢老师,工作准备开始了,有问题再向您请教,谢谢。
请教老师, 我用的是一块s3c2410的板,64Msdram。 重新分区,下载vivi, 内核,启动, 到解压完linux,开始启动内核时停住了。
Copy linux kernel from 0x00030000 to 0x30008000, size = 0x00200000 ... done
zImage magic = 0x016f2818
Setup linux parameters at 0x30000100
linux command line is: "noinitrd root=/dev/mtdblock/0 init=linuxrc console=tty1 console=ttyS0"
MACH_TYPE = 193
NOW, Booting Linux......
Uncompressing Linux.............................................................
done, booting the kernel.
到这里停住了,用NFS启动也是到这里停住了。输入part show命令查看分区:
mtdpart info. (4 partitions)
name offset size flag
------------------------------------------------
vivi : 0x00000000 0x00020000 0 128k
param : 0x00020000 0x00010000 0 64k
kernel : 0x00030000 0x00200000 0 2M
root : 0x00230000 0x01f00000 4 31M
输入bon part show:
BON info. (3 partitions)
No: offset size flags bad
---------------------------------------------
0: 0x00000000 0x00030000 00000000 0 192k
1: 0x00030000 0x00200000 00000000 0 2M
2: 0x00230000 0x03dcc000 00000000 0 61M+816k
可见在vivi中没有把全部的sdram都分区,是否会有影响。 我的问题可能出在什么地方。 谢谢!
请教老师:
我用ARM7带一块C盘(NOR Flash)和D盘(Nand FLash),VxWorks系统,运行过程中发生了几次D盘启动扇区设备参数被改写成dos格式文件日期时间的情况,分析发现该日期应该就是最后时刻更新文件目录属性时的日期格式,请问这有可能是在哪个环节诱发了这个错误,按照正常情况启动扇区数据无论如何也不应该被改写的。
应用量比较大,几率发生很小,但集中发生了几次。
[ 本帖最后由 cqusxb 于 2010-2-4 12:20 编辑 ]
老师:
您好!
我现在想学ARM。想直接接触liunx操作系统,这样有什么问题。我手中有一个mini2440的实验板。有他的使用说明。
我读过后认为liunx内核(包括驱动)直接裁剪就可以了。但是应用程序不知道怎么着手写。
我以前从未读过这方面的东西(包括软件)。
我只是初学,就笨笨得问问。不要见笑。
请老师给点建议
两个失踪了
[ 本帖最后由 daicheng 于 2010-3-19 16:05 编辑 ]
回复 31楼 cqusxb 的帖子
有问题随时提问!
老师:arm9学习怎样从硬件开始?
我是做硬件的,会画板,在学校学过一点编程.
想先学其底层硬件电路,布板和驱动
打算买块arm9开发板学习,但淘宝上卖的大多不给pcb文件,看介绍似乎更适合学习软件开发~~
在网上下载了很多很杂的资料,但大多偏软,很少详细解说硬件部分的.....
老师能给我推荐一块适合我学习方向的开发板吗(或架构,用那种型号芯片的)?
北京飞旭科技有限公司 专业的嵌入式技术提供商 详情请登陆公司网站:http://www.fly-sun.com.cn
一直希望单片机也能用上高性能的TCP/IP协议栈。
以前在MCF52259上用过飞思卡尔免费送的嵌入式的 RTCS 协议栈,吞吐性能总不好。
针对这个问题我和飞思卡尔的技术人员进行过深入交流,飞思卡尔的技术人员告诉我解决方法,同时指出根本原因在于MCU的RAM有限,所以“imply lower buffer and data window sizes”。
我想他说的data window size是针对TCP的重发机制的。是不是这么理解:TCP发出数据时,你要保留那些没有得到ACK的数据(必须在data window里面保留这些数据),要达到每秒百M的TCP包速率,这个窗口要用到百M的内存消耗?
我记得在IIS里面可以设置连接超时(超时以后IIS就不管了,爱咋咋地,呵呵!)。IIS默认为120秒,如果要IIS达到百兆速率,那光DATA WINDOW就要占用(12/8)G的内存(网络最糟糕的时候)?
如果确实如此,那有没有避免过多占用RAM的方法?
uc/os ii
开设个uc/os ii也很好哈!!!
关于qte3.3.8键盘问题,请老实指教?
关于qte3.3.8键盘问题,请高手指教?
最近在2410上移植qte3.3.8,交叉编译后把相关库下到开发板上,程序可以运行了,但是键盘没有反映,我板子上原来用的是qte2.3.7版本,键盘都可以正常使用,
不知道为什么换成qte3.3.8之后就没有反映了,下面是我在网上找到的加入自定义键盘的方法,有不太明白的地方,请哪位大哥帮忙看一下,小弟先谢过了!
下面是自定义键盘接口:需要改动的地方有4个,在qt-arm/src/embedded 目录下
1.增加一个mykbd_qws.h,内容如下:
#ifndef MYKBD_QWS_H
#define MYKBD_QWS_H
#include "qkbd_qws.h" //QT定义抽象基类QWSKeyboardHandler
#ifndef QT_NO_MYKBD //编译时可以通过定义这个变量从而不编译这个模块
class MyKbdPrivate; //我们的键盘设备私有类,实现具体的键盘设备操作,如打开键盘、读键盘数据,解析按键等等。
class MyKbdHandler : public QWSKeyboardHandler //供系统调用的键盘句柄
{
public:
MyKbdHandler(const QString&);
virtual ~MyKbdHandler();
private:
MyKbdPrivate *d;
};
#endif // QT_NO_MYKBD
#endif // MYKBD_QWS_H
2.增加一个mykbd_qws.cpp,内容如下:
#include "mykbd_qws.h"
#ifndef QT_NO_MYKBD
#include
#include
#include
#include
#include
#include
#include
#include
class MyKbdPrivate : public QObject
{
Q_OBJECT
public:
MyKbdPrivate( MyKbdHandler *h, const QString& );
virtual ~MyKbdPrivate();
bool isOpen() { return buttonFD > 0; }
private slots:
void readKeyboardData();
private:
QString terminalName;
int buttonFD;
int kbdIdx;
// int kbdBufferLen;
unsigned char kbdBuffer;
QSocketNotifier *notifier;
MyKbdHandler *handler;
};
MyKbdPrivate::MyKbdPrivate(MyKbdHandler *h, const QString &device ) : handler(h)
{
terminalName = device.isEmpty()?"/dev/mykeyboard":device.latin1();
buttonFD = -1;
notifier = 0;
if ((buttonFD = open(terminalName, O_RDWR | O_NDELAY, 0)) < 0)
{
qWarning("Cannot open %s\n", terminalName.latin1());
}
if ( buttonFD >= 0 ) {
notifier = new QSocketNotifier( buttonFD, QSocketNotifier::Read, this );
connect( notifier, SIGNAL(activated(int)),this,
SLOT(readKeyboardData()) );
}
//kbdBufferLen = 80;
//kbdBuffer = new unsigned char [kbdBufferLen];
kbdIdx = 0;
}
MyKbdPrivate::~ MyKbdPrivate()
{
if ( buttonFD > 0 ) {
::close( buttonFD );
buttonFD = -1;
}
delete notifier;
notifier = 0;
//delete [] kbdBuffer;
}
void MyKbdPrivate::readKeyboardData()
{
int n = 0;
int idx = 0;
n = read(buttonFD, &kbdBuffer, sizeof(kbdBuffer));
if(n!=1)
return;
int keycode = Qt::Key_unknown;
switch ( (kbdBuffer) & 0xff ) {
case 1:
keycode = Qt::Key_Left;
break;
case 2:
keycode = Qt::Key_Right;
break;
case 3:
keycode = Qt::Key_Tab;
break;
case 4:
keycode = Qt::Key_Backtab;
break;
case 5:
keycode = Qt::Key_Enter;
break;
case 6:
keycode = Qt::Key_Return;
break;
default:
qDebug("Unrecognised key code %d", kbdBuffer );
}
handler->processKeyEvent( 0, keycode, 0, TRUE, FALSE );
}
MyKbdHandler::MyKbdHandler(const QString &device)
{
d = new MyKbdPrivate( this, device );
}
MyKbdHandler::~MyKbdHandler()
{
delete d;
}
#include "mykbd_qws.moc"
#endif // QT_NO_MYKBD
kbdBuffer的大小和switch()语句大家可以根据自己的驱动程序作调整
注意:n=read(buttonFD, &kbdBuffer, sizeof(kbdBuffer));这里我的kbdBuffer是一个char型,这里的read每次读回一个char型,所以我的驱动程序里read函数也要每次返回一个char字符,6个按键返回的值分别是1,2,3,4,5,6,对应的键为:Qt::Key_Left, Qt::Key_Right, Qt::Key_Tab, Qt::Key_Backtab, Qt::Key_Enter, Qt::Key_Return。
3.修改qkbddriverfactory_qws.cpp中的QWSKeyboardHandler *QKbdDriverFactory::create(),添加自己的定义的接口
其中qkbddriverfactory_qws.cpp如下:注有//mykeyboard 表示是我添加的语句
QWSKeyboardHandler *QKbdDriverFactory::create( const QString& key, const QString& device )
{
QString driver = key.lower();
#ifndef QT_NO_MYKBD //mykeyboard
if ( driver == "mykbd" || driver.isEmpty() )
return new MyKbdHandler( device );
#endif
#ifdef Q_OS_QNX6
if ( driver == "qnx" || driver.isEmpty() )
return new QWSQnxKeyboardHandler( device );
#endif
...
return 0;
}
QStringList QKbdDriverFactory::keys()
{
QStringList list;
#ifdef Q_OS_QNX6
if ( !list.contains( "Qnx" ) )
list << "Qnx";
#endif
#ifndef QT_NO_MYKBD //mykeyboard
if ( !list.contains( "MYKBD" ) )
list << "MYKBD";
#endif
#ifndef QT_NO_QWS_KBD_SL5000
if ( !list.contains( "SL5000" ) )
list << "SL5000";
#endif
...
#endif
..........................................
4.最后就是修改qt_embedded.pri使得QT/Embedded在编译时会加上你自己定义的接口实现
#
# Keyboard drivers
#
...
contains( kbd-drivers, vr41xx ) {
HEADERS +=$$EMBEDDED_H/qkbdvr41xx_qws.h
SOURCES +=$$EMBEDDED_CPP/qkbdvr41xx_qws.cpp
}
else:DEFINES += QT_NO_QWS_KBD_VR41
contains( kbd-drivers, mykbd ) {
HEADERS +=$$EMBEDDED_H/mykbd_qws.h
SOURCES +=$$EMBEDDED_CPP/mykbd_qws.cpp
}
else:DEFINES += QT_NO_QWS_KBD_MYKBD
这样编译之后,运行是要设置环境变量export QWS_KEYBOARD=MKBD:/dev/mykeyboard
不明白的地方就是/dev/mykeyboard这个是编译之后生成的吗?
还是要手动添加上去的,怎么添加?请哪位大哥帮小弟解决一下,谢谢!
如果USB改成全键盘应该怎么改?
请老师给一个思路,谢谢!