道哥的第029篇原创一、前言二、关于单片机与嵌入式系统之间界定1.单片机2. 嵌入式系统3.嵌入式Linux三、非实时、软实时、硬实时四、x86Linux系统的调度策略1.为什么Linux系统是软实时?2.Linux系统如何改造成硬实时?(1) RT-Preempt(2)Xeno...
道哥的第030篇原创一、一个真实的代码泄漏故事二、Jenkins的基本使用三、gitsubmodule基本使用四、在Jenkins中使用gitmodule来编译所有的模块五、总结六、资源下载一、一个真实的小故事事情发生在功能机的时代,我们项目组开发一款手机,软件开发成员大概有20...
道哥的第031篇原创一、前言二、小试牛刀1. 灵活的数组成员2. 不定参数的宏定义三、为自己打气一、前言这几天在把一个嵌入式项目的代码,移植到另一个平台,发现很多地方用的都是C89标准。1999年,C语言的标准化委员会发布了C99标准,引入了许多特性,包括可变长度的数组、灵活的数...
一、前言二、Peterson算法简介三、测试代码四、Mutex互斥锁对代码执行效率的影响五、总结一、前言在Linux系统中,当多个线程并行执行时,如果需要访问同一个资源,那么在访问资源的地方,需要使用操作系统为我们提供的同步原语来进行保护。同步原语包括:互斥锁、条件变量、信号量等...
一、前言二、示例代码说明三、Linux系统下操作四、Windows系统下操作五、总结一、前言在上一篇文章中(使用cmake来搭建跨平台的应用程序框架:C语言版本),我们以源代码的形式,演示了利用利用cmake这个构建工具,来编译跨平台的动态库、静态库和应用程序。这篇文章描述的是同...
一、前言二、问题描述三、把类型改为void指针类型四、总结一、前言昨天在编译代码的时候,之前一直OK的一个地方,却突然出现了好几个Warning!本着强迫症要消灭一切警告的做法,最终定位到:是结构体内部,指向结构体类型的指针成员变量导致的问题。这个问题,也许永远不会碰到,之所以被...
一、前言二、glib简介三、线程库的设计四、总结一、前言这篇文章,按照下面这2张图,来描述glib在Linux和Windows平台上,是如何来进行线程库的设计的。Linux平台:Windows平台:最近写了几篇关于跨平台的应用程序设计思路,有些小伙伴在后台留言询问关于一些通用的跨...
几个重要的段寄存器Linux2.6中的线性地址区间一个“完整”的8086汇编程序前两篇文章,我们一起学习了8086处理器中关于CPU、内存的基本使用方式,重点对段寄存器和内存的寻址方式进行了介绍。可能有些小伙伴会对此不屑:现在都是多核的现代处理器,操作系统已经变得非常的强大,为何...
什么是WSL?什么是WSL2?激活WSL服务安装Ubuntu-18.04操作系统通过ssh远程登录编译Hello,World!作为一名嵌入式软件开发工程师,在Linux系统下写代码、编译、调试是避免不了的事情。但是很少有同学会直接拿一台Linux真机来作为工作平台,除非是那种利用...
示例代码说明执行主程序初始状态执行代码前5句准备调用子程序调用子程序子程序寄存器入栈保护计算字符串长度返回结果寄存器出栈返回指令ret在任何一门编译型语言中,栈操作都是非常重要的。利用栈的后进先出特性,可以很方便的解决一些棘手的问题,以至于CPU单独分配了push和pop这两个命...
0xFFFF:0x00000xF000:0xE05B0x0000:0x7C00在第一篇文章中,我们就提到,现代操作系统是从最古老的8086系统一步一步发展而来的。处理器厂商为了向后兼容,很多底层相关的原理都是一样的(如果不兼容,就会丢弃市场份额)。特别是从系统上电之后,一直到操作...
程序的结构bootloader把程序从硬盘读取到内存代码重定位程序入口点重定位段表重定位跳转到程序的入口地址操作系统程序的执行在上一篇文章中Linux从头学05-系统启动过程中的几个神秘地址,你知道是什么意思吗?,我们以几个重要的内存地址为线索,介绍了x86系统在上电开机之后:C...
作 者:道哥,10年的嵌入式开发老兵。专注于:C/C、Linux操作系统、应用程序设计、物联网、单片机和嵌入式开发等领域。公众号回复【书籍】,获取Linux、嵌入式领域经典书籍。转 载:欢迎转载文章,转载需注明出处。中断向量与中断描述符中断的分类内部中断外部中断中断号中断向量和中...
作 者:道哥,10年的嵌入式开发老兵。公众号:【IOT物联网小镇】,专注于:C/C、Linux操作系统、应用程序设计、物联网、单片机和嵌入式开发等领域。 公众号回复【书籍】,获取Linux、嵌入式领域经典书籍。转 载:欢迎转载文章,转载需注明出处。从16位进入到32位8086的1...
实模式:bootloader为程序计算段的基地址保护模式:bootloader为自己创建段描述符确定GDT的地址创建代码段的描述符创建数据段的描述符创建栈段的描述符段描述符是如何确保段的安全的?段寄存器高速缓存对段寄存器本身的保护对段界限的检查在上一篇文章中,我们已经顺利的从实模...