- 博客(35)
- 资源 (46)
- 问答 (3)
- 收藏
- 关注
原创 S2-10 ESP-IDF开发 : Wi-Fi
Wi-Fi 是一个无线通讯计数的品牌,由 Wi-Fi 联盟(Wi-Fi Alliance, WFA)拥有。WFA 专门负责 Wi-Fi 认证与商标授权工作,严谨的说,Wi-Fi 是一个认证的名称,该认证用于测试无线网络设备是否符合 IEEE 802.11 系列协议的规范。通过该认证的设备将被授予一个名为 Wi-Fi CERTIFICATE 的商标。相比与其他无线通讯计数,Wi-Fi 具有覆盖广、穿墙性能佳、吞吐量大的优势。
2024-01-23 09:58:58
1604
2
原创 S2-08 ESP-IDF开发 : 存储
S2-06 和 S2-07 暂时先不发,课上没给同学们将,分别是 DMA 和 USB 章节,作为专项讲。
2024-01-22 19:08:59
1859
原创 S2-05 ESP-IDF开发 : SPI
SPI总线包括4条信号逻辑线,定义如下Master inout slave output 主机输入,从机输出(数据来自从机)Master output slave input 主机输出,从机输出(数据来自主机)serial Clock 串行时钟信号,由主机产生发送给从机片选信号,由主机发送,以控制与那个从机通信,通常时低电平为有效信号。
2024-01-21 10:41:44
2494
原创 S2-04 ESP-IDF开发 : IIC
如本节末尾所述 配置驱动程序,函数 i2c_param_config() 在初始化 I2C 端口的驱动程序配置时,也会将几个 I2C 通信参数设置为 I2C 总线协议规范规定的默认值。其他一些相关参数已在 I2C 控制器的寄存器中预先配置。通过调用下表中提供的专用函数,可以将所有这些参数更改为用户自定义值。请注意,时序值是在 APB 时钟周期中定义。APB 的频率在 I2C_APB_CLK_FREQ 中指定。可以通过以下函数修改配置参数:上述每个函数都有一个get对应项来检查当前设置的值。
2024-01-20 11:28:15
1526
原创 S2-03 ESP-IDF开发: UART
TTL(Transistor-Transistor Logic)具体指的是 UART (通用异步收发传输器)通过 TTL 电平标准进行通信的方式。UART 是一种常用的串口通信协议,它可以广泛应用于各种数字电路及嵌入式系统中,例如传感器数据采集、工业控制、机器人控制等领域。TTL 电平标准规定,当输入电压低于 0.8V 时为逻辑 0,当输入电压高于 2.0V 时为逻辑 1,电压为 0.8V 至 2.0V 之间的电平保证不确定性输出状态。
2024-01-19 13:18:45
2156
2
原创 S2-02 ESP-IDF 开发 :PWM
对于直流电机来讲,电机输出端引脚是高电平电机就可以转动,当输出端高电平时,电机会转动,但是是一点一点的提速,在高电平突然转向低电平时,电机由于电感有防止电流突变的作用是不会停止的,会保持这原有的转速,以此往复,电机的转速就是周期内输出的平均电压值,所以实质上我们调速是将电机处于一种,似停非停,似全速转动又非全速转动的状态,那么在一个周期的平均速度就是我们占空比调出来的速度了。工作原理如下:在一个固定的周期内,PWM 信号的高电平和低电平部分会分别占据一定的时间段,同时这两个时间段的长度可以由程序进行控制。
2024-01-18 08:18:10
1892
原创 S2-01 ESP-IDF 开发 :GPIO
此外,当在多个任务中使用相同的 GPIO 引脚和中断处理函数时,应确保每个任务都在适当的时候调用 gpio_isr_handler_remove() 函数来删除中断处理函数,从而避免因中断重复注册而导致的不必要的问题。此外,如果在多个任务中使用相同的 GPIO 引脚和中断处理函数时,应该为每个任务创建不同的队列,并分别传递给 gpio_isr_handler_add_with_queue() 函数,以避免因队列操作竞争而导致的问题。该函数的作用是申请一个指定 GPIO 引脚的中断,并返回表示该中断的句柄。
2024-01-17 21:27:10
1930
原创 S1-12 中断
如果在当前中断服务函数执行的过程中,又触发了一个新的中断请求,则会根据新中断的优先级来选择是否暂停当前中断服务函数,并转而执行新的中断服务函数。例如,如果需要在中断服务函数中唤醒一个阻塞在等待信号量的任务,可以将 xHigherPriorityTaskWoken 参数设置为 pdTRUE,并在中断服务函数结束时调用 portYIELD_FROM_ISR() 函数来切换任务上下文,这里我们不做任何处理,传入一个 NULL 即可。因为中断源比中断多,所以有些中断是与多个中断源共享的。
2024-01-16 09:43:18
1329
原创 S1-11 定时器
定时器又分为软件定时器和硬件定时器,硬件定时器在芯片中数量是有限的,在 ESP32-S3 中也仅有两个硬件定时器(其中有一个还被用作了FreeRTOS的Tick精确计时和任务调度),而软件定时器在一个系统中就可以有无数个,软件定时器和硬件定时器都是定时器的实现方式,它们的区别主要体现在实现方式和精度上。删除定时器,在删除之前,还进行了定时器是否活跃中的判断,如果活跃中,则先停止再删除,这一步对于删除来说是多余的,这里我们仅用于演示。第三个按钮演示了定时器的启动和停止,值得一提的是,启动定时器必须使用。
2024-01-16 09:40:04
972
原创 S1-10 任务管理及内存优化
A : 正在运行的任务,触发调度器工作的途径有:(但凡有可能引出高优先级任务或中断的操作都会触发调度器检查)创建新任务(显然,新建任务可能比自身的优先级高,因此可能触发调度器)挂起自己、删除自己(往往代表我执行完了)、阻塞延时自己、普通延时自己解阻塞高优先级任务、或触发中断(中断中解阻塞一些高优先级任务)高优先级任务自动就绪(主要指高优先级任务延时结束,定时器任务,定时器任务优先级较 高的情况下,若定时溢出,将抢占CPU)
2024-01-15 09:17:44
1265
原创 S1-09 直达任务通知
在消息队列的章节中,我们可以任意定义消息队列的大小,这是一种解决方案。在其他操作系统中(如μC/OS和RT-Thread)都有一种叫做“邮箱”的传输方式,基础类型的邮箱和消息队列的用法是一样的,但邮箱的高级用法中是可以携带一个不定长度的附件数据的(在消息队列章节中没有讲到),通常的做法是邮箱中传输两个4字节数据,第一个数据表示附件的大小(或类型),第二个数据表示附件的指针,如果在消息队列中使用邮箱,可以利用结构体模拟一个类似的附件,但直接任务通知中数据区的大小只有4字节,也就是说数据区域只能放一个指针。
2024-01-15 09:14:29
998
原创 S1-08 流和消息缓冲区
流缓冲区一般用在不同设备或者不同进程间的通讯,为了提高数据处理效率和性能,设置的一定大小的缓冲区,流缓冲区可以用来存储程序中需要处理的数据、对象、报文等信息,使程序对可以对这些信息进行预处理、排序、过滤、拆分等操作,从而提供程序的效率和处理速度。流缓冲区主要应用于数据输入输出(I/O)操作中,例如读取和写入文件、网络通信等场景。在数据读取方面,缓冲区可以让程序一次读取较大量的数据,而不是多次读取小量数据,在提高读取效率的同时减少了系统调用的次数和内存访问的延迟。在数据写入方面,通过缓冲区将一部分或全部数据
2024-01-14 12:44:29
1095
原创 S1-07 事件组
回到我们厨子和吃货的世界中,本次出场的只有厨子,另外还有一些服务员,服务员负责给厨子配菜,这时候厨子做一个汉堡需要等待三样东西,分别是面包、肉饼、蔬菜,做蔬菜的服务员等肉饼做好后再做蔬菜,做肉饼的则要等待做面包的,而做面包的需要等待厨子的号令,一切是那么的竟然有序。: 指定事件组中要测试的一个或多个事件位的按位值,可以用 | 运算指定多个,例如,等待第0位则为1,等待第二位则为2,等待第三位则为4,等待第四位则为8,如果等待第1位和第三位,则为1|3=5。
2024-01-14 09:50:45
940
原创 S1-06 消息队列
在实际项目开发中,消息队列用的最多的地方就是与外部的通讯,因为在代码中,不同的线程都可能用到同一个外设,之前我们的做法是通过互斥信号量的方式对资源进行保护,我们也可以通过消息队列等方式实现,把所有操作设备的行为封装在一个任务中,其他如果有需要操作设备的,都以消息的方式发送到消息队列中,设备任务依次对消息队列中消息进行处理。lcd_task 现成模拟了显示屏,每间隔100ms就向消息队列请求,看是否有新的消息到达,如果在1秒钟之内获得不了新的消息,则取消等待,如果发现有新的消息后,将消息取出并打印在屏幕上。
2024-01-13 08:54:18
928
原创 S1-05二进制信号量和计数器信号量
但问题就在于,原来我们在LED任务中,我妈是通过 xSemaphoreTake 实现等待的,而此时CPU已经让出给其他线程,我们的CPU利用率是很低的,但在上述例程中,采用了轮训的方式,每间隔一段时间就扫描一次按键是否被按下了,这种效率是极低的,在多任务情况下,轮训线程占用了CPU其他程序就得让路,这就造成了不必要的资源浪费,所以我们在开发过程中尽量使用二值信号量来代替线程间的通讯,减少资源消耗。前面讲过,二进制信号量用于在两个任务间传递数据,也就是我们可以在一个任务中释放信号量,另一个任务中获取信号量。
2024-01-13 08:51:58
1190
原创 S1-04 OLED和MPU6050
u8g2是一个基于monochrome lcd的嵌入式图形库。它可以通过多种接口与mcu交互,支持i2c、spi和并行模式等多种接口,以及若干种字体和绘图函数,可用于创建各种ui界面、菜单、文本等。其具有轻量级,灵活性高,支持多种格式的字体及占用空间小等优点,因此在很多嵌入式产品中得到了广泛的应用。
2024-01-12 09:26:50
1511
1
原创 S1-03 线程间通讯
函数,函数传入两个变量,第一个是互斥信号量的句柄,也就是我们之前创建的那个key,第二个是等待的超时时间,例程中设置的是1000个Tick(注意,这里不是毫秒,而是系统Tick,如果需要使用毫秒,可以用pdMS_TO_TICKS进行运算),如果在固定时间内获得了信号量,则返回pdPASS,如果返回的是pdFalse或其他的值,则表示获取失败。我们假设有一个场景,一个冰箱里放了 100 个汉堡,冰箱旁有两个人,一个是吃货,不停的吃,另一个是厨子,隔一段时间公布一下冰箱里剩余的汉堡数量和被吃货吃掉的汉堡数量。
2024-01-11 09:31:30
1067
原创 S1-02 FreeRTOS线程控制
这个函数用于删除当前任务,如果缺失了这行代码,程序会报错,因为任务一旦出了入口函数,调度器将不知道向哪运行,FreeRTOS任务,只有运行中、就绪、挂起、阻塞、等待删除五种状态,我们之前的任务都是放在一个while大循环中运行,永远不会退出,但本次的例程中少了while循环,也就意味着任务会退出,当任务退出后,就不属于这五种状态的任何一种,CPU直接懵圈,索性就挂了……:指任务处于运行中,每个CPU同时只会有一个任务处于运行中的状态,可通过delay函数进入阻塞,或通过暂停等进入挂起。
2024-01-11 09:30:43
1096
原创 S1-01 FreeRTOS
FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。由于RTOS需占用一定的系统资源(尤其是RAM资源),只有μC/OS-II、embOS、salvo、FreeRTOS等少数实时操作系统能在小RAM单片机上运行。
2024-01-11 09:29:23
1087
原创 在 ESP-IDF 环境下,使用标准 C 扩展 Micropython 模块
在 ESP32 的 ESP-IDF 环境下,利用 C 扩展 Micropython 模块
2024-01-10 20:15:18
3298
3
原创 i.MX6系列SD卡烧写原理分析及源码讲解
最近用i.MX6ULL的时候,发现LCD刷新率跟不上(不知道是自己能力不行还是RGB本身就是慢),研究了NXP官方的一些资料后,发现6D系列支持MIPI的屏幕,而且是两路,主频也比6U快,双核结构,支持OpenGL3.1,简直是爽的不要不要的!可惜,火哥家没有,某宝中找到了飞凌嵌入式的OKMX6DL-C这个型号的板子,但用6ULL的烧写器烧写裸机程序无法启动,我想可能是启动地址问题导致的,这个后期可以找原理图确认一下。飞凌比火哥还懒,下载器只有官方提供的那个好几百M的,每次烧写必须把u-boot到根文件系统
2021-02-26 14:50:26
2430
原创 野火i.MX6ULL Pro开发板构建根文件系统
眼瞅着2020年马上就要到头了,承诺给大家的Linux移植三部曲还差最后一篇,这个拖延癌晚期恐怕今年是治不好了,不到最后的DL绝不妥协……(这句话是年前写的,写了个开头就疫情了,封城,电脑丢在了公司,于是过上了老婆媳妇热炕头的性福生活,已无力码字……)前面我们已经把U-Boot和Linux内核移植完成了,中间还加了个SDL2的移植过程,但其实看完我前面两篇的移植,Linux是不能跑起来的——没有根文件系统。啥是根文件系统?根文件系统可以简单的理解为一个文件夹,或者目录,就是我们经常用到的“/”,
2021-02-20 16:26:17
1325
原创 野火iMX6ULL Pro开发板移植SDL2
承诺的Linux三部曲移植还没写完,差个根文件系统没有写呢,但实在压抑不住内心的亢奋情绪,先把SDL2移植奉献给大家吧。关于SDL的移植,已经进行一个月了,之前把SDL移植成功后打算写Python的模块,进行到一半发现有些函数没见过,翻遍全网找不到SDL最新的API文档,去官方看才发现,SDL已经停更了,以后所有的精力都将转到SDL2中。奶奶个熊的!浪费了我一个月的时间写Python模块,原来是个废物!本以为换成SDL2之后将一切顺利,的整个移植一直卡在No available video d...
2020-12-22 18:08:44
2522
5
原创 野火i.MX6ULL Pro开发板移植Linux
书接上文,上次把U-Boot移植完成了,有兴趣的小伙伴可以通过传送门过去。Linux系统的移植已经完成,但是果然还是移植没时间整理资料,没办法,2年级的娃真的很难辅导……现在我对野火开发板的移植已经完成了纯净Linux系统、Busybox根文件系统、SDL+OpenGL、Python3.6,下一步开始移植音频、WIFI、蓝牙、以及按键系统,但是音频已经搞了两天了,移植找不到设备,看了无数遍源码,都无果,后来换上火哥提供的5月份的FullQt,依然是音频设备错误,技术客服回答可能是音频模块坏了,这两天
2020-12-07 18:07:30
2477
2
原创 野火i.MX6ULL Pro开发板U-Boot移植
之前一直用STM32跑RTT,最近想做一台游戏机,主屏采用960*640,但是发现STM32的运存实在着急,2M根本不够用,64M勉勉强强,但是看了看价格就呵呵了。于是在网上搜了搜发现i.MX6ULL这东西还行,就买了块野火i.MX6ULL Pro的开发板,因为之前一直用火哥家产品,所以这次就爱了。入手之后才发现,i.MX6ULL的开发模式跟STM32完全两个概念,官方文档两千多页,而且纯英文,读起来那个费劲啊!勉勉强强把RTT搞上去跑了跑,发现写驱动真的太感动了,要啥没啥,自己写可费老鼻子劲了。所以经
2020-11-21 19:04:22
3107
8
原创 RT-Thread中中断触发MicroPython函数
昨天完成了C函数与Python的绑定,可以实现通过Python调用C的函数,具体文章可参考:https://blog.youkuaiyun.com/suolong123/article/details/108982925接下来的任务是实现在C语言中调用Python函数。我的想法是,通过将一个Python函数注册到侦听器,当有按键中断触发的时候,调用这个Python函数。也就是说,这些函数不是事先写死到代码中的,而是通过动态注册的方式实现。这里面要用到的一个特殊的方法是mp_sched_sc.
2020-10-10 17:31:21
1172
原创 MicroPython中C函数与Python的绑定
这几天想给孩子做个编程玩具玩,找来找去,相中了MicroPython,这几年Python异常的火爆,原来只有程序员碰的东西,现在恨不得公司前台都得学会。某天孩子从学校回来,带回来张表让填,我一看,竟然是编程培训,二年级开始学Python??好吧,我已经落伍了……RT-Thread已经玩了一段时间了,但始终没有拿他做点东西,正好趁这个机会,用RTT+MicroPython给孩子做一款硬件编程游戏机。设计是这样的:*&%¥@#!#¥%&)*&%#¥@#%¥*(*&a.
2020-10-09 17:37:54
2329
原创 WS2812B全彩灯板
前段时间玩树莓派的时候突然发现个好玩的东西,WS2812,一个数字控制的全彩LED。之前玩LED的时候都是四个引脚,RGB三个通道都得占一个引脚,如果做矩阵的话恶心死人,要加各种的锁存,所以一直没有用过多色LED矩阵。偶然的机会,看到了网上一朋友用数字控制的全彩LED,只占用一个引脚就能控制三个颜色,更重要的是,如果做矩阵,也是一个引脚搞定!牛的一逼啊!先给大家看看资料很多种型号,我用的是比较小的那种,2020的封装,其他的引脚是一样的VSS:供电引脚VDD:信号电源接地引.
2020-07-09 18:00:00
10098
24
原创 FastLED库函数说明
基础函数FastLED.addLeds<WS2812,LED_PIN,GRB>(leds , NUM_LEDS)初始化LED控制光带WS2812:控制灯珠的类型LED_PIN:控制板上使用的IO端口GRB:色彩类型leds:光带NUM_LEDS:灯珠的总数量FastLED.show();刷新灯的色彩显示FastLE...
2019-12-30 16:45:25
15888
13
原创 关于树莓派程序加密和加密分区的设置
前段时间在做司天监操作系统的时候,有个紧迫的需求,就是将程序进行机密存储在SD卡中,因为程序是用JAVA写的,虽然做了扰码和加密处理,甚至重写了Classloader,但是还是害怕源码泄露,所以想到能否把程序放在一个加密分区中,系统加载的时候把加密分区进行加载,平时就是一块不知道是啥东西的数据,或者是一个固定大小的文件。网上找了很多资料,没找到任何答案,但是看到问此类问题的人倒是挺多的,所以还是...
2019-12-02 12:46:26
3436
4
原创 树莓派扩大boot分区,真的是boot不是root
最近用树莓派在做一套天文操作系统,其中有一块需求是需要把拍摄的天文数据放在FAT32分区中,方便Windows系统读取。起初的做法是把在主分区后面扩出一块FAT分区,这种方法用了一段时间都很正常,直到遇见了Win7操作系统。在Win7操作系统中,如果一张SD卡分了N个区,如果前面有一块是Ext或其他格式的分区,那后面的所有FAT分区都无法识别。这就尴尬了……所以想到了能否通过扩展boot分区...
2019-09-16 10:51:09
3046
6
原创 对讲机联动模块开发(树莓派文字转语音模块对接)
最近公司方面有个业务需求,因为我们做的是智慧社区项目,有一块涉及到车辆异常出库报警,比如车辆被盗是。这时候如何能快速的通知到安保人员呢?原来想法是给安保人员配一台PAD,或者在手机上安装个APP,但这样也有很大的弊端。而安保人员人人必备对讲机,所以考虑能不能和对讲机联动。自然就想到了TTS(TextToSpeech),之前和小i、科大讯飞、华声捷通都用过合作,对这块业务还算比较熟悉,本来打
2016-11-11 13:32:12
5536
原创 树莓派3配置串口,JAVA实现串口通讯(2016年3月版本,重点提示,3月之后的版本配置貌似不一样)
因为公司产品的需求,需要用到树莓派上的串口功能,但树莓派3的串口直接不能用,因为在树莓派3用的CPU中本身有两个串口,一个是硬件串口(PL011 UART),一个是迷你串口(mini-uart),在树莓派2B和B+等老版本上,树莓派将硬件串口分配给了GPIO14和GPIO15,因此可以直接使用这个串口。但在树莓派3上,多了一个然并卵的蓝牙模块(起码我感觉丫就是然并卵的东西,我们有自己的蓝牙产品,完
2016-11-10 17:24:16
2548
5
原创 用遗传算法做数独求解器
用遗传算法做数独求解器I 闲话在前我不知道有多少人曾经试过这种方法,但我在网上没有找到过类似的内容。刚开始接触遗传算法的时候,根本不知道他到底有什么用,只知道是个很好玩的算法。于是乎,第一时间想到了拿这东西解数独,但经过N次尝试失败后,放弃了。前几天群里有人偶尔又提到遗传算法,于是便又想起了之前的那个数独问题,并再次尝试用新方法解决问题。II 解决方案首先提一下之前失败的例子。在我想到的第一种解决方案中首先想到了是把要填的数提出来,做成一个随机序列。拿下面这个数独为例:在这里例子中,从左到右、自上到下依次缺
2010-11-03 14:18:00
3670
1
SDL2移植库源文件
2020-12-22
SDL2 i.MX6ULL移植包
2020-12-22
野火i.MX6ULL Pro开发板 Linux移植源码
2020-12-07
RT-Thread-MicroPython 用户手册.pdf
2020-09-17
机器学习-15. Keras深度学习框架
2020-07-16
机器学习-14. 卷积神经网络深入、AlexNet模型
2020-07-16
机器学习-13. 卷积神经网络、CNN识别图片(下)
2020-07-16
机器学习-13. 卷积神经网络、CNN识别图片(上)
2020-07-16
机器学习-12. TensorBoard可视化
2020-07-16
机器学习-11. DNN深度神经网络手写图片识别
2020-07-16
机器学习-10. TensorFlow深入、TensorBoard
2020-07-16
机器学习-09. 深度学习、TensorFlow安装和实现
2020-07-16
机器学习-08. 密度聚类、谱聚类
2020-07-16
机器学习-07. 分类评估、聚类(下)
2020-07-16
机器学习-07. 分类评估、聚类(上)
2020-07-16
机器学习-06. 多分类、决策树分类、随机森林分类(下)
2020-07-16
机器学习-06. 多分类、决策树分类、随机森林分类(上)
2020-07-16
机器学习-05. 分类器项目案例和神经网络算法
2020-07-16
机器学习-04. 逻辑回归详解和应用(下)
2020-07-16
机器学习-04. 逻辑回归详解和应用(上)
2020-07-16
机器学习-03. 梯度下降和过拟合和归一化(下)
2020-07-15
机器学习-03. 梯度下降和过拟合和归一化(上)
2020-07-15
机器学习-02. 线性回归深入和代码实现
2020-07-15
机器学习-01. 人工智能开发及远景介绍
2020-07-15
数据战法服务_源代码
2013-01-25
数据转发服务器
2013-01-25
模拟WEB触发器
2013-01-24
接口服务器程序 模拟WEB服务器
2013-01-24
增量升级打包程序
2013-01-24
八卦格繁简双字体字帖生成程序-带虚拟机
2012-05-17
用遗传算法做数独求解器
2010-11-03
小偷程序(模拟请求,抓取网页内容)
2009-06-28
DJNativeSwing如何实现JS调用JAVA原生的函数?
2017-07-24
请问高并发的数据存储大家都是如何解决的?
2017-03-13
请问墨水屏最大可以支持多大?
2015-04-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人