又见炊烟升起

新随笔 联系 订阅 管理

目录

//操作2的几次方的乘除法,都用移位操作,不要直接用乘除

//常用的三大低速串口:uart串口通信,spi读写flash,i2c读写eeprom

//Intel和AMD的PC处理器普遍采用**小端模式**(Little-Endian)

//设置寄存器时:


1) 要设置 bit n:

val = data\_reg;

val = val | (1<<n);

1) 要清除 bit n:

val = data\_reg;

val = val & ~(1<<n);

//cortex-M内核的芯片可以运行ucLinux吗? A:LIUNX的内存管理要用到MMU,现在M3大多都不

缩略语

//XTAL - 表示外部晶振(或外接晶振)(External Crystal Oscillator)
TOSC - Timer Oscillator
根文件系统(rootfs=Root Fils System)
复位和时钟控制 (RCC)
数字摄像头接口 (DCMI)
独立看门狗 (IWDG)
窗口看门狗 (WWDG)
控制器区域网络 (bxCAN)
安全数字输入/输出接口 (SDIO)
随机数发生器 (RNG)
灵活的静态存储控制器 (FSMC)
毫秒:时间单位,符号ms(英语:millisecond ). 1000 毫秒 = 1秒
微秒:时间单位,符号μs(英语:microsecond ). 1,000 微秒 = 1毫秒
SS模式 =从动串行

硬件

//EPLD和CPLD没有区别,EPLD只是altera早期对于CPLD的叫法
//我的感悟:
做嵌入式产品有很多种做法,简单的做可以是用plc来做,用树莓派来做,用单片机来做,用arm来做,每一轮的话成本和难度都不一样。

如果实现一个功能,先不用考虑代价地实现它,然后大规模生产时使用替代芯片或者方案来实现。比如先用arduino或者树莓派搞,再自己画板子搞。

//
烙铁使用教程: http://v.youku.com/v_show/id_XMzI2NjY3MTQ0.html?from=y1.2-1-87.3.3-1.1-1-1-2-0

//结温(Junction Temperature)是电子设备中半导体的实际工作温度。在操作中,它通常较封装外壳温度(Case Temperature)高。温度差等于其间热的功率乘以热阻。
最大结温在指定一个组成成分的数据,并给定功耗的情况下,计算外壳与环境之间热阻。或者反过来可以帮助设计人员确定一个合适散热器。

//单纯使用声卡作为虚拟示波器,存在频率较低的问题,只有100khz以内的采样,对于检查单片机频率不够。
//在电子电路中,VCC是电路的供电电压(C=circuit 表示电路的意思, 即接入电路的电压), VDD是芯片的工作电压(D=device 表示器件的意思, 即器件内部的工作电压),一般VCC>VDD

VSS:S=series 表示公共连接的意思,通常指电路公共接地端电压;
GND(Ground)代表地线或0线,GND就是公共端的意思,也可以说是地,但这个地并不是真正意义上的地。是出于应用而假设的一个地,对于电源来说,它就是一个电源的负极。

//LEGO MINDSTORMS Robotics Invention System (RIS) was released in October1998

RCX Code, the graphic programming system supplied with the kit, and NQC, the most widespread independent language for the RCX.

RCX only gates to the external world are a small display, three input ports, three output ports, four push-buttons, and an infrared (IR) serial communication interface.

处理器 Hitachi H8300,使用电池保存程序,电池掉电则程序丢失
//淘宝的使用CH340 的通过usb来控制 继电器的串口命令:

a00100a1
a00101a2
a00201a3
a00200a2
a00301a4
a00300a3

image

//小玩具马达的功率 = 5V x 0.35A = 1.75W

//生成dump文件:

objdump -D vmlinux > vmlinux.dump

U-boot
//uImage和zImage的区别

  1. 指令的区别:启动uImage 用bootm; 启动zImage 用go;

  2. 文件区别:uImage 在zImage加了0x40(63) 个字节, 包含这个映像文件的类型、加载位置、生成时间、大小等信息;

  3. bootm uImage 会把bootargs 传给uImage; go zImage 不会给zImage 传递任何东西;
    //zImage 是ARM Linux常用的一种压缩映像文件,uImage是U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的“头”,说明这个映像文件的类型、加载位置、生成时间、大小等信息。换句话说,如果直接从uImage的0x40位置开始执行,zImage和uImage没有任何区别。另外,Linux2.4内核不支持uImage,Linux2.6内核加入了很多对嵌入式系统的支持,但是uImage的生成也需要设置。

几种linux内核文件的区别:
1、vmlinux 编译出来的最原始的内核文件,未压缩。
2、zImage 是vmlinux经过gzip压缩后的文件。
3、bzImage bz表示“big zImage”,不是用bzip2压缩的。两者的不同之处在于,zImage解压缩内核到低端内存(第一个640K),bzImage解压缩内核到高端内存(1M以上)。如果内核比较小,那么采用zImage或bzImage都行,如果比较大应该用bzImage。
4、uImage U-boot专用的映像文件,它是在zImage之前加上一个长度为0x40的tag。
5、vmlinuz 是bzImage/zImage文件的拷贝或指向bzImage/zImage的链接。
6、initrd 是“initial ramdisk”的简写。一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态。

//uboot的模拟参考!:https://blog.csdn.net/jqh_111/article/details/83720406
1、生成配置文件, make ARCH=arm vexpress_ca9x4_defconfig
2、编译Uboot, make ARCH=arm CROSS_COMPILE=arm-unknown-linux-gnueabi- -j4
3、开启模拟:qemu-system-arm -M vexpress-a9 -m 256 -kernel u-boot --nographic

labcenter Proteus

//.dsn格式和.pdsprj格式都是Proteus软件中保存工程文档的格式。

.dsn格式是Proteus 7版本及更早版本使用的格式,而.pdsprj格式是Proteus 8版本及更新版本使用的格式。这两种格式都是为了方便用户在不同版本之间打开和编辑工程文档。
在Proteus 7版本及更早版本中,用户可以打开并编辑.dsn格式的文档,但不能打开.pdsprj格式的文档。

因此,.dsn格式和.pdsprj格式之间的关系是它们都是用于保存Proteus工程文档的格式,但它们分别代表了不同版本的Proteus软件。

//Proteus 8可以仿真:8051,8086、AVR(含Arduino)、PIC、HC11、MSP430、ARM7TDMI、Cortex-M0/3/4,TI PICCOLO开发板(基于TMS320Piccolo处理器) 、树莓派3/4/zero (可安装GrovePi HAT)等常用的MCU.

Q:proteus 能把pcb设计导入嘉立创,制作pcb板吗

A:Proteus 本身不支持直接将 PCB 设计文件导入到嘉立创(JLCPCB)进行 PCB 制作。不过,你可以通过以下步骤将 Proteus 中的原理图和 PCB 设计转换为嘉立创可以接受的格式:

1. 从 Proteus 导出设计文件

  1. 导出原理图和网络表:

    • 在 Proteus 中打开你的原理图文件。
    • 选择 File > Export > Schematic,导出原理图文件(通常是 .sch 格式)。
    • 选择 File > Export > Netlist,导出网络表文件(通常是 .net 格式)。
  2. 导出 PCB 文件:

    • 在 Proteus 中打开你的 PCB 文件。
    • 选择 File > Export > PCB,导出 PCB 文件(通常是 .pcb 格式)。

2. 使用第三方工具转换文件格式

  1. 使用 KiCAD 进行转换:

    • 安装 KiCAD:下载并安装 KiCAD。

    • 导入 Proteus 文件:

      • 打开 KiCAD,选择 File > Import > Proteus,导入你的 .sch 和 .pcb 文件。
    • 导出为嘉立创支持的格式:

      • 在 KiCAD 中,选择 File > Export > Gerber Files,导出 Gerber 文件(用于 PCB 制作)。
      • 选择 File > Export > Netlist,导出网络表文件(通常是 .net 格式)。

3. 导入到嘉立创

  1. 创建嘉立创项目:

    • 登录嘉立创官网,创建一个新的 PCB 项目。
    • 选择 File > Import > Gerber Files,导入你从 KiCAD 导出的 Gerber 文件。
    • 选择 File > Import > Netlist,导入你从 KiCAD 导出的网络表文件。
  2. 检查和调整设计:

    • 在嘉立创的 PCB 设计界面中,检查导入的元件和连接是否正确。
    • 进行必要的调整和优化,确保设计符合嘉立创的制造要求。

4. 提交制造

  1. 提交制造请求:

    • 完成设计后,点击 Submit for Manufacturing 按钮,提交制造请求。
    • 嘉立创会进行设计审核,确保设计符合制造标准。

注意事项

  • 元件库匹配:Proteus 和嘉立创在元件库和元件命名上有所不同,可能会导致一些元件在导入时无法识别。因此,在导入前需要检查一下原理图中的元件库和命名是否与嘉立创中的相同,以避免导入后出现错误。
  • 手动调整:如果自动转换过程中出现任何问题,可能需要手动调整部分电路连接。

通过以上步骤,你可以将 Proteus 中的原理图和 PCB 设计转换为嘉立创可以接受的格式,进行 PCB 制作。

OS-embed_linux

//linux kernel 配置项

配置项 备注
CONFIG_TTY_PRINTK 串口

// objdump -t obj:输出目标文件的符号表

// GNU binutils(二进制工具集),主要包括GNU链接器(ld)和GNU汇编器(as)和一些工具组成。这些工具有:


addr2line – 可执行文件地址到源文件名和行信息转换工具。

ar – 归档文件(archive)管理工具。

c++filt – C++符号过滤工具。

gprof – 显示程序profiling(中文待定“剖析”?)信息工具。

nlmconv – 转换目标代码至NLM(NetWare Loadable Module)。

nm – 从目标代码文件中列举出所有变量。

objcopy – 转换目标文件格式。

objdump – 显示目标文件信息。

ranlib – 为归档文件生成索引以加快对归档文件的访问。

readelf – 显示ELF(Executable and Linking Format)文件信息。

size – 列出目标文件或模块的大小信息。

strings – 显示文件中的可打印信息。

strip – 删除文件中的连接符号,以减少目标文件大小。

windres – MS Windows 资源文件编译工具,这个对我们用不到。

//查看可执行文件由那些库组成:


[nisy@localhost test]$ ldd ./gtk-test

linux-gate.so.1 (0xb7710000)

libpoppler-glib.so.8 => /run/media/nisy/sda7_ubuntu/opt/\*source_code\*/_code/poppler/poppler-0.48.0_gtk/glib/libpoppler-glib.so.8 (0xb76ae000)

libgtk-3.so.0 => /lib/libgtk-3.so.0 (0xb6f32000)

libgdk-3.so.0 => /lib/libgdk-3.so.0 (0xb6e41000)

libcairo.so.2 => /lib/libcairo.so.2 (0xb6d02000)

// By default, gcc searches the following directories for header files:

/usr/local/include/

/usr/include/

and the following directories for libraries:

/usr/local/lib/

/usr/lib/

// ar 程序将使我们有机会将多个目标文件打包成一个库文件;objcopy可以让我们将一种格式的目标文件内容转换成另一种格式的目标文件。

目前比较流行的目标文件格式有COFF(Common Object File Format)和ELF(Executable and Linking Format)。

//gcc的调试信息:

-g参数:

产生符号调试工具(GNU 的 gdb)所必要的符号信息,要想对源代码进行调试,就必须加入这个选项。 g 也分等级,默认是-g2, -g1 是最基本的, -g3 包含宏信息,-g0则没有调试信息

-ON参数:

指定代码的优化等级为 N,可取值为 0、 1、 2、 3; O0 没有优化, O3 优化级别最高

//可以通过code block的source code formatter 插件功能优化代码的格式,也可以使用:
indent -kr -i8 main.c

来优化代码风格,-kr选项表示K&R风格,-i8表示缩进8个空格的长度。如果没有指定-nut选项,则每8个缩进空格会自动用一个Tab代替,基本上-kr -i8这两个参数就够用了。

//make -n 即显示会执行什么命令,但是不实际执行,可以用来检查makefile执行的步骤

//CMMI 安装, 即Configure、Make、Make Install

//编译的程序运行完直接退出了,可以在

main()的return前加一个

scanf("%c");

等用户输入字符后再退出。

//gcc开启调试:需要有-g选项,同时,不能有-s选项( -s Remove all symbol table and relocation information from the executable.).

//使用#error 时需要注意会导致编译终止:

error "aaa" //会导致停止编译,并编译时报错aaa

warning "aaa" //不会导致停止编译,并编译时告警aaa

//linaro和codesourcery都是支持linux工具链的公司

//#pragma pack来改变编译器的对齐方式,比如:


#pragma pack(n) /\\* 指定按n字节对齐 \\*/

#pragma pack() /\\* 取消自定义字节对齐 \\*/

//#pragma warning

该指令允许选择性地修改编译器警告信息。

例子:

pragma warning( disable : 4507 34; once : 4385; error : 164 )

等价于:

pragma warning(disable:4507 34) // 不显示4507和34号警告信息

pragma warning(once:4385) // 4385号警告信息仅报告一次

pragma warning(error:164) // 把164号警告信息作为一个错

//DEV-CPP中如何看内存,如下:

print /x &name[0]

获得内存地址:

image

执行:

x /32bc  0x62fe10

查询地址的内容

image

//Q:Dev-CPP中如何在debug时带入入参?

A:如下如果入参需要加一个 -help,则类似如下步骤操作,就进入 -help 分支了(使用的gdb的 "run 参数列表" 命令):

image

//嵌入式系统中gpio如果是输出pin,则先高/低电平,再配置方向,因为如果先配置方向,则有可能出现电平掉低又拉高,导致触发外围器件,比如CPLD芯片进入PROGRAM状态。

//有时为了查一个宏是否开启了,在代码中插入AAA或者BBB,但是如果是头文件查宏开关用AAA,BBB,编译报错的是某某C语言报错,比较难查,所以在头文件中推荐还是#error "AAA" 这种方式最佳。

// 数组赋值,采用如下的方式比较简洁:

#include <stdio.h>\

#include <stdlib.h>

struct  PPP\

{\

    char a;\

    char b;\

    char c;\

};\

    \

int main(int argc, char \*argv[]) {\

int i ;\

struct PPP kk[10] = {\

    [0] = {0,0,0},\

    [1] = {1,1,1},\

    [3] = {3,3,3},\

    [4] = {4,4,4},\

    [9] = {20,20,20}\

    };\

    for(i =0;i<10;i++)\

    {\

        printf("[%d]-> %d \n",i, kk[i].a);\

    }\

  \

    return 0;\

}

显示结果:

image

 //看log时,经常需要分析一个函数(比如下面的at45dbx_chipselect_df())是具体被哪个函数调用的,如果每个地方都添加打印,就要修改n个地方,非常麻烦,其实可以通过修改这个函数,把调用者的行号打印出来,这样log中打印出来的行号(比如 “-->at45dbx_chipselect_df_2nd:line= 234”),快速甄别出是被哪个函数调用的。

修改前:


static void at45dbx_chipselect_df(U8 memidx, Bool bSelect)

{

xxxxx

}

修改后:

#define at45dbx_chipselect_df(a,b)   at45dbx_chipselect_df_2nd(a,b, \*\*LINE\*\*)

static void at45dbx_chipselect_df_2nd(U8 memidx, Bool bSelect , int line)

{

printf(“-->at45dbx_chipselect_df_2nd:line=%d” , line);

xxxxx

}

//看一个软件底层使用的哪些库的方法

//cortex-M内核的芯片可以运行ucLinux吗?
A:LIUNX的内存管理要用到MMU,现在M3大多都不带MMU,但是ucLinux去掉了linux的MMU。

==

不爱说话
33楼
高级工程师 | 2019-2-22 09:30 | 只看该作者
STM32最好429及以上的芯片跑uClinux还可以试试。太早的芯片没有FMC接口不能外扩SDRAM,用pSRAM又太小众太贵。
这是我这些年来用STM32跑uClinux的心得体会。

==
尽管uClinux不需要MMU,但需要大量的Flash和SRAM。另外,处理器必须能够高速运行。当前,只有高端Cortex-M3 / M4 MCU可以满足这些要求。也许uClinux也将很快在Cortex-M7上可用。

//我的理解:虚拟机和qemu 是一类的,仿真的是guest硬件 +guest OS,而docker 直接仿真的是guest OS的bin/lib ,所以效率高。

//查busybox的版本号:
$/bin/busybox --help
BusyBox v1.1.3 (2009.09.12-18:22+0000) multi-call binary

//嵌入式linux系统的小系统=uboot+kernel+文件系统(如busybox,yocto)
//strace - trace system calls and signals
源码中的if语句或其他代码在相应strace输出中并没有体现,因为它们并没有唤起系统调用。strace只关心程序与系统之间产生的交互,因而strace不适用于程序逻辑代码的排错和分析。
默认情况下,strace只跟踪指定的进程,而不对指定进程中新建的子进程进行跟踪。使用-f选项,可对进程中新建的子进程进行跟踪,并在输出结果中打印相应进程PID:

:使用strace跟踪挂死程序,如果最后一行系统调用显示完整,程序在逻辑代码处挂死;如果最后一行系统调用显示不完整,程序在该系统调用处挂死。
当程序挂死在系统调用处,我们可以查看相应系统调用的man手册,了解在什么情况下该系统调用会出现挂死情况。另外,系统调用的参数也为我们提供了一些信息,例如挂死在如下系统调用:
read(16,
那我们可以知道read函数正在对文件描述符为16的文件或socket进行读取,进一步地,我们可以使用lsof工具,获取对应于文件描述符为16的文件名、该文件被哪些进程占用等信息。

//ftrace 是内建于 Linux 内核的跟踪工具,从 2.6.27 开始加入主流内核。使用 ftrace 可以调试或者分析内核中发生的事情。ftrace 提供了不同的跟踪器,以用于不同的场合,比如跟踪内核函数调用、对上下文切换进行跟踪、查看中断被关闭的时长、跟踪内核态中的延迟以及性能问题等。
使用 ftrace ,首先要将其编译进内核。内核源码目录下的 kernel/trace/Makefile 文件给出了 ftrace 相关的编译选项。

OS- Ethernut&Nut/OS

//编译:
使用Configurator 生成makefile
C:\ethernut-4.10\nutbld 下执行make

OS-ecos

//.ecm :eCos Minimal Configuration 只出现在hal文件夹下面
Most HAL packages include a .ecm file that can be imported, along with using the RedBoot template, in order to set up the packages needed to build the RedBoot ROM monitor for a specific platform.

.ecc :eCos Configuration(The saved configuration file contains all of the packages loaded, template used, option settings, and description information, which the Configuration Tool uses to generate the proper eCos image.)一个项目工程的配置文件,相当于工程文件
//compat用于实现兼容性的软件包
//ecos的生成:
|__ \redboot_build
|__ \redboot_install
| |__ \include
| |__ \lib
| | |__ libtarget.a
| |__ \bin
|__ \redboot_mlt

Project-Openwrt

//【终极小鸟】北大街57号 18:57:21
有没有国内用的比较广泛的,不用改硬件的路由器啊

【高级老鸟】往事 18:57:32
如果你想要便宜发,去咸鱼买D525双网口

【高级老鸟】往事 18:57:36
百来块钱

【高级老鸟】往事 18:57:53
这是入门级的

【高级老鸟】往事 18:59:04
再上一个档次,一般就是J1900,不过就稍微贵点了

【高级老鸟】往事 18:59:21
再网上就是I3 I5 I7了

D525整机功耗大概十来W,也还能接受

【终极小鸟】北大街57号 19:02:10
嗯嗯

【小小鸟蛋】小小 19:02:15
@北大街57号 很多 华硕的N-18U AC-68U 都是可以的吧

竞斗云也可以闲鱼看看

Project-R2S

//调试串口的接法:
靠近边缘是黑色,向里是红色和白色
Project- Arduino
//注意,arduino的串口只能波特率9600,即使修改
Serial.begin(9600);
为其他波特率也不生效,这个参数根本就没有被使用。

//[置顶]arduino相关的函数和外设库参考:
https://www.arduino.cc/reference/en/
https://www.arduino.cc/en/Reference/Libraries

ArduinoDuemilanove

Duemilanove(意大利语“2009”的意思)是已生产的最流行的Arduino电路板之一,已取代了它之前的版本Arduino Diecimila。但现在,它又被更新的Arduino Uno所取代。Duemilanove的特色是使用了供电自动切换电路,自动选择从USB还是从外部电源供电。它还使用了ATmega328处理器,但2009年3月之前的版本采用的仍然是ATmega168。它的引脚布局和运算能力与Uno相同,只是它使用FTDI芯片实现USB转串口通信。
如果你打算买一片新的Arduino,那就应该选择ArduinoUno。如果你已经有一片Duemilanove,并且需要更稳定的3.3 V电压或者想做一些基于ATmega8U2的高级编程,那么可以考虑将其升级为Uno。

国内使用比较多的为Arduino Duemilanove 2009,主要原因是
Uno的usb控制芯片封装方式改变,制造成本上升,其他变化不大,
性价比还是Arduino Duemilanove 2009比较好。

//ICSP = in circuit serial programmable (在线串行编程),就是PIC系列单片机的在线调试器MAPLAB ICD2在线烧写程序的方式。

//调试Arduino需要使用诸如如下的代码:

Use the begin() method of the Serial class in the setup() method of your application
to set the communications speed:
int speed = 9600;
void setup() {
Serial.begin(speed)
}

然后:
you can send data from your Arduino controller to your computer using the print()
method:
Serial.print(data)

//An Arduino library is generally made up of four parts:, an .h file, a .cpp file, a
keywords.txt file that highlights Arduino library words in the IDE, and the actual binary
library code.

MCU

//ESP8266 是单核 Tensilica L106 (32位MCU)的Wi-Fi芯片,主频最高可达160MHz。

ESP32 是双核Tensilica L108 (32 位MCU)的Wi-Fi芯片,主频更高可达250MHz,性能更强,内存更大有400KB SRAM。另外还集成了蓝牙BLE。

由于ESP32的MCU性能更强,内存更大,可以处理包括音频、视频在内的更复杂Wi-Fi应用。还可以应用在需要蓝牙和Wi-Fi共存的IOT场景中。

MCU-51

//keil rtx51tiny最小占用2KB(官方的参考用例 \keil_c51\C51\RtxTiny2\Examples\Ex1\编译后 )

//89C51和89C52区别:
//89S51相对于89C51增加的新功能包括:

-- ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离。是一个强大易用的功能。
-- 最高工作频率为33MHz,大家都知道89C51的极限工作频率是24M,就是说S51具有更高工作频率,从而具有了更快的计算速度。
-- 具有双工UART串行通道。
-- 内部集成看门狗计时器,不再需要像89C51那样外接看门狗计时器单元电路。
-- 双数据指示器。
-- 电源关闭标识。
-- 全新的加密算法,这使得对于89S51的解密变为不可能,程序的保密性大大加强,这样就可以有效的保护知识产权不被侵犯。

MCU- AVR

//很多朋友的51 单片机都是从AT89C51 这款芯片开始的, 而这家公司也推出过基于ARM9 内核的处理器,只不过普及度不高。为了发挥它们的优势,它们还把曾经在单片机圈非常火爆的AVR单片机做成了32 位版本的AVR32 , 它不是ARM 内核, 但希望以此与ARM 竞争,结果是现在很少有人听说过AVR32。 AR M的地位不可动摇, 大部分厂商还是乖乖地生产ARM 处理器。

//目前AVR 单片机高级语言发发工具主要有IAR C、WINAVR、ICCAVR、CodeVision、BASCOM-AVR(BASIC 语言)。IAR 是与AVR 内核协同开发的,很多对AVR 更适合C 语言开发方面的改进是根据IAR开发过程的,它也是ATMEL 公司推荐的C 语言编译器,但它的价格几呼让人难以接受,达到上万元人民币。ICCAVR 是国内AVR 主要推广单位双龙公司代理的C 编译器,它价格低廉,性能也XX,友好的界面把很多烦琐的项目管理和编译设置隐藏了起来,为此它受部分开发人员的欢迎。CodeVision 也是个很不错的C 编译器,目前在国内也有一定数量的用户。Winavr 是个免费的AVR 开发程序集,它以著名的自由软件GCC 为C/C++编译器。

//中兴的coremark的5档次 4k-10k-80k-160k-400k
我的华为笔记本是123K:
<
无法复制加载中的内容
//
生成object 文件:avr-gcc –mmcu=at90s2313 –o demo1.elf demo1.o
生成elf文件:avr-gcc –mmcu=at90s2313 –o demo1.elf demo1.o
生成hex文件:avr-objcopy -j .text -j .data -O ihex demo1.elf demo1.hex

ARM Cortex-M
//新版的STM Cube集成了 TouchGFX(嵌入式GUI界面) 以及低功耗蓝牙BLE协议栈等
//STM32CubeIDE内部就集成了STM32CubeMX的插件,所以在STM32CubeIDE 里可以使用STM32CubeMX。
//

ARM Cortex-A
//i.MX 6ULL Arm Cortex-A7 单核 792 MHz,基于ARMv7-A
AM335X TI的ARM Cortex-A8
Roc-rk3288 瑞芯微的四核Cortex-A17,频率高达1.8GHz
Roc-rk3399 瑞芯微两个Cortex-A72 + 四个Crotex-A53核心,组成big.LITTLE大小核架构六核ARM Cortex-A 64位处理器
//跟GUI没有关系 是芯片决定用的什么版本的linux
不带gui的原因,一般都是cpu不支持屏幕

//The Versatile Express platform provides an environment for developing SoC designs. Arch Linux ARM specifically targets the Motherboard Express uATX system using one of the available CoreTile Express daughtercards.
Supported CoreTiles:

  • V2P-CA5: 2x Cortex-A5 100MHz
  • V2P-CA9: 4x Cortex-A9 400MHz ==> 宋宝华《Linux设备驱动开发详解》使用
  • V2P-CA15 (TC1): 2x Cortex-A15 1GHz
  • V2P-CA15-CA7 (TC2): 2x Cortex-A15 1GHz, 3x Cortex-A7 800MHz ==>《奔跑吧Linux内核》使用

Android BSP

//adb root
adb remount
adb shell //执行shell命令的环境
adb logcat >~/0705.log //保存log
其他
// 就单片机来说,protues 支持我们通常用的C语言,而multisim目前只支持汇编。之后自学单片机用的开发板其实是可以在protues上做一个的。protues支持与keil的联调,就是用keil中的调试功能,一行一行运行代码,然后在protues上显现出相应的效果。multisim在其他电路上貌似更专业,更强大。

multisim 可以支持的MCU有 PIC16F84/16F84A 和8051单片机

rt-thread

///修改了后,会在 rtconfig.h中生效;如果手工修改了 rtconfig.h,则再次调整,会覆盖掉自己的手工修改,这点需要注意.

//修改了后,如果没有成功同步,会导致编译fail,需要如下<同步scons配置到项目>,再rebuild :

image

其他

//从二进制文件中搜索ascii和unicode,可以使用 strings软件:
https://learn.microsoft.com/en-us/sysinternals/downloads/strings

C:\Users\nisy>strings

Strings v2.54 - Search for ANSI and Unicode strings in binary images.

Copyright (C) 1999-2021 Mark Russinovich

Sysinternals - www.sysinternals.com

usage: strings [-a] [-f offset] [-b bytes] [-n length] [-o] [-s] [-u]

-a   Ascii-only search (Unicode and Ascii is default)

-b   Bytes of file to scan

-f   File offset at which to start scanning.

-o   Print offset in file string was located

-n   Minimum string length (default is 3)

-s   Recurse subdirectories

-u   Unicode-only search (Unicode and Ascii is default)

-nobanner

Do not display the startup banner and copyright message.

用法:

strings sbldump.bin  > 1.txt

AI:vulkan 和opengl的关系和继承时间线,列表对比2026年各价位的高通骁龙和mtk天玑,rockchip RK3566,RK3588等不同代纪的常用soc的一般支持能力和跑分,一般用什么工具测试,可以用Minecraft测试性能吗

Vulkan 与 OpenGL 是架构上根本不同的两代图形 API。2026 年,Vulkan 已成为 ARM 平台的主流标准,不同价位 SoC 的支持能力和性能差异显著,测试工具链也日趋成熟。


📜 Vulkan 与 OpenGL:关系与继承时间线

Vulkan 并非 OpenGL 的简单升级,而是一次从第一性原理出发的重新设计。

关系本质:OpenGL(1992 年发布)采用“巨大状态机”模型,驱动开销大,难以高效利用多核 CPU。Vulkan 最初正是作为 “下一代 OpenGL”(glNext) 被提出,目标是解决 OpenGL 在现代硬件上的根本性瓶颈。

关键时间线:

时间 事件
1992 年 OpenGL 1.0 由 SGI 发布
2012 年 10 月 Khronos 成立 GL Common TSG,开始考虑对 OpenGL/ES 进行彻底重新设计
2014 年 6/7 月 项目重启为 "GL Next",成为最高优先级;AMD 捐赠 Mantle 作为技术起点
2015 年 3 月 在 GDC 上正式公布,命名为 Vulkan
2016 年 2 月 16 日 Vulkan 1.0 正式发布
2026 年 1 月 Vulkan 工作组发布 2026 年路线图,将 VRS(可变速率着色) 列为强制要求

设计目标对比:Vulkan 的核心目标是显式控制与低驱动开销——应用开发者负责内存管理和多线程命令缓冲,驱动层保持极薄,从而释放多核 CPU 和现代 GPU 的全部潜力。OpenGL 则将底层细节隐藏在驱动内部,简化了开发但牺牲了效率。


📱 2026 年各价位 SoC 的 Vulkan 支持能力与跑分对比

以下按价位从高到低,对比高通骁龙、联发科天玑及瑞芯微芯片的图形能力。

🏆 旗舰级(>4000 元手机)

SoC GPU Vulkan 支持 OpenGL ES 安兔兔跑分(参考)
骁龙 8 Elite Extreme Gen 6 Adreno 850 Vulkan 1.4(OpenCL 3.0) ES 3.2 约 444 万(iQOO 16)
天玑 9600 Pro Mali-G2 Ultra NX MP12 Vulkan 1.4 ES 3.2 约 438 万(OPPO Find X10 Pro Max)
天玑 9500 Mali-G1 Ultra Vulkan 1.3(支持 Ray Tracing Pipeline) ES 3.2 约 380-394 万(iQOO 15T)

性能特征:骁龙在单核性能上领先约 21%(Geekbench 7:3163 vs 2600),天玑在多核上略优约 4%(10634 vs 10172)。两者均采用 2nm 工艺,GPU 均支持硬件光线追踪。

💰 中高端(2000-3500 元手机)

SoC GPU Vulkan 支持 OpenGL ES 安兔兔跑分(参考)
天玑 8500 Mali-G720 MP8 Vulkan 1.3 ES 3.2 约 264 万
天玑 8550 Mali(128 着色单元) Vulkan 1.3 ES 3.2 约 250 万
骁龙 7 系列(2026) Adreno 7xx Vulkan 1.3 ES 3.2 与天玑榜首差距高达百万分

市场格局:2026 年次旗舰市场,联发科天玑包揽性能榜前七,骁龙 7 系列因制程和架构代差,跑分已被拉开百万分的差距。

💻 中端(1500-2500 元手机 / 平板)

SoC GPU Vulkan 支持 OpenGL ES 安兔兔跑分(参考)
天玑 7450 Mali(128 着色单元) Vulkan 1.3 ES 3.2 约 180 万
骁龙 6 Gen 5 Adreno 812 Vulkan 1.4(高通官方标称 1.3) ES 3.2 3DMark Wild Life:约 4650 分
天玑 6360 Mali-G57 MP2 Vulkan 1.3 ES 3.2 约 80 万

Adreno 812 的图形性能较前代 Adreno 810 提升约 20%,但不支持光线追踪。天玑 6360 采用 6nm 工艺,定位入门级 5G 设备。

🔧 嵌入式 / 开发板

SoC GPU Vulkan 支持 OpenGL ES 典型设备
瑞芯微 RK3588 ARM Mali-G610 MC4 Vulkan 1.1 / 1.2 ES 1.1/2.0/3.1/3.2 Orange Pi 5、正点原子核心板
瑞芯微 RK3566 ARM Mali-G52 2EE Vulkan 1.1 ES 1.1/2.0/3.2 Orange Pi 3B、泰山派开发板

RK3588 额外支持 OpenCL 1.1/1.2/2.0 和 6 TOPS NPU,适合边缘 AI 与轻量级图形应用。RK3566 定位更低,NPU 算力仅 0.8 TOPS。

Vulkan 版本趋势总结:2026 年旗舰与中高端 SoC 已普遍支持 Vulkan 1.3-1.4,中端入门级支持 1.3,嵌入式开发板停留在 1.1-1.2。高通 Adreno Gen 8(用于骁龙 X2 和骁龙 8 Elite Gen 5)的 Turnip 开源驱动已在 Mesa 26.0 中合并,进一步降低了 Linux 下的 Vulkan 使用门槛。


🔧 常用 Vulkan / OpenGL 性能测试工具

工具名称 适用平台 核心功能 2026 年更新亮点
vkmark Linux(arm64/armhf) Vulkan 基准测试套件 已打包于 Ubuntu 26.04 LTS 和 Alpine,支持 aarch64
Arm Frame Advisor Android / Arm GPU Vulkan 帧捕获与分析 2026.1 版本改用 GFXReconstruct 捕获管线,可靠性和可扩展性大幅提升
Arm Streamline Android / Arm CPU/GPU 系统级性能分析 新增 Mali timeline 和 Dispatch graph,可关联 Vulkan 提交与着色器执行
Android GPU Inspector (AGI) Android API 调用深度分析 支持 Vulkan 和 OpenGL ES 的逐调用追踪
glmark2 ARM Linux OpenGL ES 基准测试 可用于对比同一硬件上 Vulkan 与 GLES 的性能差异

Frame Advisor 2026.1 的捕获管线升级是今年最值得关注的工具变化,它显著改善了复杂 Vulkan 工作负载的捕获可靠性。


🎮 可以用 Minecraft 测试 Vulkan 性能吗?

可以,但适用范围有限,且需要特定工具组合。

可行方案:在 Android 设备上通过 PojavLauncher 运行 Minecraft Java 版,配合 VulkanMod 或 VulkanPojav 模组包,将渲染器从 OpenGL 替换为 Vulkan。VulkanPojav 是一个专门为 Vulkan 性能测试设计的轻量级环境,内置了图形管线优化、多核处理和内存优化。

硬件兼容性至关重要:

  • 推荐:高通骁龙 Adreno GPU 设备兼容性最好
  • 受限:MediaTek Mali、Exynos、Unisoc 设备可能遇到兼容性问题、稳定性下降甚至启动失败
  • RK3588 例外:有用户成功在 RK3588 上通过 Mesa PanVK(Vulkan 1.4) 开源管线直接运行 Minecraft Java 版,无需 Android 启动器

实测数据参考:

  • Mac(M 芯片):VulkanMod + Cobblemon 模组,稳定 115-121 FPS
  • RK3588:开源管线可达 120 FPS 左右
  • Wayland vs Xwayland:Vulkan 在原生 Wayland 下 108 FPS,Xwayland 下仅 44 FPS,差异悬殊

关键限制:Minecraft 官方正在推进 Vulkan 后端,2026 年夏季将开始与 OpenGL 并行测试,但稳定版仍以 OpenGL 为主。因此当前用 Minecraft 做 Vulkan 测试,仅适合拥有 Adreno GPU 设备且愿意调试的高级用户。对于专业基准测试,vkmark 和 Arm Frame Advisor 仍是更可靠的选择。

注:openGL ES即“open Graphics library for embeded systems”。

[AI]列表对比市场常见的图形化硬件开发板编程的支持的开发板和模块板的数量,是否有提供开源的代码以方便用代码(C/micro python等)移植等,包括 aily blockly AI,掌控板,行空板 等

你提到的 Aily Blockly、掌控板和行空板,它们在定位上有所不同。Aily Blockly 是一个通用的图形化编程平台,而掌控板和行空板则是具体的硬件开发板,它们通常会搭配 Mind+ 这类平台使用。

下面是这些平台与硬件的详细对比。

📊 主流图形化硬件编程平台对比

平台 / 硬件 开发板 / 芯片支持 模块 / 库数量 开源与代码移植能力
Aily Blockly 100+ 开发板/芯片(Arduino、ESP32、STM32、RP2040、Nrf5x等) 400+ 预设库,并可通过AI分析原生C/C++库自动生成新积木,扩展性极强 完全开源 (GPL-3.0)。生成的代码为可读的 Arduino C/C++,可独立在 Arduino IDE 或 PlatformIO 中编译使用。
Mixly 近百种第三方硬件板型,涵盖 Arduino、ESP32、掌控板等主流开发板 数百种传感器和执行器 免费开源。图形化模块可转换为 Arduino C 代码,便于移植和二次开发。
Mind+ 60+ 主控板(ESP32、micro:bit、掌控板、行空板等) 300+ 官方扩展库,覆盖传感器、执行器、通信、显示等 非完全开源(DFRobot商业产品)。支持图形化、Python、C/C++ 混合编程,代码可导出。
MakeCode 支持 micro:bit、Raspberry Pi Pico、Arduino Nano、ESP32 等主流平台 模块数量取决于具体平台和扩展包,无统一计数 完全开源(微软开源项目)。支持图形化、JavaScript、Python 之间实时双向翻译,代码移植灵活性极高。
mBlock 支持 Arduino、micro:bit 等开源硬件,以及 Makeblock 自家机器人套件 500+ 传感器和扩展模块 闭源商业软件(Makeblock产品)。图形化块可转换为 Arduino C 或 Python 代码,但与 Makeblock 生态绑定较深。
Codecraft 主要支持 Seeed Studio 生态的 Arduino Uno/Mega、Grove Zero、Wio Terminal 等 围绕 Grove 模块体系,模块数量与 Seeed 产品线强相关 已开源(GitHub Seeed-Studio/CodeCraft)。生成 Arduino 代码,但硬件支持范围相对集中于 Seeed 生态。
Visuino 支持所有 Arduino、ESP32、ESP8266、M5Stack、Raspberry Pi Pico 等主流板型 组件库涵盖数学、逻辑、比较器、触发器、开关等,偏重信号处理与硬件逻辑 闭源商业软件(免费版有限制,Pro版付费)。生成 C++ 代码,但社区生态和代码移植便利性不及开源平台。
掌控板 硬件板卡本身。集成 ESP-32 双核芯片,板载 OLED、RGB灯、加速度计、麦克风等。 作为硬件,其功能通过配套软件(如 Mind+、mPython)的积木块来调用。 支持图形化及 Python 代码编程,可通过 Arduino IDE 进行 C/C++ 开发。
行空板 硬件板卡本身。自带 Linux 操作系统和 Python 环境,支持 Mind+、Jupyter、Thonny 等多种编程方式。 作为硬件,其功能通过配套软件(如 Mind+)的积木块来调用。 支持图形化编程与 MicroPython/Python 代码混合开发,代码可导出和编辑。

💡 选型与使用建议

  • 追求硬件覆盖广、代码移植自由度高:优先考虑 Aily Blockly(开源、AI扩库、工程化管理)或 Mixly(轻量、Arduino生态原生)。
  • 教学场景中需要平滑过渡到文本编程:MakeCode 的实时互转体验最佳;Mind+ 的图形化/Python/C++三模式切换适合课堂阶梯式教学。
  • 已深度使用某家硬件生态:Codecraft(Seeed Studio Grove体系)或 mBlock(Makeblock机器人体系)在各自生态内集成度最高,但跨生态迁移时自由度受限。
  • 关于掌控板与行空板:它们是具体的硬件,选择哪个取决于项目需求。掌控板更偏向基础电子与物联网入门,而行空板集成了屏幕和Linux系统,适合更复杂的AI与Python教学项目。
posted on 2022-06-29 00:08  ni_sy  阅读(764)  评论(0)    收藏  举报