Arduino到底算不算嵌入式开发?
有学员问我:老师,用Arduino做东西,这算不算嵌入式开发,还是说这只能算是玩?今天和大家一起聊聊这个话题。 一、先说结论:算 Arduino当然是嵌入式开发。首先嵌入式开发本质是什么?就是用单片机去感知输入、控制输出,完成特定的功能。Arduino不就是这样,写代码,下载到板子上,控制LED闪烁、读取传感器数据、驱动电机转动,这不就是嵌入式开发干的事。 只不过Arduino把很多复杂的东西封装
纳米网嵌入式技术频道 — 提供嵌入式技术领域最新资讯、技术文章和行业动态。
有学员问我:老师,用Arduino做东西,这算不算嵌入式开发,还是说这只能算是玩?今天和大家一起聊聊这个话题。 一、先说结论:算 Arduino当然是嵌入式开发。首先嵌入式开发本质是什么?就是用单片机去感知输入、控制输出,完成特定的功能。Arduino不就是这样,写代码,下载到板子上,控制LED闪烁、读取传感器数据、驱动电机转动,这不就是嵌入式开发干的事。 只不过Arduino把很多复杂的东西封装
在C/C++开发中,结构体是一种常用的数据结构形式,在某些应用场景中,需要特别关注结构体对齐问题。 本篇就来通过一个实际例子,来探究结构体对齐的具体表现以及结构体对齐应该怎么计算。 关注“码农爱学习”,设置“星标公众号” 1 结构体对齐问题 举个例子,一个结构体中,有多个成员,那结构体的整体空间占用大小,等于各个成员大小的累加和吗?再进一步,结构体套结构体,最外面结构体的整体大小,等于各个成员结
前言 对于嵌入式入门的同学来说,往往会遇到设备端处理能力不足、在面对大规模计算情况下需要借助上位机完成进一步的数据处理的情况。此时,Python 语言因其简单易用的特点和丰富多样的库成为了我们做上位机的不二选择。然而,尽管我们可以很方便使用 Python 的 GUI 和科学计算库,但是写出的代码还是用的面向过程的那一套东西,代码是老太太的裹脚布,又臭又长,面向对象的设计方法为我们提供了一种
训练营最近又上线了一个新项目: C++ MCP 服务器实现。 这个项目是对跨平台 AI 工具调用的全新解决方案。无论是文件操作、数据库查询,还是 API 调用,借助 MCP 协议,AI 与外部工具的连接都会变得前所未有的简单。通过统一的标准协议,AI 只需要一次实现,即可支持多个平台,彻底告别碎片化的生态! 下面来看看关于这个项目的详细介绍吧~ 为什么需要 MCP? 下面看一个真实场景 当你问 A
FreeModbus是一款开源的Modbus协议栈。同时网上也没有发现比较好的开源的Modbus主机协议栈,所以才开发这款支持主机模式的FreeModbus协议栈。本版FreeModbus版本号更改为V1.6,特性如下: 新增加的主机源码与原有从机的风格及接口保持一致; 支持主机与从机在同一协议栈运行; 支持实时操作系统及裸机移植; 为应用提供多种请求模式,用户可以选择阻塞还是非阻塞模式,自定义
点击上方蓝字【囧囧妹】一起学习,一起成长! 引言 最近因为项目要求用c++,之前一直很讨厌c++,没办法只能短时间弥补c++的知识,项目中需要定义一个函数指针类型的vector,本以为很简单的问题,结果调试了一天,才发现错在哪里。 多余的std::function 先上代码吧,这里有一个测试代码,为什么要有测试代码?是因为下面的方式我在最开始验证该种实现时打印的地址是对的,但是之后一段时间就不对了
之前介绍过使用backtrace的方式定位程序崩溃问题,本篇来介绍另一种方式,通过生成core-dump文件,再通过gdb工具来定位程序崩溃问题。 关注“码农爱学习”,设置“星标公众号” 1 使用core-dump分析崩溃的条件 1.1 开启core-dump文件的生成条件 解除core 文件大小的限制,有临时生效和永久生效两种方案,在本篇的例子中,在Ubuntu中使用临时生效的方式,嵌入式Li
bootm的镜像加载地址与uImage镜像的加载地址、入口地址之间的关系 分析的U-Boot源码版本为2021.07: wget ftp://ftp.denx.de/pub/u-boot/u-boot-2021.07.tar.bz2 make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- clean distclean make ARCH=arm CROS
一、什么是 MicroPython? MicroPython 是面向微控制器的 Python 语言。借助 MicroPython,你可以编写 Python3 代码,甚至在资源受限的裸机架构上运行它。 💡 基础知识补充: 裸机架构 :指没有操作系统(OS)、直接在硬件上运行程序的环境,资源(RAM、Flash 存储)非常有限,比如 ESP32、STM32 等单片机。 Python3 兼容性 :
1. 前言 总线验证会涉及很多Masters和Slaves接口,少则十来个,多则成百上千个,每个口通常都需要挂接对应的VIP来产生激励,如下图示例,有5个Master VIP,4个Slave VIP。挂接的Master VIP用于发起激励,挂接的Slave VIP用于响应激励。在挂接如此众多的VIP验证环境汇总,需要有更高效且灵活的方法去控制每一个VIP激励行为。 图1 总线示例 如何判断一种
训练营筹备很久了的AI模拟面试项目上线啦~AI模拟面试项目依托 C++ 与AI 技术,构建 AI 辅助面试软件。 项目定位 一句话描述:C++ AI 面试官,但其实你可以改造为各种编程语言,各种场景的AI面试官。 基于C++17开发的实时语音技术面试系统,实现从简历解析、面试问题生成、实时交互到评分报告的全流程自动化,适用于企业初筛、机构考核、个人练习等场景,我们这个项目其实主要适合个人练习等
DMA与MMIO的读写操作均通过三种基本报文实现:MWr(写请求)、MRd(读请求)和CPLD(完成带数据)。 MMIO的读写机制较为简单:写操作直接发起一次MWr请求;读操作则先发起MRd请求,然后等待一个包含数据的CPLD报文作为响应。 相比之下,DMA的读写行为则复杂得多,但其原理依然可以理解。 Request Memory请求包在传输时需遵循以下规范 4KB 地址边界限制 Memor
点击上方蓝字【囧囧妹】一起学习,一起成长! 引言 最近因为项目要求用c++,之前一直很讨厌c++,没办法只能短时间弥补c++的知识,项目中需要一个接口只调用一次,需要使用到c++的call_once机制,于是写一个小demo来测试,就因为这个足够小发现了一个非常有意思的问题。 call_once,基本原理 std::call_once 的内部实现基于两个重要的组件:std::once_flag 和
POST方法:用于向服务器提交新资源或触发一次非幂等的操作,强调 “创建”的动作 1.2 幂等性 幂等性是 HTTP 协议中的核心概念,指多次执行同一个请求,得到的服务器资源状态和执行一次的结果完全一致,不会产生额外的副作用 幂等:第一次上传会创建该文件,第二次上传同一个或不同内容的文件,会直接覆盖掉原来的文 非幂等:每次请求服务器都会生成一个新的文件副本(比如自动命名 file1.txt`
轻量级无人机飞控。采用STM32F4系列实现飞控算法,整合MPU6050姿态传感器和PWM电机驱动。 项目框架 IO接口分配 原理图 3PCB 如何下载资料 不会获取的同学,看一下下方获取资料视频教程。
点击上方蓝字【囧囧妹】一起学习,一起成长! 引言 最近因为项目要求用c++,之前一直很讨厌c++,没办法只能短时间弥补c++的知识,项目中要设计一个线程池,需要取线程池任务的执行结果,这里涉及到c++的future关键字,在这里做个总结。 在C++的世界里,std::future是一种非常重要的工具,它让我们能够以异步的方式执行代码,并在需要的时候获取结果。随着C++11标准的引入,std::fu
关注“码农爱学习”,设置“星标公众号” 本篇来介绍使用wpa工具给嵌入式Linux开发板配网、再使用udhcp工具分配IP。 1 wpa_supplication配网 wpa_supplicant 是 Linux 下标准的 Wi-Fi 认证管理工具,负责处理 Wi-Fi 连接、加密认证(WPA/WPA2/WPA3)、漫游等核心逻辑,以守护进程(后台服务) 形式运行。 1.1 创建wpa的配置文件
看到下面的代码时,会感觉和常用的完全不一样: import lvgl as lv lv.init() scr = lv.obj() btn = lv.btn(scr) btn.align(lv.ALIGN.CENTER, 0, 0) label = lv.label(btn) label.set_text("Hello World!") lv.screen_load(scr) 难道不应该是: im
1 CRC简介 CRC (Cyclic Redundancy Check)循环冗余校验,是一种基于二进制模 2 除法的数据校验算法。它通过对原始数据进行数学运算,生成一段固定长度的校验码(CRC 值),接收方或读取方使用相同算法重新计算 CRC 值,与校验值对比,判断数据是否完整或传输是否出错。 2 CRC算法的5个参数 一套 CRC 算法由以下 5 个参数唯一确定: 位宽(Width):CRC
你是一名C++程序员,负责开发公司的核心的股票交易系统,老板见到你都得喊一声哥,系统的核心是一个Stock类,存储股票的实时价格: class Stock { private: std::string symbol_; double price_; public: void setPrice(double price) { price_ = price; } dou