
嵌入式学习
文章平均质量分 64
niu_88
这个作者很懒,什么都没留下…
展开
-
双向链表的理解
代码中经常会出现双向链表,对于双向链表的插入和删除有对应的API函数接口,但直观的图表更容易理解,所以本文会对rt-thread内核代码中提供的双向链表的一些API函数操作进行绘图,方便后续随时查看。原创 2025-03-31 20:19:48 · 573 阅读 · 0 评论 -
Cortex-M7地址非对齐访问
本文只是做个记录,脑子不好容易忘记。Cortex-M7是支持地址非对齐访问的,但是使用时还是需要多注意细节之处的。。原创 2024-03-17 15:11:39 · 706 阅读 · 0 评论 -
手把手教你使用USB的CDC+MSC复合设备(基于stm32f407)- 2
此文主要是记录一下usb枚举时抓取的一些数据以及usb msc涉及的部分scsi协议。原创 2023-09-10 21:53:51 · 1207 阅读 · 1 评论 -
手把手教你使用USB的CDC+MSC复合设备(基于stm32f407)
最近对usb有点兴趣,感觉挺好玩的,于是买了本圈圈大神的经典著作-,里面使用51单片机+usb芯片对usb的基本知识潺潺道来,做了十个左右的常用案例实验,很有趣,建议大家看看。趁热打铁,拿身边的开发板来练练手,探索一下复合设备的好玩方便的地方。原创 2023-08-13 10:13:40 · 9722 阅读 · 43 评论 -
ld文件中指定变量在flash中的地址定义
本文说的是在gcc环境中,Keil或IAR可能有自己的使用方法。我们在定义变量时,有时候需要把变量定义放到flash中的固定位置或区域,此时需要修改工程中的链接文件(link file,ld文件)。原创 2023-05-21 23:23:15 · 2432 阅读 · 0 评论 -
esp8266(MQTT固件)通过at指令连接阿里云平台
实验:esp8266 连接阿里云。准备工作:usb连接到电脑上之后,可以识别到串口,说明有固件。由于新买的模组,芯片内的固件可能并不是我们想要的,此时可自行官网下载固件及烧录。固件地址:https://docs.ai-thinker.com/%E5%9B%BA%E4%BB%B6%E6%B1%87%E6%80%BB本人使用的固件:固件下载之后,需使用官方提供的烧录工具,地址:https://docs.ai-thinker.com/%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%原创 2023-03-11 15:39:18 · 6534 阅读 · 2 评论 -
关于嵌入式函数入口参数的了解
1、cpu执行代码时,一般用到内部的通用寄存器是R0、R1、R2、R3;2、当函数的入口参数不超过4个时,则会使用上述4个通用寄存器来保存当前参数;否则,会将多余的参数压入栈中进行保存;注意:此处4个参数,指每个参数占用的字节数不超过4个,若参数占用的空间大于4个字节,如结构体或者double类型数据,则会使用多个通用寄存器来保存;3、最后,也就是一条建议,由于CPU内部运行是快于栈操作的,所以减少多余的入口参数,可以有效地加快程序运行的速度。原创 2022-10-23 14:05:01 · 732 阅读 · 0 评论 -
嵌入式函数调用入栈与出栈
简单的例程,几个函数调用,来查看寄存器状态,主要是学习一下cortem-M核中LR寄存器的理解:例程源码:通过单步调试来查看各个寄存器状态:进入调试界面记录当前进入main函数所要做的动作和记录的状态1、因main()函数中还有子函数,所以需将r4-lr寄存器压入栈中,对应的汇编:2、记住当前main函数中return 0处的代码地址:0x08000180在进入fun1()函数后,会将返回地址的指针加1保存到LR寄存器中,即0x08000181,请记住这个值。进入fun1()1、查看当前原创 2022-10-22 16:59:24 · 1361 阅读 · 0 评论 -
vscode+jlink+GDBServer在线调试
上述步骤即可实现vscode+jlink+GDBServer的在线调试功能,当然也存在一些问题,目前还未找到原因,如每次进入调试都需重新启动GDB Server,然后再使用vscode进入调试模式,否则可能会进入调试失败。图中所示:J-Link已连接,GDB Server Listening port: 2331,TCP端口是2331处于监听状态,等待GDB的TCP连接。至此,GDB Server已打开,tcp端口2331处于监听状态,下一步是要通过GDB进行连接GDB Server。原创 2022-10-16 15:14:41 · 9456 阅读 · 3 评论 -
ucos iii 任务栈使用率统计方法
p_free和p_used的和就是创建任务时设置的任务栈总大小。标志,则任务在创建时会开启统计功能。原创 2022-08-24 23:24:16 · 360 阅读 · 0 评论 -
c/c++单个文件或函数优化级别设置
【代码】c/c++单个文件或函数优化级别设置。原创 2022-08-23 21:48:53 · 629 阅读 · 0 评论 -
单片机中uid的使用方法
在链接文件xxx.ld文件中定义我们要存放的uid校验码在flash中的区域rom(rx)0x4000;0x4000;.text{定义32位校验码。原创 2022-07-17 11:42:16 · 1751 阅读 · 0 评论 -
模拟I2C
I2C具体内容参考资料https://blog.youkuaiyun.com/sternlycore/article/details/85600668https://blog.youkuaiyun.com/qq_43460068/article/details/122409361以下是在Atmel 300MHz下调试处的400KHz模拟I2C,延时函数需要根据实际内核进行设置#define I2C_SDA_OUTPUT_DIR(pin) ioport_set_pin_dir(pin, IOPORT_DIR_OUTP原创 2022-04-29 00:06:50 · 566 阅读 · 0 评论 -
内存管理学习
简单的内存分配算法学习系统中一块剩余不用的大块连续内存。当需要分配内存块时,将从这个大的内存块上分割出相匹配的内存块,每个内存块都包含一个管理用的数据头,通过这个头把使用块与空闲块用双向链表的方式链接起来,如图:mem_head是free链表的头,整个内存块从mem_x开始,每个内存块包含一个头,内容:1、magic 魔术字,用于标记这个内存块是一个内存管理用的内存数据块;魔术字不仅仅用于标识这个数据块是一个内存管理用的内存数据块,实质也是一个内存保护字:如果这个区域被改写,那么也就意味着这块内存原创 2022-03-30 22:36:02 · 720 阅读 · 0 评论 -
docker与virtualbox切换使用
参考https://www.codeleading.com/article/52601089932/原创 2022-01-13 18:11:53 · 653 阅读 · 0 评论 -
Nuttx实时操作系统 SAMV71-Xplained开发板适配
官网参考:https://nuttx.apache.org/docs/latest/quickstart/compiling.html1、board配置nhf@nhf-VirtualBox:~/work/learn/nuttx/NUTTX/nuttx$ ./tools/configure.sh -L | grep samv71 samv71-xult:nsh samv71-xult:netnsh samv71-xult:vnc samv71-xult:module samv71-x原创 2021-10-14 01:07:10 · 517 阅读 · 0 评论 -
linux下JLink使用脚本一个命令烧录程序
#!/bin/bash#--------------------------------------------------# program binfile, usage: ./program firmware.bin# chip:Atmel# start addr:0x00400000#--------------------------------------------------cmdfile="./tmp.jlink"start_addr=400000end_addr=401原创 2021-10-02 21:43:22 · 918 阅读 · 0 评论 -
make编译MCU(nxp1064)基于CMakeLists.txt
针对MCU,编写CMakeLists.txt,使用make编译。根目录创建CMakeLists.txt,编写内容:cmake_minimum_required(VERSION 3.10)project(led)enable_language(ASM)set(CMAKE_C_COMPILER arm-none-eabi-gcc)set(CMAKE_OBJCOPY arm-none-eabi-objcopy)set(CMAKE_SIZE arm-none-eabi-size)add_de原创 2020-12-31 23:59:31 · 977 阅读 · 0 评论 -
RT-Thread任务切换函数,汇编源码gcc环境详解
主要针对RT-Thread系统中任务切换函数汇编部分进行一下记录,方便回头查看,gcc/MDK/IAR内容差不多,只是语法格式不同而已,本人一般使用gcc环境,所以对 context_gcc.S详解。先贴源码/* * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author原创 2020-08-13 00:48:56 · 1345 阅读 · 1 评论 -
Atmel SAMV71 SDIO接口操作注意环节
一、SDIO接口操作SD卡主要方式方式优势弊端适用场合单块轮询 + 中断读写无不断与SD卡命令交互,耗时,同时很容易引起SD卡长时间应答等待,导致写数据会很慢适合写入字节数不大于512B的数据量多块轮询 + 中断读写相对单模块,速度较快,不用与SD卡频繁交互命令多块写数据期间,必须进入临界区,防止被中断打断而数据写入错误,(如写入两块数据,需时间2.3ms,其他任务无法进行调度)适合写入字节数大于512B的数据量,且对实时性要求不高的场合多块DMA+ 中断读原创 2020-05-11 00:37:54 · 587 阅读 · 0 评论 -
32位CRC校验代码
/* * @param1: ucBuf * @param1: uiLen * @param1: uiSeed */uint32_t CheckCrc32WithInitial(uint8_t *ucBuf, uint32_t uiLen, uint32_t uiSeed){ uint32_t crc = uiSeed;/*0x00000000;*/ if (NULL ==...原创 2019-03-18 22:25:20 · 3844 阅读 · 0 评论 -
IAR集成开发环境中无法设置断点的问题
使用IAR集成编译环境做嵌入式开发,调试代码时经常遇到无法设置断点,各种帖子提供的方法也都尝试过,还是没有完美的办法,毕竟咱们使用的破解版的,bug巨多。 废话少说,无意间发现的一个小骚操作,直接奉献。打开工程项目,在debug模式下若遇到无法设置断点,则在菜单栏依次选择: View-> Breakpoints 上图红色方框的不用管,此时,同志们...原创 2019-03-12 23:17:12 · 1623 阅读 · 0 评论 -
TrueSTUDIO 中printf()格式化函数的使用
代码中随意位置添加:#include "stdio.h"#ifdef __GNUC__#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)PUTCHAR_PROTOTYPE{ HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, HAL_MAX_DELAY); return ...原创 2019-01-28 23:15:26 · 1550 阅读 · 1 评论 -
C语言实现队列功能
c语言实现基本的队列功能,创建/清除队列,插入单个或多个字节,取出单个或多个字节,队列当前状态等等,源文件可直接在这里下载:https://download.youkuaiyun.com/download/niu_88/10762984cqueue.h文件#ifndef __CQUENE__#define __CQUENE__typedef unsigned int uint32_t;t...原创 2018-11-04 21:21:36 · 1560 阅读 · 1 评论