自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

fsczp的博客

study together

  • 博客(84)
  • 资源 (10)
  • 收藏
  • 关注

原创 【c++初学】遇到问题:对xxx未定义的引用

root@czp - PC : / mnt / hgfs / vmsd / cpp / class_static# g ++ used . cpp / tmp / ccFDQ1NR . o:在函数‘main’中:used . cpp :(. text + 0xbc) :对‘page :: ~ page() ’未定义的引用原因是,这个析构函数~page()只在类的声明中写上了,但是没写它的函数实体,所以在编译的时候报了这个错误。

2023-03-06 23:40:53 1094

原创 rtthread学习-防止优先级翻转

rt-thread 优先级翻转

2022-03-24 00:01:46 911

原创 rtthread 串口使用记录

rtthread

2022-03-20 17:20:38 1234

原创 匿名命名空间的学习

C++的匿名命名空间首先这篇文章很有用当声明命名空间时的名称为空时,则该命名空间为匿名命名空间(unnamed namespace)。匿名的空间是C++用于替代使用static定义作用域为本编译单元的全局函数或全局变量的一种新的替代方式#include <iostream>using namespace std;namespace{ int i = 256; }namespace ns{ namespace { int i = 128; } void func(void)

2021-10-19 00:53:36 688 1

原创 用GD32F103VCT6替代STM32F103VCT6出现的SPI问题以及解决方法

问题:原本是MCU用STM32F103VCT6跟DSP通过SPI进行双向通信传输数据,用GD32F103VCT6直接替换,代码没有修改,还是STM32的标准库,出现与DSP通讯失败。解决问题过程:上网搜索相关问题 发现一篇比较有用的文章。GD32中SPI部分需要特别注意的部分 以及STM32移植到GD32SPI需要修改的部分我按照这位博主说的去改,发现原来配置的SPI部分 MOSI和MISO确实没有明确设置引脚的输入输出模式,但是我重新配置了之后还是不行,通讯不了。用逻辑分析仪去分别检测STM3

2021-10-17 12:30:16 3777

原创 在不同的C文件之间定义和使用namespace-{namespace的初级定义和使用(2)}

Table怎么用file1 (namespace_def_used.cpp)file2 (namespace_def_used2.cpp)file3 (TestNameSpace.h)怎么用例子:func3在file2的NameSpace2里面把func3声明在TestNamespace.h里面在file1里面使用的时候,需要using关键字声明NameSpace2file1 (namespace_def_used.cpp)#include <stdio.h>#include "T

2021-10-12 22:55:02 312

原创 namespace的初级定义和使用(1)

#include <stdio.h>//define a name spacenamespace NameSpace1{ void func2(void) { printf("this is function 2 in namespace !\n"); }}void func1(void){ printf("this is default function One!\n");}/* //method-2 usage of namespace using Na

2021-10-12 22:26:43 228

原创 两个c文件里面有同样的函数名,可以一起编译吗?

两个c文件里面有同样的函数名可以吗?下面来测试一番。准备工作在a.c里面#include <stdio.h>int test(void){ printf("test in a.c\n"); return 0;}int main(void){ test(); return 0;}在b.c里面#include <stdio.h>int test(void){ printf("test in b.c\n"); return 0;}开始编译

2021-10-11 23:25:54 3405 2

原创 code_complete 防御式编程

这一章节里面讲了有断言、错误处理代码、异常目前我接触得最多的式错误处理代码。在公司项目代码里面有类似的函数Check_Data里面采取的机制就是错误处理代码一般都是如果某个值大于或者小于范围值,就等于范围值,这种处理方式是健壮型处理方式,与之相对应的是正确性。前者的话回保证程序能够运行下去,后者的话程序一般会使其报错然后停止服务。感想:以前觉得,这部分的代码就应该这样写,知道这样是对的,但是又说不出个所以然,归根到底还是缺少理论支撑。现在知道了这些理论名词,以后归类整理起来也更加有条理了。这

2021-10-08 23:04:31 102

原创 stack heap irom iram flash

在看rt_thread官方教程第二节的时候讲到了动态内存分配,因为概念不清晰所以上网查了一下,现在做一个小结。stack栈,是编译器自动分配和释放的。例如:局部变量int a;char str[];char *p;这个a和str[],指针p都是在栈里面管理的有个小例外char *p = “12345”这里的指针p在栈里面,但是它指向的内容12345呢是在常量区的链接: 什么是代码区、常量区、静态区(全局区)、堆区、栈区?.heap堆,是程序员自己分配的。malloc和free

2021-09-11 17:57:02 219

原创 一个有趣的曲线

今天发现原来Win10的计算器有绘图功能,可以自己写函数然后绘图,接着就在网上发现了一个很有趣的曲线了????(2/3)+(1(√(8−????2 ))sin(????????????))试着在win10的计算器中画出来吧,通过不同的a的取值,曲线会发生变化的!...

2021-06-10 22:49:05 350

原创 典型的面向对象的思想

典型的面向对象的思想1.构建一个对象(可以理解为定义一个结构体类型)2.用对象来构建实例(可以理解为用这个结构体类型来定义一个结构体类型)3.填充实例(给结构体的各个元素赋值,实例化这个结构体)3.使用实例(把结构体变量作为参数传给某个函数使用)5.销毁实例(把第二步定义的结构体变量给销毁掉,如果是malloc的话就要free释放掉。)朱老师的课程。...

2021-03-05 23:17:59 76

原创 linux下用C语言实现HTTP客户端-获取网络时间-设置linux系统时间

源码#include <stdio.h>#include <sys/types.h> #include <sys/socket.h>#include <string.h>#include <netinet/in.h>#include <arpa/inet.h>#include <string.h>#include <unistd.h>#include <stdlib.h&

2021-01-25 11:59:04 2419 3

原创 在Windows下使用通信猫软件,与ubuntu下运行的服务器进行通信

1.安装Microsoft Loopback Adapterwin7/win10下安装Microsoft Loopback Adapter2.VMWare桥接到Microsoft Loopback Adapter在Windows下通过命令提示符ping一下虚拟机的ip地址,看看是否ping通同理,在ubuntu下ping一下Windows,看看是否通信正常。3.设置通信猫在通信猫上把ubuntu上运行的服务器ip地址和端口号填上,启用即可4.实验结果...

2021-01-12 23:41:11 489

原创 学习了课程后参考的rtsp的数据传输框架后写下的tcp server

顺序mainserver_init()–函数server_listen() --线程dealwithmsg()–线程服务器#include <stdio.h>#include <sys/types.h> /* See NOTES */#include <sys/socket.h>#include <arpa/inet.h>#include <stdlib.h>#include <string.h>

2021-01-12 11:22:01 108

原创 对缓冲、带宽、码率的理解

相关概念来自百度百科码率带宽他们两者的单位都是bps1.码率的定义是 数据传输单位时间传送的数据位数假设一个视频的输出码率是512kB/s,也就是说一秒钟的视频包含有有512k个Byte的数据,要把所有字节数都显示出来这一秒才是完整的。2.带宽可以理解为一条通道,假设带宽也是4Mbps,转换过来就是512kB/s,一秒钟能够传输512KB的数据,如果是传输上面的视频,那就刚刚好能传送完成。但是如果带宽是2Mbps,转换过来就是2*1024/8 = 256kB/s,这时候要传送码率是512kB/

2020-10-30 11:45:20 2078

原创 hisi3518ev200移植MT7601

注意:本博客来源于朱老师海思项目开车第五季部分,本博客仅供学习和交流虚拟机:VMware15.5系统:Ubuntu18.04平台:hisi3518ev300MT7601驱动,包括有station模式和access point模式的:https://pan.baidu.com/s/1i_hPImFTZN-afyHh4f54bQ提取码:vcge工作在sta模式1.解压文件tar -jxvf DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz22.修改Ma

2020-10-28 11:29:17 850 1

原创 HI3518e的sensor接口引脚复用设置学习笔记

接口引脚复用1.查看引脚定义的框图2.找相应的设置寄存器(基地址+偏移量=寄存器地址)3.himm工具写入himm是海思提供的一个专门来写这些寄存器的一个可执行程序。himm在哪里会被使用?在load3518e这个脚本里面调用了himm,去写sensor的寄存器。load3518e脚本在哪里使用了?在/etc/profile脚本里面开机的时候装在摄像头 -i 是insmod的意思load3518e脚本是专门装载摄像头用的,在脚本里面写好了很多海思支持的摄像头的寄存器配置,要用的时候

2020-10-10 17:27:28 993

原创 视频接口相关学习记录

异步通信和同步通信异步通信是没有时钟线的,例如串口,串口就是异步通信同步通信的话,双方之间是有一根clk信号连接的,所以是同步的。并口的接口并口就是并行接口的意思,并行也就是说有很多根线并排的走,类似于发达地区的公路,一条路有很多个车道,这样的话速度就会比串行接口快很多,因为流量会增大很多。并行接口的摄像头传感器(sensor)有data线、HS线、VS线、CLK线。1.data线就是传送数据的线,数据包一车一车的通过这些线路传送2.HS和VS全称是horizonal synchronous和

2020-10-09 18:02:01 213

原创 修改每包字节数,IP地址,端口号

测试的时候不想再源文件上修改,就把在windows下修改的通过共享文件夹的方式复制到虚拟机下面去make,后面发现报错,很多地方有重复定义。刚开始我还以为是在~/sample/venc/文件夹里面的之前的两个sample文件有冲突,尝试了改名,丢到外面的文件夹里面,发现还是不行。后面是到~/sample/common/文件夹里面发现了问题,原来我复制过来的common_venc.c文件也会有冲突,把它丢到外面文件夹里面就没事了。从此引出了一个结论,就是这个mpp的makefile,是只要文件夹里面有的

2020-09-30 11:27:25 231

原创 移植了ortp库之后的初体验

sample代码后面还是要修改的。通过ortp去推流到本地执行代码之后,出现了我截图的那几行。please press twice ENTER to exit this sample这句是在sample源代码里面的,按两下回车,两个getchar()过去之后,就到了pthread_join回收子线程。然后代码就死了。********oRTP for H.264 Init********这句是新增的,在rtpInit函数里面print出来的。ortp-message-Setting rando.

2020-09-29 23:53:23 795

原创 关于hi3518启动后做了什么

有一段时间没有碰开发板,忘记了之前自己设置启动的地方。一开机就要延时个5秒,然后挂载到虚拟机上。现在要重新修改一下挂载的地址,但是忘记了在哪里找了有印象修改的目录都在/etc/init.d/里面进去目录底下只有这几个文件S00devs S01udev S80network S90hibernate rcS研究了一下rcS,发现挺有趣的,以前以为打印一些字符出来都是用算法啥的,原来只是自己echo凑出来的。另外值得借鉴的是,原来rcS里面是有个for循环的,去执行/etc/init.d目录里面的S

2020-09-29 23:18:58 168

原创 ortp学习记录-session-会话

大概这样去理解这些session都公用一条线路,为了能够分辨出哪个包是哪个session的ssrc=getenv("SSRC"); if (ssrc!=NULL) { printf("using SSRC=%i.\n",atoi(ssrc)); rtp_session_set_ssrc(session,atoi(ssrc)); } 用getenv这个api去获取一个指向SSRC环境变量的指针,通过这个指针里面的信息去包装这个session包(用rtp_session_set_ssrc

2020-09-25 19:48:43 177

原创 ortp学习-防止某个函数被多次调用的设计

学习ortp库中发现了一个技巧static int ortp_initialized=0; //先定义一个静态全局变量/** * Initialize the oRTP library. You should call this function first before using * oRTP API.**/void ortp_init(){ if (ortp_initialized) return; //第一次调用的时候是0,所以不会return ortp_initialized+

2020-09-25 17:40:44 193

原创 1.数组名是指针吗? 2.*(P+1)和P[1]?

数组名是指针吗参考文章【嵌入式】C语言高级编程-长度为0的数组(05)https://blog.csdn.net/dengjin20104042056/article/details/107169463下面这段话引用自参考文章大家在各种场合,可能常常会看到这样的字眼:数组名在作为函数参数进行参数传递时,就相当于是一个指针。在这里,我们千万别被这句话迷惑了:数组名在作为函数参数传递时,确实传递的是一个地址,但数组名绝不是指针,两者不是同一个东西。数组名用来表征一块连续内存存储空间的地址,而指针是一

2020-08-05 11:25:05 1370

原创 MT7601无线网卡驱动移植(2)-wpa_supplicant移植

参考1.朱老师物联网大讲堂《项目积木1:USB WIFI网卡在X210上的移植和使用最全攻略》2.wpa_supplicant-2.5移植与使用l3.wpa supplicant 移植编译平台:ubuntu18.04移植的平台:S5PV210(内核2.6.35.7)说明具体的移植步骤上面的三篇材料都讲得算很全面了,我也是根据课程,看着别人的参考链接上的步骤,先下载wpa_supplicant代码,下载openssl、下载libnl进行移植我遇到的问题之前是自己一步步移植,没有按照课程的步

2020-08-04 09:47:20 315

原创 MT7601无线网卡驱动移植(3)-配置部分

参考朱老师物联网大讲堂《项目积木1:USB WIFI网卡在X210上的移植和使用最全攻略》编译平台:ubuntu18.04移植的平台:S5PV210(内核2.6.35.7)安装驱动模块经过前一部分的移植(MT7601无线网卡驱动移植(1)-移植部分),得到 mt7601Usta.ko文件,在开发板命令行下执行insmod mt7601Usta.ko再执行lsmod...

2020-08-04 09:34:40 636

原创 MT7601无线网卡驱动移植(1)-移植部分

参考朱老师物联网大讲堂《项目积木1:USB WIFI网卡在X210上的移植和使用最全攻略》编译平台:ubuntu18.04移植的平台:S5PV210(内核2.6.35.7)移植时需要确认的事项1.进入开发板linux命令行下执行lsusb得到这个就是当前在USB总线上的ID号,前一半是厂商ID(VID),后一半是产品ID(PID)2.插入无线网卡后再执行lsusb得到一插入无线网卡系统就自动识别了 new usb device了此时多出的ID号就是新的设备的ID号3.解压设备驱动

2020-08-03 17:16:45 684 2

原创 Ubuntu18.04系统中,开发板linux2.6.35.7内核通过NFS挂载根文件系统失败的解决方法

本文参照资料:1.朱老师嵌入式软件工程师课程2. Ubuntu18.04系统中,开发板linux2.6.22内核通过NFS挂载根文件系统失败的解决方法.3. 关于ubuntu18.04版本系统中无法挂载开发板nfs文件系统的解决办法环境介绍开发板型号:S5PV210用于烧录的内核版本:2.6.35.7操作系统Ubuntu18.04问题描述VFS: Unable to mount root fs via NFS, trying floppy.原因ubuntu18.04只支持nfs

2020-06-16 13:10:05 509

原创 如何通过链表来管理驱动的?

参考资料链接: Linux双向循环链表的实现.链接: 双向链表与循环链表.下面的图是mmc设备的驱动分析与链表相关的文件在list.h头文件里面有定义关于list_add_tail之前是不懂的,总觉得新的结点是放在了一个很奇怪的位置,或者说是头结点的前面。后来上网查询得知链表是可以循环的,放在头结点的左边相当于加到了最后面了,具体分析可以看参考资料的文章,写的非常好。关于网卡驱动中间通过for循环去遍历整个eth_devices链表,找到最后一个节点之后,就把新的设备插入到最后的位置。

2020-06-04 16:13:30 160

原创 汇编里面的.word代表什么

在学习uboot的时候经常在start.S头文件前面看到:.word 0x2000.word 0x0.word 0x0.word 0x0课程解释说是占位用的,是uboot前面的16个字节的header.word代表是字,一个字长。字长与处理器的位数有关,比如16位处理器,字长为2Byte:同理,arm的32位处理器字长为4字节。.word是怎么排布的?.word 0x2000.word 0x1234.word 0x5678.word 0x9abc用winhex把编译后的ub

2020-05-25 16:48:44 5071

原创 DM9000网卡驱动移植学习记录

笔记记录:网卡也是总线式访问,直接连接到Soc上面的SROM(SRAM/ROM)-是一个总称,是SRAM或者ROMSOC的SROM Controller提供对外总线式连接的SRAM/ROM接口网卡接到了SROM中就好像一个储存芯片一样扩展到了SOC的地址空间,主机可以通过一个地址来访问网卡内部的寄存器。网线:网线有8根,4根数据线(两发两收)、4根地线(抗干扰用)发 T+ / T-收 R+ /R-即传输的是差分信号。CS引脚很多芯片有片选引脚CS。主机向CS发送有效信号,从机工作主

2020-05-24 15:28:27 386

原创 uboot的虚拟地址映射学习

虽然不确定对错,但是也算是一种思考,先记录下来这个截图是课程讲到虚拟地址映射的时候课件里面给的。我之所以有疑问的原因是在课程2.10.1.2里面讲到了这样一句话(2)uboot早期也是纯物理地址工作的,但是现在的uboot开启了MMU做了虚拟地址映射,这个东西驱动也必须考虑。查uboot中的虚拟地址映射表,发现除了0x30000000-0x3FFFFFFF映射到了0xC0000000-0xCFFFFFFF之外,其余的虚拟地址空间全是原样映射的。而我们驱动中主要是操控硬件寄存器,而S5PV210的S

2020-05-17 14:32:17 1000

原创 uboot环境变量学习-getenv

getenv并不是一个给用户操作的命令,而是在uboot里面被调用的一个跟环境变量相关的函数。相关的代码经过前面学习过了printenv和setenv,对这个字符串解析的方法已经很熟悉了,如果到时候忘了的话可以先看看前面的分析思路再回来这里看。getenv函数大概思路就是通过遍历default_environment[]数组,找到了这个环境变量之后,返回这个环境变量的第一个字符的地址,可以看到最后的一句return ((char *)env_get_addr(val));返回的就是一个指针,

2020-05-16 15:18:10 1551

原创 uboot环境变量saveenv学习

命令操作的简单回顾:当设置完环境变量之后,如果执行了saveenv的话,则下次重新运行的时候环境变量则会被保存为上次保存的值,如果不保存,只会在设置好时还没重启之前生效,重启之后设置值会恢复成原来的值。执行save/saveenv之后会出现(对于我这块开发板)Saving Environment to SMDK bootable device…从代码开始分析为什么是 SMDK bootable device?同样,通过U_BOOT_CMD这个宏,通过函数指针的方法,去执行do_saveenv函数

2020-05-16 14:44:58 4714

原创 uboot环境变量setenv学习

setenv是操作uboot中环境变量的一个命令命令操作的简单回顾:新建一个环境变量命令行:set newenv 1结果: newenv=1删掉一个环境变量命令行:set newenv结果:这个命令就没了,printenv也不会出现。从代码开始分析:路径跟printenv一样在uboot/common/cmd_nve.c在之前的一篇忘记了,这些命令的执行都是通过U_BOOT_CMD去执行这些命令。在setenv对应的U_BOOT_CMD中是通过调用do_setenv函数来执行命令

2020-05-15 20:01:17 6142

原创 uboot环境变量do_printenv-字符串解析学习

通过学习do_printenv这个函数,去学习内里的字符串解析方法。第一步,研究do_printenv要知道uboot中的环境变量是怎样存储的。在do_printenv里会调用到env_get_char函数,返回值是unsigned char类型的。通过env_get_char函数可以获得一个字符。从哪里获得呢?从default_environment[ ]这个数组获得。这个数组里面的元素排列都是紧密排列的,用\0隔开、就是这样排列的。相当于这样char buf[ ] = {“abc”

2020-05-15 01:07:53 586

原创 uboot命令体系学习记录

文章目录说在前面main_looprun_command命令解析-parse_line函数说在前面uboot的命令体系在平时移植过程中基本不用动因为基本都是写好的代码,不用动态添加删减。学习的目的是了解原理,学习个中的方法学习命令处理的方式。1.命令解析2.命令查找3.命令执行main_loop一、uboot最的最后是在一个由for循环构成的死循环里面执行main_loop() -----------------------main_loop在common/main.c里面二、进入

2020-05-13 12:10:30 241

原创 shell基础学习记录

什么是shellshell是一类编程语言,它是一种软件实现,由软件系统提供给用户的命令行界面,实现人机交互。在linux下常用的脚本语言有bash shshell的脚本代码不用编译链接就可以运行了。简单的例子:#!/bin/sh#commentecho "hello world"注意:/bin/sh是一个路径,也可以是/bin/bash,就看你用什么解析器去解析shell脚本,用...

2020-04-27 15:36:40 101

原创 关于二维数组的一些使用感悟

首先我是在学习的时候遇到这样一段代码char cmd[MAX_CMD_PART][MAX_LEN_PART]; //当前解析出来的命令void cmd_paser(char *str){ int i; //step1:把用户输入的命令字符串分割放入cmd中 cmdsplit(cmd, str); //step2:把cmd中的次命令的第一个字符串与cmdset里面比较 cmd_in...

2020-04-24 19:19:08 864

服务器客户端 linux C code.zip

包里面有一个server.c 和client.c 代码逻辑这些都是从别人参考过来的 主要实现了服务器客户端收发功能,if 0 if 1开关部分代码即可。 还有一个功能,把获得的数据转换成十六进制打印出来。权当记录。

2020-08-14

to_alice.c

哈哈哈哈,别人在51单片机玩蜂鸣器,我现在在ARM-linux下玩。 具体: bootloader用的是九鼎官方的 kernel也是九鼎的,不过他的Makefile和Kconfig中的名字对不上,记得修改,然后在make menuconfig中添加buzzer驱动,记得开启nfs 通过nfs挂载根文件系统 在linux下通过交叉编译工具链编译这个文件,复制到根文件系统文件夹下 在开发板上,通过secureCRT连接开发板,用命令行启动这个致爱丽丝的可执行文件,然后就可以通过蜂鸣器播放歌曲了 主要用到的数据结构是一个结构体数组,通过使用for循环去把乐谱从结构体数组里面提取出来,然后switch case的嵌套获取音符,音调,通过操作结构体变量获取音符持续时间,把各种数据通过传参,使用驱动的ioctl接口去控制buzzer,播放歌曲。 如果整个框架想出来的话其他都不难的。复杂度就在于歌谱的每个音节要自己凑,还有do re mi fa so la si 的低中高的频率也要自己填充。

2020-07-23

parse_line_text.c

移植uboot的parse_line函数,实现命令解析 里面还包含: debug宏的使用; fgets函数的使用。

2020-05-12

adc-ver2.rar

多设置一个临时变量,然后通过if语句判断临时变量与beeval的值是否一样,(因为这个ADC会有飘移,所以最后是算他们的差值小于一定的阈值)。这样就能够让beeval在漂移范围内也不会不断的给蜂蜜器赋值。 也就是说弄一个临时变量作为一个解决ADC有漂移出现的问题。 然后直接给蜂鸣器的TCNTB赋值 初始化蜂鸣器 开关一下自动刷新即可 这样做就可以不需要用到看门狗跟延时函数了 ver2实现的效果还是比第一个版本好的。

2020-04-10

for testing adc.rar

开发板的ADC接口接上了一个电位器,通过转动电位器,产生不同的值,并且显示出来。在这里把这个课程代码跟之前的蜂鸣器进行结合,当产生不同的AD值的时候,就会改变pwm波形,从而改变蜂鸣器的声音。我是利用了看门狗定时器,定时一段时间之后去扫描AD的值,再重新装载到TCNTB上面,输出波形。 蜂鸣器不像LED,如果扫描周期很短的话蜂鸣器就会不断不断地刷新重启,虽然说改变AD值声音会变,但是会有很明显的开关卡顿,如果是LED的话可能会有视觉暂留效果就不会有这么明显的卡顿把。

2020-04-10

rtc_tshow.rar

参考课程的代码,然后自己改RTC的时间,读写读出来, 然后再结合看门狗的中断方式,相当于一个定时器,定时一秒之后就打印出当前的时间,每一秒刷新一次时间这样。 过程中还是出现了不少问题的,例如头文件没有包含,在main函数里面没有绑定中断号,没有使能中断,没有吧中断服务程序跟中断号绑定在一起。 在配置看门狗定时器的时候也熟悉了时间的计算,挺好的。

2020-04-09

看门狗中断与复位部分的简单代码.rar

这部分代码是看门狗的中断和reset部分,当然是基于之前的key和uart的,所以可以说这里面也有所有的代码,只需要Makefile一下就好了。

2020-04-09

interrupt_myown_bee.rar

关于这段程序代码 我就不自己写了,把课程的代码直接拿过来改的,把它的define放在了我新建的pwm.h头文件里面,最后自己makefile加上pwm.o,在key.c的中断里面加上这个定时器,自己设置TCNTB和TCMPB的频率,就有do re mi fa so的声音了,虽然很水 做得。。。。。。

2020-04-08

key_interrupt.rar

这部分的代码是配合了中断控制以及按键的,除了自己写的之外还加上了一个从课程里面拷贝来的代码。还加了一点注意事项,就是自己拿过来修改的时候呢发生的问题,也进行了修改。其实这么一大段中断结构的代码如果看懂了能用,像我这样第二次看视频了,懂了之后直接复制来用就行的了。

2020-04-07

key.rar--for key polling

这个rar文件里面包含了有uart的代码,并且是移植好了的printf的,可以在secureCRT里面显示信息的,key-polling主要就是加了轮询方式下去检查按键是否有按下这样,然后加上了一点点led,整体很简单的,仅做记录用,所以也是0积分,给自己记录用的。

2020-04-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除