精华内容
下载资源
问答
  • 3)队列先进先出 多任务存取 队列是内核中具有独立权限的对象,不属于任何任务,可以有多个任务进行读写 读队列阻塞 (1)任务读取队列数据时可以指定一个阻塞超时时间; (2)未超过阻塞超时时间,队列为...

    1.前言

    freeRTOS中所有任务的通信和同步机制都是基于队列来实现。

    2.队列的特点

    图 队列的读写操作

    • 队列的数据存储

    (1)队列可以保存有限个具有确定长度的数据单元,队列可以保存的最大单元数目称为队列的深度;

    (2)队列创建时需要设定队列深度和每个单元的大小;

    (3)队列先进先出

    • 多任务存取

    队列是内核中具有独立权限的对象,不属于任何任务,可以有多个任务进行读写

    • 读队列阻塞

    (1)任务读取队列数据时可以指定一个阻塞超时时间;

    (2)未超过阻塞超时时间,队列为空,任务将保持阻塞状态;

    (3)队列中写入数据,任务将由阻塞态转为就绪态;或者阻塞时间超过了阻塞超时时间,任务也将由阻塞态转为就绪态;

    (4)可能会有多个任务处于阻塞态等待读取队列中的数据;

    (5)队列数据有效,优先级最高的任务会解除阻塞,相同优先级则等待时间最长的任务会解除阻塞

    • 写队列阻塞

    (1)任务写入队列数据时可以指定一个阻塞超时时间;

    (2)未超过阻塞超时时间,队列满,任务将保持阻塞状态;

    (3)队列有空闲,任务将由阻塞态转为就绪态;或者阻塞时间超过了阻塞超时时间,任务也将由阻塞态转为就绪态;

    (4)可能会有多个任务处于阻塞态等待向队列中的写入数据;

    (5)队列有空闲,优先级最高的任务会解除阻塞,相同优先级则等待时间最长的任务会解除阻塞

    3. 使用队列传递复合数据类型

     

    图 结构体用于队列传递举例

    一般是通过传递复合数据类型的指针来实现

    4.使用队列传递指针

    • 如果队列存储的数据单元尺寸较大,那最好是利用队列来传递数据的指针
    • 利用队列传递指针时,一定要十分小心地做到以下两点

    (1)指针指向的内存空间的所有权必须明确

    不会有任意两个任务同时修改共享内存中的数据 .原则上,共享内存在其指针发送到队列之前,其内容只允许被发送任务访问;

    共享内存指针从队列中被读出之后,其内容亦只允许被接收任务访问 

    (2)指针指向的内存空间必须有效 

    如果指针指向的内存空间是动态分配的,只应该有一个任务负责对其进行内存释放。当这段内存空间被释放之后,就不应该有任何一个任务再访问这段空间

     注:切忌用指针访问任务栈上分配的空间。因为当栈帧发生改变后,栈上的数据将不再有效

    5.队列操作API

    API原型 函数说明 参数说明 返回值
    xQueueCreate( uxQueueLength, uxItemSize ) 用于创建一个队列,并返回一个 xQueueHandle 句柄以便于对其创建的队列进行引用 。当创建队列时, FreeRTOS 从堆空间中分配内存空间。分配的空间用于存储队列数据结构本身以及队列中包含的数据单元。如果内存堆中没有足够的空间来创建队列,xQueueCreate()将返回 NULL
     
    • uxQueueLength

    队列能够存储的最大单元数目,即队列深度。

    • uxItemSize

    队列中数据单元的长度,以字节为单位

    NULL 表示没有足够的堆空间分配给队列而导致创建失败。
    非 NULL 值表示队列创建成功。此返回值应当保存下来,以作为
    操作此队列的句柄
    xQueueSendToBack( xQueue, pvItemToQueue, xTicksToWait ) xQueueSendToBack()用于将数据发送到队列尾
    • xQueue

    目标队列的句柄

    • pvItemToQueue

    发送数据的指针

    • xTicksToWait

    阻塞超时时间。如果在发送时队列已满,这个时间即是任务处于阻塞态等待队列空间有效的最长等待时间

     
    xQueueSendToFront( xQueue, pvItemToQueue, xTicksToWait ) 用于将数据发送到队列首  

    pdPASS
    返回 pdPASS 只会有一种情况,那就是数据被成功发送到队列

    errQUEUE_FULL
    如 果 由 于 队 列 已 满 而 无 法 将 数 据 写 入 , 则 将 返 回
    errQUEUE_FULL

    xQueueSendToFrontFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) 用于在中断服务中实现相同的功能    
    xQueueSendToBackFromISR( xQueue, pvItemToQueue, pxHigherPriorityTaskWoken ) 用于在中断服务中实现相同的功能     

    xQueueReceive

    xQueuePeek 

    用于从队列中接收(读取)数据单元。接收到的单元同时会从队列中删除

    也是从从队列中接收数据单元,不同的是并不从队列中删出接收到的单元 

    注:切记不要在中断服务例程中调用 xQueueRceive()和 xQueuePeek()

       
    xQueueReceiveFromISR      
     uxQueueMessagesWaiting

     用于查询队列中当前有效数据单元个数

    切记不要在中断服务例程中调用 uxQueueMessagesWaiting()

       
     uxQueueMessagesWaitingFromISR      

    6. 执行流程举例

    send1和sender2负责写队列,receiver负责读队列:

    展开全文
  • 第20章 项目1: 自动添加标签(纯文本转HTML格式... 1.问题描述 ... 任务是将文本元素分类,然后标记。 ...输入无需包含人工编码或标签 ...必须要:读写文件,输出 可能:迭代输入行,字符串处理,生成器,re 3.准备工作 ...

                         第20章 项目1: 自动添加标签(纯文本转HTML格式)


    1.问题描述


    给纯文本文件添加HTML标签,变成HTML格式。
    任务是将文本元素分类,然后标记。
    目标:
    输入无需包含人工编码或标签
    能处理不同的文本块
    可扩展,及支持其他标记语言。

    2.有用的工具


    必须要:读写文件,输出
    可能:迭代输入行,字符串处理,生成器,re

    3.准备工作


    一个用于测试的纯文本文件 test_input.txt

    Welcome to World Wide Spam, Inc.

    These are the corporate web pages of *World Wide Spam*, Inc. We hope
    you find your stay enjoyable, and that you will sample many of our
    products.

    A short history of the company

    World Wide Spam was started in the summer of 2000. The business
    concept was to ride the dot-com wave and to make money both through
    bulk email and by selling canned meat online.

    After receiving several complaints from customers who weren't
    satisfied by their bulk email, World Wide Spam altered their profile,
    and focused 100 on canned goods. Today, they rank as the world's

    13,892nd online supplier of SPAM.

    Destinations

    From this page you may visit several of our interesting web pages:
     - What is SPAM? (http://wwspam.fu/whatisspam)

     - How do they make it? (http://wwspam.fu/howtomakeit)

     - Why should I eat it? (http://wwspam.fu/whyeatit)

    How to get in touch with us

    You can get in touch with us in *many* ways: By phone (555-1234), by
    email (wwspam@wwspam.fu) or by visiting our customer feedback page
    (http://wwspam.fu/feedback).


    4.初次实现


    首先将文本分成段落。即找出文本块。

    从文本可知,段落之间有一个或多个空行。
    因此,可以通过收集空行前的行来得到文本块。创建util.py,用来得到文本块

    #line生成器,在文件末尾添加1空行
    def lines(file):
        for line in file: yield line
        yield '\n'
    
    #block生成器,去除两端空白
    def blocks(file):
        block = []
        for line in lines(file):
            if line.strip():
                block.append(line)
            elif block:
                yield ''.join(block).strip()
                block = []

    接着对文本块添加标记
    创建标记程序simple_markup.py:

    import sys, re
    from util import *
    
    print('<html><head><title>...</title><body>')
    
    title = True
    for block in blocks(sys.stdin):
        block = re.sub(r'\*(.+?)\*', r'<em>\1</em>', block)
        if title:
            print('<h1>')
            print(block)
            print('</h1>')
            title = False
        else:
            print('<p>')
            print(block)
            print('</p>')
    
    print('</body></html>

     

    cmd中运行命令,执行标记程序:python simple_markup.py < test_input.txt > test_output.html 

    得到test_output.html,用浏览器打开,就可以看到有标题和段落的一个文章。

    展开全文
  • C++_Primer_Plus中文第五版  C++是在C语言基础上开发的一种集面向对象编程、通用编程和传统的过程化编程于一体的编程语言, 是C语言的超集。本书是根据2003年的ISO/ANSI C++标准编写的,通过大量短小精悍的程序...
  •  3.14 文件读写命令  3.15 系统处理命令  3.15.1 了解剪辑板  3.15.2 了解注册表  3.15.3 系统处理命令  3.16 媒体播放命令  3.16.1 常见的音频格式  3.16.2 媒体播放命令  3.17 网络通信命令  3.17.1 ...
  • 章声音和信号11.1周期信号11.2频谱分析31.3信号41.4波形的读写61.5频谱71.6波形对象71.7信号对象81.8练习10第2章谐波112.1三角波112.2方波132.3混叠152.4计算频谱172.5练习18章声音和信号11.1周期信号11.2频谱分析...

    章声音和信号1

    1.1周期信号1

    1.2频谱分析3

    1.3信号4

    1.4波形的读写6

    1.5频谱7

    1.6波形对象7

    1.7信号对象8

    1.8练习10

    第2章谐波11

    2.1三角波11

    2.2方波13

    2.3混叠15

    2.4计算频谱17

    2.5练习18

    章声音和信号1

    1.1周期信号1

    1.2频谱分析3

    1.3信号4

    1.4波形的读写6

    1.5频谱7

    1.6波形对象7

    1.7信号对象8

    1.8练习10

    第2章谐波11

    2.1三角波11

    2.2方波13

    2.3混叠15

    2.4计算频谱17

    2.5练习18

    第3章非周期信号20

    3.1线性啁啾(Chirp)20

    3.2指数啁啾22

    3.3啁啾信号的频谱23

    3.4频谱图24

    3.5Gabor限制25

    3.6泄露26

    3.7加窗27

    3.8频谱图的实现28

    3.9练习30

    第4章噪声32

    4.1不相关噪声32

    4.2累积频谱34

    4.3布朗噪声35

    4.4粉噪38

    4.5高斯噪声40

    4.6练习41

    第5章自相关43

    5.1相关43

    5.2序列相关45

    5.3自相关47

    5.4周期信号的自相关48

    5.5相关的点积形式51

    5.6使用NumPy51

    5.7练习52

    第6章离散余弦变换54

    6.1合成54

    6.2使用数组合成55

    6.3分析57

    6.4正交矩阵58

    6.5DCT—IV59

    6.6InverseDCT(反离散余弦变换)61

    6.7Dct类61

    6.8练习62

    第7章离散傅里叶变换64

    7.1复指数64

    7.2复信号66

    7.3合成问题67

    7.4使用矩阵合成68

    7.5分析问题70

    7.6快速分析70

    7.7DFT71

    7.8DFT是周期性的73

    7.9实信号的DFT73

    7.10练习75

    第8章滤波与卷积76

    8.1平滑76

    8.2卷积79

    8.3频域79

    8.4卷积定理81

    8.5高斯滤波器82

    8.6高效卷积83

    8.7高效自相关85

    8.8练习86

    第9章微分和积分87

    9.1有限差分87

    9.2频域89

    9.3微分89

    9.4积分91

    9.5累积和93

    9.6积分噪声96

    9.7练习96

    0章LTI系统98

    10.1信号与系统98

    10.2窗和滤波器100

    10.3声学响应101

    10.4系统和卷积103

    10.5卷积定理的证明106

    10.6练习108

    1章调制和采样109

    11.1脉冲卷积109

    11.2调幅110

    11.3采样113

    11.4混叠115

    11.5插值118

    11.6总结119

    11.7练习120

    展开全文
  • C++_Primer_Plus中文第五版  C++是在C语言基础上开发的一种集面向对象编程、通用编程和传统的过程化编程于一体的编程语言, 是C语言的超集。本书是根据2003年的ISO/ANSI C++标准编写的,通过大量短小精悍的程序...
  • C++_Primer_Plus中文第五版  C++是在C语言基础上开发的一种集面向对象编程、通用编程和传统的过程化编程于一体的编程语言, 是C语言的超集。本书是根据2003年的ISO/ANSI C++标准编写的,通过大量短小精悍的程序...
  • OpenCV教程

    千次阅读 2012-11-15 21:46:31
    在OpenCV中文论坛看到有不少帖子讲到如何在MFC下应用OpenCV进行图像和视频处理的方法,受益颇丰,主要有下面这些帖子:  1、opencv 数据读写操作+图像噪声+ MFC下OpenCV源代码  2、MFC中快速应用OpenCV & ...

    在OpenCV中文论坛看到有不少帖子讲到如何在MFC下应用OpenCV进行图像和视频处理的方法,受益颇丰,主要有下面这些帖子: 

    1、opencv 数据读写操作+图像噪声+ MFC下OpenCV源代码 
    2、MFC中快速应用OpenCV   &   相应论坛帖子 
    3、MFC+openCV对话框中显示视频 
    4、如何把视频显示到MFC的picture控件上 
    5、一个人脸-人眼检测例程,大家可以参考参考 
    6、A step-by-step guide to the use of Microsoft Visual C++ and the Intel OpenCV library

    另外还参考了于仕琪老师的《OpenCV教程-基础篇》,不过上面这些资料主要是 VC6 和 OpenCV1.0/1.1 的版本,而我使用的是 VS2008 和 OpenCV2.0,两者与之前版本相比都有很大的不同,按照论坛教程资料来做MFC下的OpenCV应用常会遇到各种各样的编程和调试问题。接下来的学习笔记将以上面的《A step-by-step guide …》为基础,总结一下VS2008 MFC下使用OpenCV2.0进行图像和视频处理的各种问题。

    一、《OpenCV教程-基础篇》2.8节中的问题

    1、P27初始化代码ROI值不为0的bug

     

          IplImage* Temp = cvCreateImage(ImgSize, IPL_DEPTH_8U, 1); // 创建8U单通道图像来缓存RGB图的各通道子图;
    
          int h,w;
          float dx = (Temp->width / 256.0f);    // 将图像按宽度作256等分
    
          // 复制数据到IPL的蓝色通道
          for(w = 0; w < Temp->width; w++)
             for(h = 0;h < Temp->height; h++)
             {
                // 复制数据到IPL
                Temp->imageData[Temp->height * w + h] = (char)(w/dx); 
                // 单通道图像每一列像素的像素值等于(所在列/总列数)*256.0f
                // 其效果是使单通道图像显示为从上到下由黑到白的灰度渐变效果
             }
             /*
             函数 cvSetImageCOI 基于给定的值设置感兴趣的通道。
             值 0 意味着所有的通道都被选定, 1 意味着第一个通道被选定等等。
             如果 ROI 是 NULL 并且COI!= 0, ROI 被分配. 然而大多数的 OpenCV 函数不支持 COI, 
             对于这种状况当处理分离图像/矩阵通道时,可以拷贝(通过 cvCopy 或cvSplit) 通道来分离图像/矩阵,
             处理后如果需要可再拷贝(通过cvCopy 或 cvCvtPlaneToPix)回来.
             */
             cvSetImageCOI(TheImage,1);    // 选择TheImage的蓝色通道
             cvCopy(Temp,TheImage);        // 复制数据到TheImage的蓝色通道
    
          // 复制数据到IPL的绿色通道
          for(w = 0; w < Temp->width; w++)
             for(h = 0;h < Temp->height; h++)
             {
                // 复制数据到IPL
                Temp->imageData[Temp->height * w + h] = (char)(255-w/dx);
                // 用255去减w/dx,则三个通道子图合在一起会呈现出从上到下由绿变紫的彩色渐变效果
                // 如果也同红绿通道一样只用 w/dx,则最终是呈现由黑到白的灰度渐变
             }
             cvSetImageCOI(TheImage,2);    // 选择TheImage的绿色通道
             cvCopy(Temp,TheImage);        // 复制数据到TheImage的绿色通道
    
          // 复制数据到IPL的红色通道
          for(w = 0; w < Temp->width; w++)
             for(h = 0;h < Temp->height; h++)
             {
                // 复制数据到IPL
                Temp->imageData[Temp->height * w + h] = (char)(w/dx);//??
             }
             cvSetImageCOI(TheImage,3);    //选择TheImage的红色通道
             cvCopy(Temp,TheImage);        //复制数据到TheImage的红色通道
    
          cvReleaseImage(&Temp);        //释放Temp占用的内存空间
    

     

    不过上述代码在运行之后,ROI的值不为0,这应该是一个bug,如何处理?

    2、P34 cvCopy 使得运行出错的问题

    P34执行Canny边缘检测的代码:

    void MyIplClass::ProcessIpl(IplImage* ipl)
    {
        IplImage *gray = 0, *edge = 0;
        gray = cvCreateImage( cvSize(IMAGE_WIDTH, IMAGE_HEIGHT), IPL_DEPTH_8U, 1 );
        edge = cvCreateImage( cvSize(IMAGE_WIDTH, IMAGE_HEIGHT), IPL_DEPTH_8U, 1 );
        cvCvtColor( ipl, gray, CV_BGR2GRAY );
        cvCanny( gray, edge, 30, 100, 3 );
        cvCvtColor( edge, ipl, CV_GRAY2BGR );
        // save result
        cvCopyImage( ipl, m_Ipl );
    
        cvReleaseImage( &gray );
        cvReleaseImage( &edge );
    }

    其中的 cvCopyImage( ipl, m_Ipl ) 是无法执行的,因为经过前3行的颜色转换处理后, ipl 和 m_ipl 的ROI的区域已经不一样。这需要重设 ipl 的ROI,即在 cvCopyImage 前加一行代码:

        cvResetImageROI( ipl );
        cvCopyImage( ipl, m_Ipl );

    3、P31增加的成员函数LoadBMP其输入参数类型应为 const char*

    在书中,LoadBMP的输入参数类型是 CString,不过我在VS2008下编译时会报错,不能由 CString 类型转换到 const char* 类型。另外OpenCV函数 cvLoadImage 定义为:IplImage* cvLoadImage( const char* filename, int flags ) ,所以在 VS2008 下LoadBMP其输入参数类型应为 const char*。

    void MyIplClass::GetIplData( IplImage* ipl )
    {
        memcpy( ipl->imageData, m_Ipl->imageData, m_Ipl->imageSize );
    }
    
    void MyIplClass::LoadBMP( const char* FileName )
    {
        m_Ipl = cvLoadImage( FileName, 1 );
    }

    上面的 GetIplData 其实是把 m_Ipl->imageData 的内容,复制到了 ipl->imageData里面,注意,这个 ipl 就是传入参数,也就是 
    TheImage, 因此,实际上的图片,被保存在了 TheImage 里面(注意,TheImage是一个在程序里面早就初始化好了的图片)。那么,在下面的程序中:

    void Cmfc_imgDlg::OnBnClickedReadimg()
    {
        // TODO: Add your control notification handler code here
        MyIplClass* img = new MyIplClass;    //实例化MyIplClass类
        const char* filename;
        filename = "C://OpenCV2.0//projects//mfc_img//lena.bmp";
        img->LoadBMP( filename );
        img->GetIplData( TheImage ); 
        delete img;
        RedrawWindow( NULL, NULL, RDW_INVALIDATE );
    }

    其中的 delete img 只是删除了实例 img,但读入的图像已经保存在 TheImage 中,不影响后续的处理,这样,我们就可以新建一个按钮来执行读入图像后的处理工作,例如:

    void Cmfc_imgDlg::OnBnClickedEdgedetect()
    {
        // TODO: Add your control notification handler code here
        MyIplClass* img = new MyIplClass;
        img->ProcessIpl( TheImage );
        delete img;
        RedrawWindow( NULL, NULL, RDW_INVALIDATE );
    }

    最终就得到一个简单的MFC程序如下:

     
    展开全文
  • SkyEye教程

    热门讨论 2008-03-02 17:42:18
    <br>3.SkyEye的目标和意义 SkyEye是一个开源软件(OpenSource Software)项目,中文名字是"天目"。SkyEye的目标是在通用的Linux和Windows平台上实现一个纯软件集成开发环境,模拟常见的嵌入式计算机系统...
  • [14本经典Android开发教程] 8 Linux内核阅读心得体会 读核感悟 2 读核感悟 Linux内核启动 内核的生成 2 读核感悟 Linux内核启动 从hello world说起 3 读核感悟 Linux内核启动 BIOS 5 读核感悟 Linux内核启动 setup...
  •  勾选修改U 盘信息,进入 U 盘信息设定(注意:VID/PID 必须为英文 字母或数字,不能为中文或标点符号)3.点击修改选项,根据需要选择,你要进行的项目(可复位/格式化 U 盘,加载镜像文件做 CDROM 等)4....
  • // 打印出3,因为该是数组有3个元素 // 用一个语句定义一个数组并赋值 $myphonebook = array ( "sbabu" => "5348", "keith" => "4829", "carole" => "4533" ); // 噢,忘了教长吧,让我们添加一个元素 $myphonebook...
  • Linux 操作系统基础教程 清华大学信息学院计算机系 目 录 前言..........................................................................................................................................
  • 教程将演示如何使用区块链上的私有数据。本文档介绍如何使用是由数据存储和用例。更多信息,查看Private data. 通过以下几步来定义,配置,使用私有数据。 1.建集合定义JSON文件。 2.使用链码读写私有数据。 3...
  • 如果计算机是中国人发明的,那么用中文编程是怎样一种体验? 1. 现在码字的键盘就是这个样子吧?...哇塞…那全世界会读写中文的起码有个30亿吧?我们的孔子学院那要开遍全球啦… 3. 学习的第一个编程就...
  • 网管教程 从入门到精通软件篇 ★一。★详细的xp修复控制台命令和用法!!! 放入xp(2000)的光盘,安装时候选R,修复! Windows XP(包括 Windows 2000)的控制台命令是在系统出现一些意外情况下的一种非常有效的...
  • 第十一部 MySQL读写分离开发实现及软件实现-物理备份-高可用(已经包含有5节视频+文档资料) 01-amoeba读写分离实现技术分享.avi 02-mysql-proxy读写分离实现技术分享.avi 03-PHP程序实现读写分离技术分享.avi 04-...
  • 实物图: 视频教程: B站搜索“逗比小憨憨” 接口定义 仿真图: 程序: //更多教程:B站搜索“逗比小憨憨” #include <... //读写控制 sbit RS = P2^2; //指令数据选择 sbit CS2 = P2^3; //右屏幕选
  • 参考链接,(1)菜鸟教程(2)廖雪峰python入门 (3中文手册 (4)英文文档 file 相关函数:链接 #!/usr/bin/python3 # -*- coding: utf-8 -*- # #9.r+,读写(可读,可写) a = open("test.txt","r+",...
  • OpenWrt For HiWiFi(HC5861) 自编译精减固件,极路由3自用最新固件 HC5861-uboot.bin v19.07.2 下载 支持 NTFS 读写 支持 Wi-Fi 5G 驱动 默认开启 WiFi 不支持 Fat 文件系统 默认语言为中文 支持 samba 共享 支持 ...
  • vc++ 应用源码包_3

    热门讨论 2012-09-15 14:33:15
    C++_Primer_第4版_中文+英文 原书源码+课后习题答案。 CameraController(云界面) 实现了自绘控件,云端控制主要在CnComm类多线程串口通讯库, camerads-DirectShow使用示例 演示了摄像头的使用 CatListBoxDemo ...
  • OpenWrt For HiWiFi(HC5861) 自编译精减固件,极路由3自用最新固件,本人极由器3上使用就是此固件。 刷机教程: https://blog.csdn.net/yao1500/article/details/105895873 适用对象:有点折腾技术的人 功能/特性:...
  • RabbitMQ 安装后服务无法启动问题

    千次阅读 2018-08-08 13:51:35
    1、安装目录带有空格 ...3、计算机名带有中文字符【狗血】 https://www.cnblogs.com/lykbk/p/erewererewr32434343.html 附windows下安装RabbitMQ教程,以及用户创建,用户角色分配,最后记得还要用户读写授权!...
  • 听说新版IDEA支持中文,三歪体验了一把 加入公众号 精美脑图、学习路线、1000+页的原创电子书、开发交流群、简历模板等干货,在微信搜【Java3y】关注我回复『888』即可领取!! 也可扫下面的码直接关注哦~ 如果...
  • 软件收藏

    2010-03-30 09:45:00
    【推荐】精品绿色便携软件 1.有道桌面词典 2.FileMon(File Monitor) v7.04 (FileMon 是一个出色系统文件监视...Axure RP中文社区 WebPPD网站产品原型设计,axure案例,axure教程,axure组件,axure解答 http://...

空空如也

空空如也

1 2 3
收藏数 52
精华内容 20
关键字:

中文读写教程3