精华内容
下载资源
问答
  • 嵌入式实用函数

    2013-10-21 14:21:52
    对于嵌入式而言,这里收集了一些比较实用的小函数,对于这库中的有些小函数是针对LINUX的,但是大部分都是无平台的,希望对于用户而言有所帮助
  • 一线研发之声:嵌入式C编程经验之函数指针
  • 嵌入式MATLAB功能函数

    2015-03-10 11:58:15
    嵌入式MATLAB功能函数说明,介绍了怎样在SIMULINK中构建功能函数
  • 行业分类-嵌入式设备-嵌入式微处理器非可克隆函数密钥认证系统和方法.zip
  • 嵌入式及接口技术实验3实验报告 几API函数的应用
  • 一个嵌入式课程设计

    万次阅读 2017-06-25 21:33:11
    最近,嵌入式老师布置一个关于QT的课程设计。这课程设计,说实话,自己花了不少心思,当然也学到了不少内容。现记录如下。 我的课程设计的总体内容是,从串口读取传感器(温湿度、光照)发送的气温信息,然后...

    最近,嵌入式老师布置一个关于QT的课程设计。这个课程设计,说实话,自己花了不少心思,当然也学到了不少内容。现记录如下。
    我的课程设计的总体内容是,从串口读取传感器(温湿度、光照)发送的气温信息,然后显示在界面上。同时用户的操作、气温的异常也会显示界面的日志模块中,而且也会记录在文件中。气温的异常会引起拍照功能(用来记录当时的场景信息),当然也可以用用户手动拍照。拍照的内容储存在指定的文件夹中,可以切换到另一界面播放拍照的图片。
    各模块联系如下结构所示:
    模块结构

    下面分模块进行介绍:

    (1)、温湿度模块:
    从串口读取数据,然后经过解析,提取出温度、湿度、光照度后,显示在界面的文本框中。传感器发送的数据是按照其自身的协议规定好的。对于串口的收发,此处采用的是第三方类库,其实QT5以后已经自带了串口类,完全可以不用第三方类库。思路上是从串口收发一定的字符串数据,然后进行字符串提取,按照协议进行分析,最后计算出温湿度信息。

    1)气温信息模块
    //设置Weather信息
    void weather::SetData(QVector<QString> data)
    {
        if(data.isEmpty() == false)
        {
            First = data[0];
            Mes_len = data[1];
            Nod_id = data[2];
            Mod_id = data[3];
            Order = data[4];
            XH = data[5];
            XL = data[6];
            YH = data[7];
            YL = data[8];
            GH = data[9];
            GL = data[10];
        }
    }
    代码分析:以上代码,把从串口收到的数据分字段赋给相应的变量。
    
    //计算温度
    int weather::Get_temperature()
    {
        if(XL.isEmpty() == false && XH.isEmpty() == false)
        {
                int num1[2];
                Inv_int_num(XL,num1);
                int num2[2];
                Inv_int_num(XH,num2);
                int tem = (num2[0]* 16 + num2[1]) * 256 + (num1[0] * 16 + num1[1]);
                return tem;
         }
         return 0;
    }
    代码分析:根据传感器给的zigbeee协议,计算出温度信息。同理,可以计算出湿度和光照信息。
    
    2)、日志模块:
    当计算出的气温信息,不在正常的范围内时,将会把异常的气温信息同步记录到界面文本框和日志文件中去。
    
    // 设置气温限制信息,即气温值不在此范围则会记录到日志中
    void Logs::SetLimitInfo()
    {
        low_tem_limit = 20;
        high_tem_limit = 30;
        low_hum_limit = 0.2;
        high_hum_limit = 0.8;
        low_lig_limit = 20;
        high_lig_limit = 50;
    }
    
    //向日志中记录信息
    void Logs::WriteWeaLogs(int temp,int hum,double lig)
    {
        QDateTime current_time = QDateTime::currentDateTime();
        QString current_time_str = current_time.toString("yyyy-MM-dd hh:mm:ss ddd");
        QString logs_temp = NULL,logs_hum = NULL ,logs_lig = NULL;
        if(temp < low_tem_limit)
            logs_temp = "The temperature below "+QString::number(low_tem_limit)+" at "+current_time_str+
                    " And It's "+QString::number(temp)+".";
        else if(temp > high_tem_limit)
            logs_temp = "The temperature over "+QString::number(low_tem_limit)+" at "+current_time_str+
                    " And It's "+QString::number(temp)+".";
        if(hum < low_hum_limit)
            logs_hum = "The humidity belows "+QString::number(low_hum_limit)+" at "+current_time_str+
                    " And It's "+QString::number(hum)+".";
        else if(hum > high_hum_limit)
            logs_hum = "The humidity over "+QString::number(low_hum_limit)+" at "+current_time_str+
                    " And It's "+QString::number(hum)+".";
        if(lig < low_lig_limit)
            logs_lig = "The light intancity belows "+QString::number(low_lig_limit)+" at "+current_time_str+
                    " And It's "+QString::number(lig)+".";
        else if(lig > high_lig_limit)
            logs_lig = "The light intancity over "+QString::number(low_lig_limit)+" at "+current_time_str+
                    " And It's "+QString::number(lig)+".";
        WriteLogs(logs_temp);       
        WriteLogs(logs_hum);
        WriteLogs(logs_lig);
    }
    
    
    代码分析:以上代码,通过判断所给的气温信息是否在限制的范围内,如果不在的话,则向日志中写入其相关信息。 WriteLogs(string data)是文件操作,即向文件中写入data数据。
    
    3)、拍照模块
            拍照模块需要外接摄像头(或者pc自带的应该也行)。此处拍照功能是直接调用用别人写好的V4L2类中的函数。但是,因为拍照比较耗时,所以需要在线程中操作,此处用的是movetoThread方法。
    
    
    //拍照
    void PhotoWorker::TakingPhoto(QString path)
    {
        is_ok = false;
        QByteArray ba = path.toLatin1();
        //此函数进行拍照
        if( tak_pht_v4l->Save_BMP(ba.data()))
            is_ok = true;
        //返回拍照是否成功信号
        emit(Is_Ok(is_ok));
    }
    
    代码分析:以上代码即是进行拍照的功能。过程是,当在MainWindow中如果判断天气数据不再指定的范围内,则发送拍照信号。PhotoWorker类中的TakingPhoto()函数接受到此信号后,进行拍照功能(也就是保存一帧图片)。注意,拍照功能是通过多线程实现的,因为在主线程中还在不断接受串口数据。
    
    
    4)、照片显示模块:
    使用Label进行图片的显示。然后在代码中调用定时器功能,达到每隔一定时间进行刷新,达到循环播放图片的目的。另外,本实验中使用了三个button,用来对电子相框进行控制,其功能是上一张、播放/暂停、下一张。对于显示图片,还有一点要说明的是,本实验并没有一下把所有的图片都读到内存中,而是定时器时间一到,就从指定目录中搜索指定的图片,将其显示,因此,图片的编号是有一定要求的,是从1.bmp、2.bmp依次递增类型。
    
    
     Pic::Pic(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::Pic)
        {
        ui->setupUi(this)
            base_path = "./pic/";        //基路径
            which_pic = 1;              //用于显示目前第几张图片
            is_play = false;                //用于判断是处于播放状态、还是停止状态
            num_of_pic = 5;         //图片的初始个数,会随着拍照增加
          show_timer = new QTimer(this);      //播放图片定时器
          count_timer = new Qtimer(this);   //用于确定图片目录中有张图片
          //播放定时器与播放槽函数连接
          connect(show_timer,SIGNAL(timeout()), this, SLOT(on_play_button_clicked()));
          //确定图片数量的定时器与setNumOfPic槽函数连接
          connect(count_timer,SIGNAL(timeout()),this,SLOT(setNumOfPic()));
          count_timer->start(800);
        //用于填充图片数据到label中      
        FillIma(which_pic,ui->show_label);
        //show-label是在界面文件中设置的label名称
          ui->show_label->show();
          ui->show_label->setScaledContents(true);
    }
    
    代码分析:以上代码为Pic类的构造函数,在这个构造函数里进行里基本的槽与函数连接,设定定时器等基本功能。
    
    
    //将图片填充至label
    void Pic::FillIma(int which_pic, QLabel *show_label)
    {
        QString image_path = base_path+QString::number(which_pic)+".bmp";   //定义图片的路径,为基路径加上后缀名
        QPixmap pixmap = (image_path);      //装入图片
        if(pixmap.isNull())
        {
            show_label->setText("There is no picture.");    //如果没有图片,则显示无此图片
        }
        else
        {
            show_label→setPixmap(pixmap);       //如果有图片则填充到label中
        }
    }
    代码分析:以上代码,是将指定目录下的图片填充至Label中,用的是setPixmap函数。
    
    
    
    //显示上一张图片
    void Pic::on_pre_button_clicked()
    {
        //如果已经到了第一张图片则从最后一张图片显示
        if(which_pic-1 <= 0)    
            which_pic = num_of_pic;
        else
            which_pic--;
        FillIma(which_pic,ui->show_label);
        ui->show_label->show();
    }
    // 显示下一张图片
    void Pic::on_next_button_clicked()
    {
    //如果已经到了最后一张图片则从第一张图片开始显示
        if(which_pic + 1 > num_of_pic)
            which_pic = 1;
        else
            which_pic++;
        FillIma(which_pic,ui->show_label);
        ui->show_label->show();
    }
    代码分析:以上代码很简单,就是点击按钮之后,触发上面的函数,将当前要显示的图片显示出来。
    
    
    void Pic::on_play_button_clicked()
    {
        QObject *obj_sender = sender(); //如果判断触发此函数的是哪个信号
        QObject *com_obj = (QObject*)ui->play_button;
        if(obj_sender == com_obj)       //如果是button,则改变play或者stop状态
          {
              if(is_play == true)
              {
                  is_play = false;
                  show_timer->stop();
              }
              else
              {
                  is_play = true;
                  show_timer->start(1000);
              }
          }
        if(is_play == true)     //如果是播放状态,则播放下一张图片
            on_next_button_clicked();
    }
    
    代码分析:以上代码,有点难懂。首先判断触发的是那个信号,用的是send()函数,此函数是系统提供的,返回的是一个obj对象指针,我们可以用这个指针判断到底是哪个对象触发了发出了信号。为什么要判断呢?因为有两个对象发出的信号都能触发这个函数,一个是show-timer信号,一个是点击play按钮的信号。(其实,也可以分别用两个定时器来实现,不过定时器在系统中是稀缺资源,得珍惜着用)
    
    
    void Pic::setNumOfPic()
    {
    //用来查找指定目录下的文件(图片)个数
        QString path = "./pic";     //路径
        QDir *dir=new QDir(path);
        QStringList filter;     //过滤器
        filter<<"*.bmp";        //设置过滤器内容
        dir->setNameFilters(filter);
        QList<QFileInfo> *fileInfo=new QList<QFileInfo>(dir->entryInfoList(filter));
        num_of_pic = fileInfo->count();
    }
    
    代码分析:上面的代码是用一个单独的定时器来每隔一定时间判断目录下的图片个数(因为拍照会增加图片的数量)。
    

    (5)、界面切换:
    这次任务设计了两个界面,一个界面就是显示照片界面(如下图一)。另一个界面用来显示温湿度等信息。涉及到两个窗口,所以就需要进行窗口的切换。在此出使用的是堆栈切换窗口的方式。即一开始把所有的窗口都实例化后压入栈中。在需要的时候,发送一个信号,使相应的窗口调到栈顶,显示出来。

    (图一:显示照片)

    widge::widge(QWidget *parent) :
        QWidget(parent)
    {
        setFixedSize(800, 600);
    
        mainwindow = new MainWindow;
        pic = new Pic;
        stackLayout = new QStackedLayout;
    
        stackLayout->addWidget(mainwindow);
        stackLayout->addWidget(pic);
    
        connect(mainwindow,SIGNAL(display(int)),stackLayout,SLOT(setCurrentIndex(int)));
        connect(pic,SIGNAL(display(int)),stackLayout,SLOT(setCurrentIndex(int)));
    
        mainLayout = new QVBoxLayout;
        mainLayout->addLayout(stackLayout);
        setLayout(mainLayout);
    }
    
    此处的代码,我还不是很懂,在此不在介绍。
    

    部分截图如下所示:

    主界面

    文件日志模块

    总结:
    本次课程设计中,出现了很多问题。可能是由于自己以前学的不扎实。先是串口读不出数据,后来好不容易读出数据了,读出的数据又是错误的。(最后才发现是串口线的问题)。拍照功能一开始是 死活实现不了,我去,只能拍一张照片,弄了好久弄不出来,一开始这个功能都要放弃了。后来,老师检查的时间延后了,又多了几天。我就想,再试一次,不行的话,就暂时搁置吧。哎呀,好了。(虽然还不是很完美,但差不多照片是出来了)。以前也有一次做东西的时候,一开始死活搞不出来,也是快要放弃的时候,出来了。老天啊,有的时候就喜欢和你开玩笑,挺逗。
    虽然最后还有欠缺,但总算做出来,还是蛮有成就感的。

    [工程文件资源附录如下:](http://download.csdn.net/detail/plm199513100/9880393)
    
    展开全文
  • 形式参数和实际参数 函数参数用于函数间数据的传递 形式参数定义函数时使用的参数 实际参数引用函数时使用的参数 函数max有两形式参数x和y形参x 和y只在函数max中使用 a和b是主函数中定义的变
  • 版本 14 中的 Simulink 6 在 MATLAB 语言支持方面向前迈进了大步; 嵌入式 MATLAB Function 模块。 该块提供了用于创建 M 文件 S-Function 的增强功能。 与 MATLAB Compiler(用于完整 MATLAB 语言的桌面部署)...
  • 嵌入式 linux_c 函数快速参考 嵌入式 linux_c 函数快速参考
  • FatFS是一个为小型嵌入式系统设计的通用FAT(File Allocation Table)文件系统模块。FatFs 的编写遵循ANSI C,并且完全与磁盘I/O层分开。因此,它独立(不依赖)于硬件架构。它可以被嵌入到低成本的微控制器中,如AVR, ...
  • 一个嵌入式工程师的面试之路

    千次阅读 2016-10-23 20:04:31
    一个嵌入式开发者的面试之路

    经过一段艰难的找工作历程,我终于开始了新的生活
    在面试那段时间我看到了一个面试经验分享的帖子:《一个五年Android开发者百度、阿里、聚美、映客的面试心经》,同样工作5年,我实在自愧不如。或许是因为嵌入式太繁杂,一个公司一种开发模式,导致我个人的积累有些单薄。

    为了方便大家,我决定简单列出面试题目,而不做详细说明,大家可以自己去搜索答案。

    背景:
    我之前工作过两家公司,一家做智能卡芯片的,一家做蓝牙产品,基本是应用层的内容。可惜嵌入式开发会越来越向底层发展,没做过底层协议开发是我的一大软肋。
    自学过TCP/IP,linux内核(0.11版)
    使用过python

    公司A

    一面

    项目模式(产品/模块)
    蓝牙芯片在产品中的作用(MCU,控制外部DSP或其他芯片;或只作为蓝牙模块)
    蓝牙软件成品模式(固件模式,通过SPI烧录)
    蓝牙协议栈的架构和分层
    蓝牙协议栈与网络协议栈(4层架构或7层架构)的对比
    蓝牙芯片(是否基于Linux或其他常用架构)
    蓝牙软件的软件架构(event-driven类型的,而不是单片机那种大while循环的)
    函数指针与指针函数分别是什么?用简单的代码表示出来
    Linux内核的版本;操作系统任务切换的关键是什么(保存上个任务的上下文,加载下个任务的上下文)

    二面

    说说经历过的最难的项目

    分享

    这个其实是我同学推荐的,虽然面试完全没有准备(因为个人原因还未开始投简历),但面试过程还算基本顺利。可惜该公司有个性格测试,没过

    公司B

    自我介绍
    项目模式(产品/模块)
    蓝牙芯片在产品中的作用(MCU,控制外部DSP或其他芯片;或只作为蓝牙模块)
    蓝牙协议栈与TCP/IP模型的对比;描述一下TCP/IP模型(协议)的主要内容;蓝牙协议的细节
    wifi与蓝牙的对比
    蓝牙通信速率(面试时没答上来,基本没关注过……后来了解到现在最大24Mbps,一般也就几十k)
    python的项目经历
    I2C的通信模式(看来是答错了,我以为有个校验位(UART有校验位,是10位数据),结果每次传输是8bit,然后1bit应答),通信速率,工作时的挂载情况(最多5,6个设备)
    USB的协议架构
    git的使用
    makefile的了解(编译的经过)
    Linux内核的版本(推荐我看2.4版本……)
    Linux驱动开发
    socket

    分享

    总结了之前的经验,专门看了一些蓝牙底层协议和网络四层协议的对比,但是忽略了I2C,之前做I2C也不是做I2C的底层协议,主要是应用,抓取过一些I2C的通信数据,UART也是同样的,结果我在数据格式上没分清UART和I2C。USB协议也不太了解,只是在原来的公司做过一些基本是应用层的代码改动。

    公司C

    部门1

    自我介绍
    手机开发
    手机架构分层
    C开发平台
    是否做过Linux驱动开发

    部门2:

    一面

    自我介绍
    最有挑战的项目
    职业发展方向(我表示我想做Linux驱动开发或系统开发,不过面试官说他们的项目里并没有分的很详细)
    我问的问题:项目的产品

    二面

    C程序,判断一个对称数
    删除双链表中的一个已知节点p
    好的代码应该有的特点

    分享

    部门1是做芯片开发的,可惜我完全没接触过。所以问了几个问题后感觉不合适,就结束了。

    公司D

    单片机经验(51或linux)
    软件架构;个人负责的部分
    我问的问题:公司的主控芯片和产品的关系

    分享

    这个公司是看到我的蓝牙经验,考虑他们的产品中可能会用到蓝牙才面试我的,但我做的不是蓝牙底层协议,他们了解到这个后就没怎么再问了

    公司E

    一面

    好的编程习惯(结合C语言的测试题详细说明,第一个点出C变量的声明和初始化的位置应该在一起)
    第一份工作的内容,负责的部分,拿到一个文档后如何开发/测试
    第二份工作中影响最大的项目,为什么要实现蓝牙设备之间的连接?为什么不从主设备直接向2个蓝牙设备播放音乐?
    这么多年编程有什么最宝贵的编程经验?

    二面

    影响最大的项目

    分享

    一面有点像压力测试,比如问题“为什么要实现蓝牙设备之间的连接?为什么不从主设备直接向2个蓝牙设备播放音乐?”产品设计并不是我做的,至于为什么我也不清楚。“为什么不从主设备直接向2个蓝牙设备播放音乐?”这是因为目前的任何一款手机还不支持同时向2个蓝牙设备播放音乐。看来大家都知道蓝牙,但是都没用过啊,如果面试官用过多个蓝牙设备,就不会问这种问题了。

    公司F

    volatile的作用(没答上来)
    如何写一个无限循环?
    如何跳出无限循环?(面试官说可以使用goto来跳出循环)
    为什么一般C程序中不使用goto(面试官提示:如果从一个函数中使用goto到函数外,会有什么影响?)

    UART,通信的细节:UART的数据格式?如何保证在侦听UART时不会一直判断接收到0?

    2种CPU架构(不知道,面试官说是冯诺伊曼架构和哈佛架构,还提了一句图灵机……)
    RISC和CISC的区别(没回答上来,面试官说是与指令长度有关。我说我只了解比如汇编中RET长度可能只有2字节,而jmp指令可能是4字节,这样汇编转换成机器码后,可能会做4字节对齐,如果一段指令刚好差2个字节,就会补2字节的0。所以有些机器码反汇编后就会出错,是因为刚好补0造成的。)

    寄存器长度变小,寻址范围会变小么?(我答错了。应该是不会,考虑CPU上的地址总线和数据总线是分开的)

    一个简单的C函数编程,如何把一个变量中的某一比特取反?

    在软件上,有中断号,中断向量表,中断函数,3者的关系是什么?(学过linux 0.11版的同学们肯定都知道答案)

    发生中断,芯片会做什么?(我回答的软件部分的东西:影响堆栈,任务会切换到内核态并执行中断。不清楚具体硬件上会做什么,印象里CPU只有中断标志位会被置位。其他芯片不太了解)

    芯片如何降低功耗(sleep部分模块,具体的睡眠操作:断电还是取消时钟)
    如何唤醒已经睡眠的模块?

    时钟变慢的影响?(不太懂芯片……)

    英文对话

    我问的问题:项目的工作方向(了解到是做一个芯片内部的模块验证工作)

    分享

    这家公司是做芯片的,所以问的东西有点偏底层,微电子方向。虽然感觉面试官超有亲和力,但我还是想做软件开发方面的,所以有点对不住这位面试官。

    总结

    嵌入式开发还是相当繁杂的。从芯片级开发到嵌入式产品的开发,或许我投的还是有些广,但是有一点大家一定要知道,把自己写在简历上的内容掌握,无论别人怎么问都不会出错,这样才能正确体现自己的实力

    展开全文
  • 1、先来分析,在同块MCU上,要想让A程序调用B程序中的函数,首先得让A程序知道自己将要调用的这个函数,在B程序中的入口地址。那么我们是不是首先得在A、B程序之间做一个约定,将接口放在某特定地址,让A程

    在嵌入式开发中,经常需要将函数接口固化到Flash中的特定位置,供其他应用来调用。特别是层次分明的嵌入式开发(IAP编程),这种需求会变得更加强烈。今天介绍一种简单的方法,来实现这一功能。

    1、先来分析下,在同一块MCU上,要想让A程序调用B程序中的函数,首先得让A程序知道自己将要调用的这个函数,在B程序中的入口地址。那么我们是不是首先得在A、B程序之间做一个约定,将接口放在某一特定地址,让A程序知道这个地址有它需要的函数入口地址。我们只要这样做就可以了:

    在absacc.h(编译器提供的头文件)中,定义了这样一个宏,它的作用是将变量放在Flash中的某一绝对地址中。而今天将用来放置函数入口地址。

    "absacc.h"定义如下:

    #ifndef __at
    #define __at(_addr) __attribute__ ((at(_addr)))
    #endif

    来看看怎么用这个 __attribute__ 来固化函数接口。


    B程序:

    #include <absacc.h>
     
    uint32_t GetTime(void)
    {
    	printf("2017.08.18_10:49:00\r\n");	
    }
    
    typedef uint32_t (*B_get_time)(void);	//定义一个函数指针类型,这个类型要和将要固化的函数(如:GetTime)类型一致。
    
    B_get_time 	B_func  __at(0x20000UL);//定义一个 B_get_time 类型的函数变量,并放在固定位置(如:0x20000)。
    B_get_time 	B_func  =  GetTime;	//将GetTime函数的入口地址放在新定义的 B_func 函数变量中。

    至此函数 GetTime 就已经放在Flash中地址为 0x20000的位置了。


    那么A程序要怎么样去调用这个 GetTime 呢?

    A程序:

    typedef uint32_t (*A_get_time)(void);//定义一个函数指针类型,这个类型要和B程序中固化的函数(如:GetTime)类型一致。
    
    uint32_t get_time(void)//定义一个函数实体来完成调用
    {
    	A_get_time   func; //定义一个 A_get_time 类型的函数变量
    
    	func  =  (A_get_time)(*((volatile unsigned long*)(0x20000UL)));//将地址为0x20000里的内容,转换为 A_get_time型函数指针
    
    	return  func();//调用func();至此完成调用
    }

    执行结果:

     
    
    


    OVER.


    展开全文
  • 主要内容:嵌入式常用模板函数(用法说明函数、参数解析函数

    主要内容:嵌入式常用模板函数(用法说明函数、参数解析函数)

    /*显示参数列表*/
    void usage()
    {
        printf("usage: server [-p:x] [-i:IP] [-o]\n\n");
        printf("       -p:x      Port number to listen on\n");
        printf("       -i:str    Interface to listen on\n");
        printf("       -o        Don't echo the data back\n\n");
        ExitProcess(1);
    }
    
    /*验证参数*/
    void ValidateArgs(int argc, char **argv)
    {
        int i;
    
        for (i = 1; i < argc; i++)
        {
            if ((argv[i][0] =='-') || (argv[i][0] == '/'))
            {
                switch (tolower(argv[i][1]))
                {
                /*指定端口*/
                case 'p':
                    iPort = atoi(&argv[i][3]);
                    break;
    
                /*指定IP*/
                case 'i':
                    bInterface = TRUE;
                    if (strlen(argv[i]) > 3)
                        strcpy(szAddress, &argv[i][3]);
                    break;
    
                /*只接收消息,不回应*/
                case 'o':
                    bRecvOnly = TRUE;
                    break;
    
                /*非法参数,显示参数列表*/
                default:
                    usage();
                    break;
                }
            }
        }
    }


    展开全文
  • 嵌入式软件中的延时函数

    千次阅读 2020-04-13 21:14:05
    延时函数嵌入式软件开发中必不可少的功能函数,在每工程里都能找到它的踪影。虽然看起来不起眼,但在有些时序控制的场合,使用了点点delay,往往能解决大问题。下面描述一下delay函数的几种实现。 中断延时...
  • 2函数的参数传递 3内联函数 4缺省形参 5函数重载 6函数模板 函数的概述 C++语言认为函数一个能完成某独立功能的子程序也就是程序模块 函数就是对复杂问题的种自顶向逐步求精思想的体现编程者可以将一个大而...
  • 嵌入式实验课程中的各项实验如编写strcpy函数: 已知strcpy函数的原型是 char *strcpy(char *strDest, const char *strSrc); 其中strDest是目的字符串,strSrc是源字符串。不调用C++/C的字符串库函数,请编写...
  • 嵌入式程序中,当一个函数调用发生时,它的内部机理是什么,执行了哪些步骤?如下所示是一个程序在运行时,它的内存分布状况。 当一个程序开始运行时,它的代码被装入到内存,保存在代码区,包括主函数和其他...
  • 这是绘图函数API在嵌入式中的应用,即为实验内容
  • 嵌入式300-s-api函数

    2008-10-21 07:24:33
    嵌入式API函数,还有份试验指导...........
  • 基于嵌入式MATLAB函数编程的火星车能量平衡仿真系统.pdf
  • Chirp函数的Nios Ⅱ嵌入式实现,摘 要:首先分析Chirp函数在频域上的一般特性,提出利用FPGA的嵌入式软核NiosⅡ处理器在嵌入式操作系统μC/OS-Ⅱ上实现Chirp的方法,即通过NiosⅡ处理器根据Chirp函数在频域上频率的...
  • 摘 要:首先分析Chirp函数在频域上的一般特性,提出利用FPGA的嵌入式软核NiosⅡ处理器... SoC(System on(2hip)是20世纪90年代提出的概念,它是将多功能模块集成在块硅片上,提高芯片的集成度并减少外设芯片的数
  • 参考http://www.tuicool.com/articles/2qaYZr7(一个glibc中abort不能backtrace的问题),里面提到修改abort函数,可是我找到的abort函数跟他里面不一样,我在linux\arch\arm\kernal的traps.c找到了abort函数 ...
  • 物联网开发入门+项目实战-学前准备,04 嵌入式C语言高级---函数空间
  • 关于嵌入式编程函数指针的运用

    千次阅读 2017-06-20 12:18:50
    一个工程中,要调用性质相同的函数时,可以利用函数指针让代码结构更清晰。 fun(); int fun(int p); void fun(void); void *fun(); void (*fun)();定义一个指针,该指针指向函数的的入口地址 (void *)fun...
  • 嵌入式os20函数

    2008-07-18 22:46:08
    c语言 os20系统
  • 嵌入式系统实验-函数参考手册
  • 本文设计是基于SoPC技术设计的Chirp函数信号发生器,该系统把微处理器模块和DDS模块集成到单片FPGA芯片内部,通过在嵌入式操作系统μC/OS-Ⅱ编写的程序,实时控制微处理器对DDS的控制字输出,DDS模块根据频率控制字...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 169,162
精华内容 67,664
关键字:

下一个嵌入式的函数