- 博客(75)
- 收藏
- 关注
原创 FAE工程师总结
与房产销售,市场销售不一样的是TI的FAE和TSE依靠自己的技术性和对TI产品的了解再结合用户的研发产品为用户进行推荐跟踪解决客户的问题,当然能得到TI支持的客户都是在行业里很有名的公司,比如华为,施耐德,比亚迪等等。必要的时候,也可以踢一下皮球:比如说,客户板子用了自家芯片,又用了别家MCU,出现工作不正常,你只需要把你这边芯片工作原理,和可能出现这种情况的原因说清楚,客户没办法证明一定是你芯片的问题,就可以让他们也联系跟这个问题有关的芯片原厂就可以了。所以,只要是芯片公司,FAE团队是必不可少的。
2024-11-04 20:14:22
880
原创 Linux platform子系统和设备树
Linux内核在启动的时候,要求把设备树文件传递给它。它拿到设备树之后,会解析设备树文件,从而识别设备信息因为设备的信息是针对于特定平台的,如果我们在Linux内核中包含太多设备信息,则Linux内核移植性就会变差。引入设备树之后,设备的信息的描述不再在是以代码的形式存在于Linux内核源代码中dtc,device tree compiler,是将.dts 编译为.dtb需要用到的**编译工具,**是编译设备树的小工具。
2024-10-11 16:28:22
491
原创 内核模块编译与内核编程总结
也就是说,如果你确定你要加载的驱动模块不依赖其他驱动模块的话,既可以insmod也可以modprobe,当然insmod可以在任何目录下执行,更方便一些。内核中已加载模块的信息也存在于/sys/module目录下,加载hello.ko后,内核中将包含/sys/module/hello目录,该目录下又有一个refcnt文件和一个sections目录,在/sys/module/hello目录下运行。结构体来描述进程,该结构体中包含描述该进程内存资源、文件系统资源、文件资源、tty资源、信号处理等的指针。
2024-09-30 15:18:04
835
原创 insmod & depmod & modprobe的区别及用法
目录下,也就是modprobe加载内核模块之所以不需要指定路径是因为modprobe命令有默认的加载路径。文件中列举了modproe可加载的内核文件以及内核文件所依赖的文件。假如一个内核模块位于。上面已经说过了,用于生成modprobe依赖的。文件中,也无法通过modeprobe命令加载。: modprobe加载内核的文件必须位于。: modeprobe加载内核模块时依赖于。目录下,但是该模块未添加到。
2024-09-23 15:56:53
494
原创 一文理解ifneq ($(KERNELRELEASE),)
在第一次读取执行此Makefile时,KERNELRELEASE没有被定义,所以make将读取执行else之后的内容,如果make的目标是clean,直接执行clean操作,然后结束。make将继续读取else之前的内容。else之前的内容为kbuild语法的语句,指明模块源码中各文件的依赖关系,以及要生成的目标模块名。表明然后返回到当前目录继续读入、执行当前的Makefile。指明跳转到内核源码目录下读取那里的Makefile;当make的目标为all时,
2024-09-23 15:34:03
549
原创 内核驱动开发之系统移植
没有arm硬件,想在x86宿主机编译arm的目标机内核。(要知道同一个命令,转换为二进制指令,arm和x86架构系统可能是不同的,所以要分别编译)目标机和主机内核架构相同:称为普通编译;架构不同,称为交叉编译file命令:可以查看文件的属性,可以知道是在什么架构下编译的。# 如下:build文件是ELF头 64bit的**小端(LSB表示小端)**可执行程序,arm架构readelf:用于显示elf格式目标文件的信息(windows叫PE头,Linux叫ELF头),如。size::读取可执行程序的大小。
2024-09-20 17:02:32
1522
原创 c++设计模式
当存在继承关系时,protected 和 private 就不一样了:基类中的 protected 成员可以在派生类中使用,而基类中的 private 成员不能在派生类中使用。在类的外部(定义类的代码之外),只能通过对象访问成员,并且通过对象只能访问 public 属性的成员,不能访问 private、protected 属性的成员。在类的内部(定义类的代码内部),无论成员被声明为 public、protected 还是 private,都是可以互相访问的,没有访问权限的限制。
2024-09-13 17:42:20
595
转载 C++语法糖(explicit关键字)详解以及示例代码
可以有效地防止隐式转换带来的意外结果,提高代码的可读性和安全性。,表示该构造函数只能显式调用,禁止隐式转换。是 C++ 语言中的一个关键字,它可以用来修饰单个参数的。还可以用来修饰类型转换函数,表示只能显式进行类型转换。,它们都有一个 int 类型的成员变量。,并且分别定义了一个单个参数的构造函数。可以接受隐式转换,因此可以直接传递。在上面的示例中,我们定义了两个类。只能接受显式转换,因此需要使用。关键字,因此可以隐式转换。下面是一个简单的示例,演示了。函数中,我们分别创建了。关键字,只能显式转换。
2024-09-12 20:56:30
137
原创 中断IRQ总结
中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
2024-09-11 23:18:14
972
转载 linux用户态与内核态通信二:Netlink
Netlink是linux提供的用于内核和用户态进程之间的通信方式。但是注意虽然Netlink主要用于用户空间和内核空间的通信,但是也能用于用户空间的两个进程通信。只是进程间通信有其他很多方式,一般不用Netlink。除非需要用到Netlink的广播特性时。
2024-09-04 14:54:42
455
转载 linux用户态与内核态通信一:proc文件系统
(1) proc是虚拟文件系统,虚拟的意思就是proc文件系统里的文件不对应硬盘上任何文件,我们用去查看proc目录下的文件大小都是零;(2) proc文件系统是开放给上层了解内核运行状态的窗口,通过读取proc系统里的文件,可以知道内核中一些重要数据结构的数值,从而知道内核的运行情况,也可以方便调试内核和应用程序;
2024-09-04 14:48:29
373
转载 面试官经常问C++内存New与malloc区别(超详细~)
new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。那么自由存储区是否能够是堆(问题等价于new是否能在堆上动态分配内存),这取决于operator new 的实现细节。自由存储区不仅可以是堆,
2024-08-31 17:26:13
334
原创 size_t、ssize_t,初步认识
size_t一般用来表示一种计数,比如有多少东西被拷贝等。例如:sizeof操作符的结果类型是size_t,该类型保证能容纳实现所建立的最大对象的字节大小。它的意义大致是“适于计量内存中可容纳的数据项目个数的无符号整数类型”。而ssize_t这个数据类型用来表示可以被执行读写操作的数据块的大小.它和size_t类似,但必需是signed.意即:它表示的是signed size_t类型的。size_t是一些C/C++标准在stddef.h中定义的。这个类型也是一个整型。size_t的真实类型与操作系统有关。
2024-08-29 09:37:53
362
原创 step1-模电数电
电路原理、模拟电路、数字电路、微机原理(计算机组成结构、工作原理)、c语言、arm开发(嵌入式领域都是用的arm板)、开发环境(如何搭建嵌入式开发环境,PC机编程环境、运行环境)、应用开发(开发应用入手)、嵌入式OS(操作系统本身原理:调度、进程管理、多线程、中断、定时器、系统移植)、驱动开发。
2024-08-26 18:38:52
856
原创 arm接口技术三--裸机开发环境搭建与GPIO开发步骤总结
工作寄存器地址和内存地址统一编址;对寄存器的操作和内存地址的操作都一样,都可以用指针指向地址,进行读写。
2024-08-24 18:41:22
862
原创 arm接口技术一--arm核总结
ARM是的缩写。ARM是一家微处理器企业,设计了大量的高性能、廉价、低功耗的RISC处理器。ARM只设计芯片,不生产,授权半导体厂商并提供服务。ARM11之后,ARM核命名为Cortex,分为三个系列:A、R、M。A系列主要用于消费电子领域,可以跑操作系统;R系列,主要用于工业控制、医疗器械、新能源汽车领域,对实时要求比较高;M系列主要是单片机,功能不是特别强大,不跑操作系统。
2024-08-24 18:40:15
1326
原创 linux多进程与多线程总结
2 linux多进程与多线程2.1 进程间通信2.1.1 管道2.1.2 信号2.1.3 消息队列2.1.4 共享内存3 线程4 IO多路复用4.1 非阻塞IO4.2 IO多路复用。
2024-08-24 18:33:18
1261
原创 python web编程一:token、session、cookie、密码加解密
HTTP协议是无状态协议,为了解决它产生了cookie和session技术。session idsession idsession idsession idsessionsessionsessionsession idsession idsessioncookie服务器端保存着大量session信息,很消耗服务器内存,而且如果多服务器部署,还要考虑session共享的问题,比如等方案。
2023-09-24 20:26:52
730
转载 Python setup.py打包发布
平常我们习惯了使用 pip 来安装一些第三方模块,这个安装过程之所以简单,是因为模块开发者为我们默默地为我们做了所有繁杂的工作,而这个过程就是打包。打包,就是将你的源代码进一步封装,并且将所有的项目部署工作都事先安排好,这样使用者拿到后即装即用,不用再操心如何部署的问题(如果你不想对照着一堆部署文档手工操作的话)。不管你是在工作中,还是业余准备自己写一个可以上传到 PyPI 的项目,你都要学会如何打包你的项目。Python 发展了这么些年了,项目打包工具也已经很成熟了。他们都有哪些呢?你可能听过。
2023-08-08 19:21:52
393
原创 python网络编程三--异步编程之协程
协程是在用户空间,基于生成器(yield),在单线程内(而非多线程的操作系统调度),实现的一种非抢占式调度;当一个协程主动让出控制权,另一个协程才会被调度。*
2022-08-15 22:42:29
422
原创 python网络编程二--异步编程
**同步、异步是指函数或方法调用的时候,被调用者是否得到最终结果的。**- **直接得到最终结果的,就是同步调用**。同步调用,不会返回任何的中间状态。- **不直接得到最终结果的,就是异步调用**。异步调用会返回中间状态。......
2022-08-14 01:20:52
731
原创 python网络编程一--socket开发
socket是非常底层的接口库,它是一种通用的网络编程接口(意思就是java/c++/python都一样),和网络层次没有一一对应关系,而是看你在哪一层进行编程。cs编程:client-server,bs(browser-server)就是一种cs。只做c开发,就是前端开发,只做s后端开发............
2022-08-07 23:37:52
2703
3
原创 线程和进程四--多进程和concurrent.futures模块
concurrent.futures模块:** 一次起指定数量的线程数,提交的任务在这些线程中跑,当线程中的任务执行完毕时,线程不会结束,而是保留资源,再次提交新的任务时在空闲的线程中跑新任务,而不会另起线程;优点是避免反复申请资源。............
2022-08-02 23:39:23
516
1
原创 sql必知必会
SQL(Structured Query Language:结构化查询语言),是一种专门用来与数据库沟通的语言。SQL的优点:SQL不是摸个特定数据库厂商的专有语言。绝大多数重要的DBMS支持SQL,所以学习了SQL就能够与几乎所有数据库打交道............
2022-07-24 14:27:39
2771
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人