嵌入式

Ubuntu12.04嵌入式交叉编译环境arm-linu-gcc搭建过程,图解

旧时模样 提交于 2020-02-25 02:43:09
转载: 王文松的博客Ubuntu12.04嵌入式交叉编译环境arm-linu-gcc搭建过程,图解 安装环境 Linux版本:Ubuntu 12.04 内核版本:Linux 3.5.0 交叉编译器版本:arm-linux-gcc-4.4.3 这个版本的交叉编译器我已经上传到了资源上,可以随便下载, 点此下载 安装前的絮叨 首先简单介绍一下,所谓的搭建交叉编译环境,即安装、配置交叉编译工具链。在该环境下编译出嵌入式Linux系统所需的操作系统、应用程序等,然后再上传到目标机上。 交叉编译工具链是为了编译、链接、处理和调试跨平台体系结构的程序代码。对于交叉开发的工具链来说,在文件名称上加了一个前缀,用来区别本地的工具链。例如,arm-linux-表示是对arm的交叉编译工具链;arm-linux-gcc表示是使用gcc的编译器。除了体系结构相关的编译选项以外,其使用方法与Linux主机上的gcc相同,所以Linux编程技术对于嵌入式同样适用。不过,并不是任何一个版本拿来都能用,各种软件包往往存在版本匹配问题。例如,编译内核时需要使用arm-linux-gcc-4.3.3版本的交叉编译工具链,而使用arm-linux-gcc-3.4.1的交叉编译工具链,则会导致编译失败。 那么gcc和arm-linux-gcc的区别是什么呢?区别就是gcc是linux下的C语言编译器

嵌入式树莓派智能小车相关

懵懂的女人 提交于 2020-02-22 19:37:08
毕业前参加了一个嵌入式得课程,其中,最后涉及到一个嵌入式项目——智能小车,项目具体要求如下,在该课程中我在QT上实现了小车主板树莓派可远程控制客户端,可以在电脑上点击按钮实现小车得前进后退,左右转以及加减速。按下方向键和挡位健,即可启动小车,之后可以换挡和按字母键(A W D Z S Q E)进行前 左 右 后 停 加减速转换,同时可以开启自动驾驶模式,遇到障碍物会启动超声波模块探测作出反应,探测地面黑色胶带路线进行导航,但是转弯没有调整的特别好,小弯转的比较好,大弯容易跑过,可能是马力太大。。。 具体资源链接: https://download.csdn.net/download/l5678go/12182669 Python 智能小车项目 本项目主要锻炼python编程能力,和小车组织控制动手能力,涉及到的内容有: 树莓派的基本使用 : 系统安装,网络配置,工作安装,远程控制 树莓派主要模块 : 超声波模块,寻迹模块,电机驱动,网络编程 智能小车满足功能如下 1:组装小车可以独立移动 2:键盘控制前进,后退,左转,右转,加速,减速 3:寻迹导航 4:超声波避障 5:远程控制前进,后退,左转,右转,加速,减速 客户端QT实现,服务器树莓派python实现(采用多线程) QT界面图: 附 : 循迹模块检测原理:黑线的检测原理红外发射管 发射光线到路面,红外光遇到白底则被反射

Linux嵌入式汇编语言

好久不见. 提交于 2020-01-23 22:55:00
  基本格式如下: asm ( "汇编语句" : 输出寄存器 : 输入寄存器 : 会被修改的寄存器 )    汇编语句 是写汇编指令的地方, 输出寄存器 表示当这段嵌入汇编语句之后,哪些寄存器用于存放输出数据.这些寄存器会分别对应一个C语言表达式或一个内存地址, 输入寄存器 表示在开始执行汇编代码时,这里指定的一些寄存器中应存放的输入值,它们分别对应着一个C变量或常数值.下面用例子来说明嵌入汇编语句的使用方法. # define get_seg_byte(seg, addr) \ ({ \ register char__res; \ __asm__("push %%fs; \ mov %%ax, %%fs; \ movb %%fs: %2, %%al; \ pop %%fs" \ :"=a"(__res) \ :""(seg),"m"(*(addr))); \ __res;})   这段代码定义了一个嵌入汇编语言宏函数.通常使用汇编语句最方便的方式是把它们放在宏内.用圆括号括住的组合语句可以作为表达式使用,其中最后的变量 __res 是该表达式的输出值.   因为是宏语句,需要在一行上定义,因此这里使用反斜杠将这些语句连成一行.这条宏定义将被替换到宏名称在程序中被引用的地方.第一行定义了宏的名称,也就是宏函数名称 get_seg_byte(seg, addr)

数据结构与算法对嵌入式的影响与使用:Studying Route

倾然丶 夕夏残阳落幕 提交于 2020-01-19 02:19:04
未来软件的发展趋势来讲,数据结构与算法会越来越普适: 程序 = 数据结构 + 算法 一方面是因为硬件的不断升级,使得很多嵌入式系统现在已经与桌面系统的区别越来越小,可以跑更多的软件平台,使得数据结构与算法可以有更宽阔的应用场景。 另一方面,即使是嵌入式设备,其软件功能需求也在不断的升级,很多嵌入式平台应用了越来越多的视觉算法、数据库等等,有些需求的背后也是需要数据结构与算法做支撑的。 对于计算机类的特定算法(复杂度较高、运行资源需要多),比如搜索类的、地图求最短、最优路径之类的,在一般的嵌入式里面不太可能用得到,这些可以作为拓展思考用;但是图、红黑树、二叉树、字符匹配、查找、堆等等都是真真正正能够用得到的东西,需要慢慢渗透掌握。 学习路径: 1. 大O(复杂度分析)和迭代器 (最基本的理论) 2. 动态数组vector (理论推导和设计原理) 3. 双链表list (跟STL的双链表list相似) 4. 栈和队列(stack、queue) 5. 优先队列 (堆排序的思想+动态数组vector) 6. 常用算法 (检索,排序,仿函数等设计原理) 7. 轻量级关联容器(用动态排序数组代替红黑树做轻量级关联容器。适合很少的插入和删除、大量的检索,内存紧张的场合。) 8. 内存管理器基础 (边界标记、位图、自由列表、引用计数) 9. 哈希表 (不同数据类型的哈希算法、三个哈希表的原理)

物联网框架ServerSuperIO.Core(.netcore)跨平台,一套设备驱动通吃嵌入式、上位机、云服务

随声附和 提交于 2020-01-18 12:04:24
1. 概述... 2 2. ServerSuperIO.Core跨平台开发环境... 2 3. ServerSuperIO.Core特点... 2 4. ServerSuperIO.Core与ServerSuperIO区别... 2 5. 嵌入式应用... 2 6. 上位机应用... 2 7. 云服务应用... 2 8. 应用和测试说明,以Linux平台为例... 2 概述 我们的大数据平台(云)平台的数据接收服务基于ServerSuperIO开发,因为集成的功能比较多,无法实现跨平台,现在跑在Windows下。但是云端体系化、标准化建设,跨平台是必走的技术路线。在ServerSuperIO基础上做裁剪和适配,实现ServerSuperIO.Core跨平台应用。 ServerSuperIO.Core跨平台的意义在于一套设备驱动可以部署在任何地方,核心设备驱动接口始终保持一致,例如:嵌入式、上位机(PC)、云端等,从底层到云端的整体链路实现了任意部署,大大提高了效率和节省了成本。 ServerSuperIO.Core跨平台开发环境 ServerSuperIO.Core现在是基于.netcore 2.0开发,对串口(com)操作和网络(net)操作进行了跨平台的适配。原始版本使用的是vs2017环境进行开发,跨平台开发调试使用的是vscode工具。全宇宙第一IDE+跨平台开发工具

初出茅庐的小李第2篇博客

假如想象 提交于 2020-01-15 04:08:07
嵌入式操作系统UCOSII移植笔记 记录学习、不断进步、第一次尝试边学习边记录的方式进行学习,总体感觉不错、也算是分享一下自己的学习心得吧! 看的是正点原子的教程,用的是精英版开发板,芯片是STM32F103ZET6 开发工具是Keil5 MDK 为什么要进行操作系统移植? 一般的嵌入式程序在51上运行的时候很少用到操作系统,不过也有用的(很少不抬杠),只有对时间要求比较高的时候才会用到操作系统,而RTOS不是一个系统,它是一类操作系统。UCOSII也只是众多嵌入式操作系统中的一个,还有其它的嵌入式操作系统,为什么我选择学习移植它,很简单因为它资料多、对于初学者来说,还是先照猫画虎吧! 其实还有一个原因,那就是毕业设计要用到操作系统的多任务管理功能,本应该上课就学会的,上课没学会那只能自己补喽,话不多少,开始干活~~ 第一步、准备一份待移植的工程模板 因为我用的是原子哥的开发板,自然就用他们送的资料啦,嵌入式点灯工程师上线啦,哈哈哈哈哈; 我选用的是:跑马灯工程 精英版 第二步、往工程模板中添加UCOSII文件 1、工程下建立UCOSII文件夹 2、文件夹里建立三个子文件夹 3、往子文件夹里添加相应文件 也就是把提供的Source文件夹里面的文件放在CORE里(UCOSII源码) 移植好的例程里的CONFIG文件夹里面东西放到新建的CONFIG文件夹里

编写优质嵌入式C程序

╄→гoц情女王★ 提交于 2020-01-12 00:05:08
原文地址: http://blog.csdn.net/zhzht19861011/article/details/45508029 前言: 这是一年前我为公司内部写的一个文档,旨在向年轻的嵌入式软件工程师们介绍如何在裸机环境下编写优质嵌入式C程序。感觉是有一定的参考价值,所以拿出来分享,抛砖引玉。 摘要:本文首先分析了C语言的陷阱和缺陷,对容易犯错的地方进行归纳整理;分析了编译器语义检查的不足之处并给出防范措施,以Keil MDK编译器为例,介绍了该编译器的特性、对未定义行为的处理以及一些高级应用;在此基础上,介绍了防御性编程的概念,提出了编程过程中就应该防范于未然的多种措施;提出了测试对编写优质嵌入式程序的重要作用以及常用测试方法;最后,本文试图以更高的层次看待编程,讨论一些通用的编程思想。 1. 简介 市面上介绍C语言以及编程方法的书数目繁多,但对如何编写优质嵌入式C程序却鲜有介绍,特别是对应用于单片机、ARM7、Cortex-M3这类微控制器上的优质C程序编写方法几乎是个空白。本文面向的,正是使用单片机、ARM7、Cortex-M3这类微控制器的底层编程人员。 编写优质嵌入式C程序绝非易事,它跟设计者的思维和经验积累关系密切。嵌入式C程序员不仅需要熟知硬件的特性、硬件的缺陷等,更要深入一门语言编程,不浮于表面。为了更方便的操作硬件,还需要对编译器进行深入的了解。

YOLO Nano:一种高度紧凑的只看一次的卷积神经网络用于目标检测

落爺英雄遲暮 提交于 2020-01-04 09:37:47
Alexander Wong1,2, Mahmoud Famuori1,2, Mohammad Javad Shafiee1,2 Francis Li2, Brendan Chwyl2, and Jonathan Chung2 1Waterloo Artificial Intelligence Institute, University of Waterloo, Waterloo, ON, Canada 2DarwinAI Corp., Waterloo, ON, Canada Abstract 目标检测仍然是计算机视觉领域的一个活跃研究领域,通过设计用于处理目标检测的深卷积神经网络,在这一领域取得了长足的进展和成功。尽管取得了这些成功,但在边缘和移动场景中广泛部署此类对象检测网络面临的最大挑战之一是高计算和内存需求。因此,针对边缘和移动应用的高效深层神经网络体系结构的设计越来越受到人们的关注。在本研究中,我们将介绍一种高度紧密的深度卷积神经网路YOLO Nano,来完成目标侦测的任务。利用人机协同设计策略创建YOLO Nano,其中基于YOLO系列单镜头目标检测网络架构的设计原则的原则性网络设计原型,与machinedriven设计探索相结合,创建一个具有高度定制模块级宏体系结构和为嵌入式对象检测任务定制的微体系结构设计的紧凑网络。所提出的YOLO Nano具有∼4