好东西,值得学习。谢谢楼主
点赞  2009-10-16 16:27
请教老师,我最近用boa搭了个web服务器,怎么做压力测试呢?
点赞  2010-1-14 16:31

基于嵌入式的语音压缩系统

老是您好,我想做个基于S3C2410的语音压缩系统,请问下直接在ARM里跑算法呢,还是用ARM控制带有压缩算法的DSP这种方案呢?哪种方案更实惠,或者说怎么做更容易实现功能啊?谢谢老师
点赞  2010-1-14 20:35

回答swz的问题:基于嵌入式的语音压缩系统

如果你想做比较成功的产品,建议你采用ARM+DSP的方案,因为直接在ARM里跑语音压缩算法的方式性能比较受限,通常难以达到商用的要求,需要借助DSP中的硬件压缩算法。当然,如果你只是做做实验,可以直接用ARM
顶嵌与您一起关注嵌入式行业! http://www.top-e.org/
点赞  2010-1-15 11:10

回复 25楼 topembedded 的帖子

谢谢老师,工作准备开始了,有问题再向您请教,谢谢。
点赞  2010-1-15 21:00
请教老师, 我用的是一块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都分区,是否会有影响。 我的问题可能出在什么地方。 谢谢!
点赞  2010-1-27 14:18
请教老师:
我用ARM7带一块C盘(NOR Flash)和D盘(Nand  FLash),VxWorks系统,运行过程中发生了几次D盘启动扇区设备参数被改写成dos格式文件日期时间的情况,分析发现该日期应该就是最后时刻更新文件目录属性时的日期格式,请问这有可能是在哪个环节诱发了这个错误,按照正常情况启动扇区数据无论如何也不应该被改写的。
应用量比较大,几率发生很小,但集中发生了几次。

[ 本帖最后由 cqusxb 于 2010-2-4 12:20 编辑 ]
点赞  2010-2-4 12:18
老师:
     您好!
     我现在想学ARM。想直接接触liunx操作系统,这样有什么问题。我手中有一个mini2440的实验板。有他的使用说明。
    我读过后认为liunx内核(包括驱动)直接裁剪就可以了。但是应用程序不知道怎么着手写。
    我以前从未读过这方面的东西(包括软件)。
    我只是初学,就笨笨得问问。不要见笑。
请老师给点建议
点赞  2010-2-23 15:50
2个老师失踪了!
点赞  2010-3-13 12:18
两个失踪了

[ 本帖最后由 daicheng 于 2010-3-19 16:05 编辑 ]
点赞  2010-3-19 15:33

回复 31楼 cqusxb 的帖子

有问题随时提问!
处处留心皆学问!
点赞  2010-3-19 16:01

回复 31楼 cqusxb 的帖子

?
点赞  2010-3-25 17:15

老师:arm9学习怎样从硬件开始?

我是做硬件的,会画板,在学校学过一点编程.
想先学其底层硬件电路,布板和驱动
打算买块arm9开发板学习,但淘宝上卖的大多不给pcb文件,看介绍似乎更适合学习软件开发~~
在网上下载了很多很杂的资料,但大多偏软,很少详细解说硬件部分的.....
老师能给我推荐一块适合我学习方向的开发板吗(或架构,用那种型号芯片的)?
点赞  2010-3-28 00:01
来看看,
点赞  2010-4-14 15:19

学习了啊

北京飞旭科技有限公司 专业的嵌入式技术提供商 详情请登陆公司网站:http://www.fly-sun.com.cn
点赞  2010-7-8 10:02
一直希望单片机也能用上高性能的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的方法?
点赞  2010-7-28 07:09

uc/os ii

开设个uc/os ii也很好哈!!!
行动才有结果,知识并非力量 !
点赞  2010-8-16 16:39

关于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改成全键盘应该怎么改?
请老师给一个思路,谢谢!
点赞  2010-9-7 09:18
zhichi lao支持老师啊 不错很好
点赞  2011-4-23 18:05
12
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复