基于嵌入式设计的zigbee个人网系统的分析

项目场景:

系统通过zigbee个人网收集信息,并汇总到协调器,协调器再转发到嵌入式终端。
请添加图片描述


问题描述

(1)嵌入式设计里面,其核心为嵌入式处理器,请回答嵌入式处理器的基本分类?上面的方案中,可能涉及到哪几类?

(2)在嵌入式终端设计实现部分,处理器可以选择了STM32系列或s5p6818,结合专业知识,分析这两个方案的优缺点。

(3)如果选择s5p6818处理器,以本课程的实验平台为例,简述一下开发环境的搭建?

(4)如果你在开发过程中,发现系统不能正常登录,再确认系统损坏的情况下,你应该

重构系统,请回答重构系统的大致步骤?

(5)在重构系统时,bootloader是必须涉及的,说一下bootloder的作用,并指出uboot与bootloader关系?在uboot中,汇涉及混合编程,请说明混合编程相关知识?

(6)如果界面开发选用QT方案,信号和槽是必须涉及的知识,请用文字描述你对信号和槽的理解

(7)重装系统后,发现平台缺少某个开关设备的驱动,请结合你的理解,修改实验四的代码。(开关设备为输出设备,用来接收处理器PA10发出的开关信号)

(8)如果驱动正确,请写出驱动生成设备文件的过程(文件为/dev/ss),并写出测试程序。

(9)在qt设计中,需要用一个按钮控制上面的设备,用文字和流程图描述你设Qt程序的思路。

解决方案:

(1)嵌入式处理器的分类:嵌入式微处理器、嵌入式微控制器、嵌入式DSP处理器,嵌入式片上可编程系统SOC。以上设计包含:嵌入式微处理器、嵌入式微控制器。
(2)STM32:它是一个芯片系列。主要有价格较低、低功耗、高性能、丰富的外设接口的优点,有开发难度较大的缺点。
s5p6818:它是芯片型号。主要有使用效果好、拓展性好、功能强悍的优点,但适用于需要处理大量数据或运行复杂算法的应用。
(3)
编译环境搭建:
1、创建Ubuntu系统:安装Vm虚拟机——新建虚拟机——安装Ubantu。
2、安装开发工具:安装Vim、g++、TFTP服务、NFS服务、交叉编译工具链。
3、搭建交叉编译工具链、配置uboot和内核源码。
QT环境搭建:
1、在windows下安装QT开发环境
2、将工程文件压缩到Ubuntu
3、进行编译,生成开发板能运行的程序,QT库下载到开发板上。
4、工程进行QT附包,把嵌入式平台对应的库安装到系统中。
(4)
1、编译Uboot:安装Uboot,内核源码包——编译Uboot。
2、编译内核。
3、创建根文件系统:利用现有系统源码制作镜像——制作根文件系统。
(5)Bootloader是启动引导程序,主要作用是加载操作系统内核并启动系统。Bootloader不是一个程序,而是一类程序的总称,Uboot是其中的一种。混合编程指一个程序中同时使用多种编程语言的技术,主要有源程序相互调用和内联汇编。
(6)信号和槽是Qt中的一种机制,用于实现对象之间的通信。信号是一种特殊的函数,当某个事件发生时会自动发出信号;槽是一种普通的函数,用于接收信号并进行相应的处理。通过将信号与槽连接起来,可以实现对象之间的交互和通信。
(7)开关设备一般是通过GPIO口控制的,因此,我们需要使用相应的GPIO控制器来操作此类设备。驱动程序的功能是向该GPIO控制器发送确定信号以打开或关闭开关设备。在Linux系统中,驱动程序通常被编写为内核模块。因此,首先我们需要编写一个GPIO控制器驱动程序的内核模块,以此支持开关设备的操作。
(8)当GPIO控制器驱动程序正确安装到内核中后,系统会自动创建/dev目录下的设备文件。我们可以使用函数调用mknod或udev命令手动创建设备文件。

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>

#define DEVICE_PATH "/dev/ss"

void main(void)
{
    int fd, ret;
    char buf[2] = {'0', '\0'};

    fd = open(DEVICE_PATH, O_RDWR);

    if(fd < 0){
        perror("open:");
        exit(EXIT_FAILURE);
    }

    ret = write(fd, buf, 1);
    if(ret < 0){
        perror("write:");
        exit(EXIT_FAILURE);
    }
    printf("Device closed.\n");

    close(fd);
    exit(EXIT_SUCCESS);
}

(9)首先,我们需要在Qt Creator中创建一个新项目,选择Qt Widgets Application。创建完毕后,我们可以在主窗口中添加一个PushButton控件和一个QLabel控件。在QPushButton的clicked信号中,我们将会调用一个函数来打开或关闭设备。为了提高程序的健壮性,我们还需要检查设备的状态,以便在设备已经打开或关闭的情况下不再重复执行打开或关闭操作。
代码如下:

#include <fcntl.h>

void set_device_state(int state)
{
    int fd, ret;
    char buf[2] = {'0', '\0'};
    fd = open("/dev/ss", O_RDWR);

    if(fd < 0){
        perror("open:");
        return;
    }

    ret = read(fd, buf, 1);
    if(ret < 0){
        perror("read:");
        close(fd);
        return;
    }

    if(state == 1 && buf[0] == '0'){
        buf[0] = '1';
        write(fd, buf, 1);
        ui->label_status->setText("Device opened.");
    } else if(state == 0 && buf[0] == '1'){
        buf[0] = '0';
        write(fd, buf, 1);
        ui->label_status->setText("Device closed.");
    }

    close(fd);
}

流程图如下:
在这里插入图片描述

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Looking forward to a bright

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值