首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

迅为2K1000龙芯开发板pmon 下操作 GPIO

因为有的时候我们做了一款产品, 在特定的环境下需要让 GPIO 在上电时就是就保证是一个确定的电平, 如高电平或者低电平。...Uboot 上这些资料非常的多, 所以我们别的板子对于这个需求就没单独拿出来给大家讲, 但是龙芯用的是 pmon, pmon 上相关的资料太少了, 所以有必要单独作为一章给大家讲解。...有俩种方法, 这里以开发板上的 led3 给大家举例, 一种方法是在 c 语言环境建立之前来控制, 另一种方法是在 c 语言环境建立以后来控制。...如果你用的不是专用 GPIO 引脚, 则需要设置复用关系!...有的同学可能会有疑问了, 既然我们可以使用 C 语言来控制 gpio, 为什么我们还要使用更底层的汇编语言呢,如果我们要使用 C 语言, 是不是需要等待 C 语言环境建立起来才可以使用呢, 那他是不是就要比汇编稍微的慢一些呢

71541

超详细分析Bootloader(Uboot)到内核的启动流程(万字长文!)

由于嵌入式开发中 Bootloader多是针对某类板子进行编写,所以可以根据板子的情况直接设置,不需要考虑可以适用于各类情况的复杂算法。...在此之前,uboot已经完成了硬件的初始化,可以说已经”适应了“这块开发板。...命令是uboot专门用来启动uImage格式的Linux内核,它在修改pc的值到指定地址之前,会设置传递给Linux内核的参数,用法如下:   格式:bootm addr uboot中bootm命令实现...当我们使用我们在uboot使用bootm命令后,bootm命令会从uImage头中读取信息后,发现是Linux内核,就会调用do_bootm_linux()函数,函数的具体实现bootm.c中 int...);    //如果设置则用环境变量里的机器id printf("Using machid 0x%lx from environment\n", machid); }

13K44
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    5.1 汇编语言:汇编语言概述

    本章中所提到的汇编语言为Windows汇编,在Windows平台下读者可使用MASM工具对汇编语言进行编译测试,也可以使用通用的集成开发环境实现编译,笔者推荐使用RadASM工具,RadASM 是一个面向汇编编程的开发环境...,最常见的字符串是以空格结尾0h,在C/C++中定义字符串无需添加结尾0h,这是因为编译器会在编译的时候自动的在字符串后面填充了0h,在汇编语言中我们需要手动添加字符串结尾的标志,以告诉汇编器字符串的结束...使用masm32.inc中的这些宏,可以方便地将输入输出重定向到控制台或文件中,而无需直接调用Windows API函数。...例如,可以使用StdIn宏从控制台读取用户输入,使用StdOut宏向控制台输出字符流。这些宏的使用方式与在C语言中使用 stdin 和 stdout 类似。...然后,可以使用crt_printf宏来输出格式化的文本信息到控制台或文件中。

    41620

    5.1 汇编语言:汇编语言概述

    本章中所提到的汇编语言为Windows汇编,在Windows平台下读者可使用MASM工具对汇编语言进行编译测试,也可以使用通用的集成开发环境实现编译,笔者推荐使用RadASM工具,RadASM 是一个面向汇编编程的开发环境...,最常见的字符串是以空格结尾0h,在C/C++中定义字符串无需添加结尾0h,这是因为编译器会在编译的时候自动的在字符串后面填充了0h,在汇编语言中我们需要手动添加字符串结尾的标志,以告诉汇编器字符串的结束...使用masm32.inc中的这些宏,可以方便地将输入输出重定向到控制台或文件中,而无需直接调用Windows API函数。...例如,可以使用StdIn宏从控制台读取用户输入,使用StdOut宏向控制台输出字符流。这些宏的使用方式与在C语言中使用 stdin 和 stdout 类似。...然后,可以使用crt_printf宏来输出格式化的文本信息到控制台或文件中。

    63750

    VS中使用X64汇编

    需要注意的是,在X86项目中,可以使用__asm{}来嵌入汇编代码,但是在X64项目中,再也不能使用__asm{}来编写嵌入式汇编程序了,必须使用专门的.asm汇编文件来编写相应的汇编代码,然后在其它地方来调用这些汇编代码...那么,如何在VS中使用X64的汇编呢?本例子将演示如何在汇编文件中使用.c或者.cpp源文件中定义的函数和变量,以及如何在.c或者.cpp中使用汇编文件中定义的函数。...首先使用VS(本例子中使用的是VS2013)file=》new=》project,创建一个console项目如下:x64_asm。 ? 项目创建好了之后,默认是一个X86的开发编译环境: ?...(void) { printf("hello world2\n"); } //func.h #pragma once extern "C"//防止函数被name mangling { void...ret FUNC2 ENDP END 编译amd64xx.asm需要做单独的设置: 在amd64xx.asm文件上单击鼠标右键,选择“属性(properties)”: ?

    3.9K31

    浏览器第四种语言-WebAssembly

    ❝WebAssembly 也是新一代Web 虚拟机标准,可以让用「各种语言」编写的代码都能以接近原生的速度在Web中运行 C/C++代码可以通过Emscripten工具链编译为wasm二进制文件,进而导入网页中供...角度 方式 「汇编角度」 WebAssembly提供了一种更接近于机器码的中间表示形式,使得代码在浏览器中的执行速度更快。它允许开发者编写高性能的代码,同时保持「跨平台兼容性」。...语言支持 WebAssembly 支持多种编程语言,如 C、C++、Rust 等,使得开发者可以使用熟悉的语言编写高性能 Web 应用。...latest # 激活当前终端中的路径和其他环境变量 emsdk_env.bat ❝Note: 安装及激活 Emscripten 「只需要执行一次」,然后在新建的控制台中设置一次环境变量,既可使用Emscripten...要在网页中使用 WebAssembly,需要遵循以下步骤: 编写 WebAssembly 模块,可以使用 C/C++、Rust 等语言编写。 将 WebAssembly 模块编译为 wasm 格式。

    1.4K10

    嵌入式驱动工程师学习路线【建议收藏】

    参考文章如下: 《Linux入门的基础知识点汇总,有这篇就够了》 《linux驱动、ARM学习环境搭建》 《Linux入门-shell编程-适合小白》 《一键获取linux内存、cpu、磁盘IO等信息脚本编写...结构体、数组、指针、二级指针,字符串操作 排序 用户登录 用户电话号码信息的添加、删除、修改 二、进阶 进阶阶段知识点很重要,学完这个阶段的内容,我们就可以用各种库函数+系统调用来自己实现Linux命令...进程线程 进程与线程的概念 掌握常用的函数fork、exec族函数等api; 进程创建、回收,一个.c源文件变成可执行程序的过程; 常用的进程相关命令:ps、top、crontab、at; 进程间通信...ARM arm架构、arm的模式、arm指令,寻址,异常,中断,异常向量表, 伪指令、C语言和汇编代码的互相调用、内联汇编; 学会查看常见电路图,了解数据线、信号线、地址线、中断线,常见外设电路图 学会查看各种芯片的用户手册...系统移植 uboot移植、uboot参数设置 rootfs制作、内核剪裁移植, usb、网卡驱动移植, uboot、linux启动流程, 自己添加uboot命令 这一阶段的内容对于嵌入式工程师来说,在做实际项目的时候

    3.6K32

    快 11K Star 的 WebAssembly,你应该这样学

    WebAssembly 是一种低层次、类汇编的语言,使用一种紧凑的二级制格式,能够以近乎原生的性能运行,并提供了低层次的内存模型,是 C++、Rust 等语言的编译目标,使得这类语言编写的代码能够在 Web...WebAssembly 目前处于一个萌芽的节点,之后肯定会涌现出很多工具,而目前有四个主要的入口: 使用 EMScripten 来移植 C/C++ 应用 在汇编层面直接编写和生成 WebAssembly...和物理汇编语言类似,WebAssembly 的二进制格式也有一种文本表示,你可以手动编写或生成这种文本格式,并通过 WebAssembly 的文本到二进制(text-to-binary)的工具将文本转为二进制格式...声明的函数可能会失效,所以在 C++ 环境下为函数加上 external ,将其当做 external 函数,这样在 C++ 环境下也可以正确工作。...WebAssembly 的模块初始化好了之后,通过 cwrap 函数导出 C 函数 version 使用,通过运行和之前类似的 npx serve .

    3K21

    uboot的relocation原理详细分析「建议收藏」

    在寻址这些变量 函数时找到的应该是relocation之前的地址,这样relocation就没有意义了!...当然uboot不会这样,我们来分析一下uboot下relocation之后是如何寻址的,开始学习之前我是有3个疑问,如下 (1)如何对函数进行寻址调用 (2)如何对全局变量进行寻址操作(读写) (3)对于全局指针变量中存储的其他变量或函数地址在...函数中就包含了函数指针 变量赋值 函数调用这3种情况,寻址肯定要汇编级的追踪才可以,编译完成后反汇编,得到u-boot.dump(objdump用-D选项,将所有section都disassemble出来...接下来来看函数的调用,可以看到对于printf以及test_func,使用的是指令bl以及b进行跳转,这2条指令都是相对寻址(pc + offset) 说明ARM调用函数使用的是相对寻址指令bl或b,与函数的绝对地址无关...uboot中ld使用-pie而cc没有使用-fPIC或-fPIE,目标文件中就不会生成GOT,函数中寻址还是在尾部Label中直接存储变量的绝对地址,但这个Label同样存在rel.dyn中,uboot

    1.7K10

    物联网工程师之C语言编程基础

    为了解决这个问题,汇编语言诞生了,汇编语言是面向机器的程序设计语言。用英文字母或符号串来替代机器语言,把不易理解和记忆的机器语言按照对应关系转换成汇编指令。...1、C语言的历史 早期的操作系统和系统软件主要是用汇编语言编写的,如UNIX操作系统。由于汇编语言依赖于计算机硬件,程序的可读性和可移植性都比较差。...用C语言加上一些汇编语言子程序,就更能显示C语言的优势了,像PC- DOS 、WORDSTAR等就是用这种方法编写的。...printf函数并不是在本程序中实现的,而是来自C语言的标准库,也被称作标准库函数。它的声明可以在之前包含的stdio.h文件中找到。...图1-13函数调用示意 如图1-13所示,C语言中所有的函数调用都要遵循类似的写法:首先是函数名,之后是用括号包起来的参数列表,最后是结尾的分号。

    12310

    从零手写操作系统之RVOS内存管理模块简单实现-02

    这在一般情况下是没有问题的,但对于一些特殊要求的程序,比如: 操作系统内核、BIOS(Basic Input Output System)或一些在没有操作系统的情况下运行的程序(如引导程序Boot Loader...: 在之前的环境准备小节中,我们makefile文件中编写的ld链接命令中只通过-Ttext=0x80000000命令指明了代码段的在内存中的起始地址 os.elf: ${OBJS} ${CC} ${...跨平台支持:使用汇编文件作为中间转换层可以更好地支持跨平台开发。汇编语言是与硬件平台相关的,通过直接编写汇编代码,可以更好地适应不同的硬件架构和操作系统环境。...函数是在02小节中编写的printf.c文件中出现的,而非c语言提供的库函数,最终输出底层还是借助的上一节中编写uart.c代码,借助串口输出到连接设备的屏幕上。...= 0x%x\n", p3); } 输出: 扩展 可尝试基于课程02节已有的Page.c扩展出类似C语言中提供的malloc和free函数。

    25340

    Android启动流程——1序言、bootloader引导与Linux启动

    (二)、Bootloader的定义和种类 简单地说,BootLoader是在操作系统运行之前运行的一段程序,它可以将系统的软硬件环境带到一个合适的状态,为运行操作系统做好准备,这样描述是比较抽象的,但是它的任务确实不多...inflate.c调用flush_window()来输出window缓冲区的解压出的字节串,每次输出长度用outcnt变量表示。...检查处理器是汇编子函数__lookup_processor_type中完成的,通过以下代码可实现对它的调用:bl__lookup_processor_type(在文件head-commom.S实现)。...对于ARM平台而言,该函数定义在arch/arm/kernel/setup.c。...4、/etc/inittab: /ect/inittabl定义init服务在Linux启动过程中必须执行以下几个脚本: /etc/rc.d/rc.sysinit 主要功能是设置系统的基本环境,当init

    5.2K21

    【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)

    : 如 之前的初始化的方法 "bl lowlevel_init", 该行代码的地址是 0x30008000, lowlevel_init 在 0x30008010 地址处, 执行到了该行代码, 30008010...Bootloader 架构设计 H-Boot BL1 程序设计 : 汇编代码编写; -- 1. 核心初始化 : a. 设置中断向量表, b. 设置 CPU svc 模式, c. 关闭看门狗, d....C 语言编程环境设置 : a. 设置堆栈, b. 清除 BSS 段; -- 3. LED 初始化 ; -- 4. 初始化系统时钟; -- 5. 内存初始化 : a....复制代码到内存, c. 跳转到 BL2 入口; H-Boot BL2 程序设计 : 汇编代码编写; -- 1. MMU 初始化;  -- 2. 中断初始化 : a. 中断初始化, b....移植 printf 函数; -- 4. 网卡初始化; -- 5. LCD 初始化 : a. 触摸板初始化, b. LCD 初始化; -- 6. 解析执行用户命令 : a.

    4.4K40

    Windows下C语言环境搭建

    Msys2 本质上提供的是一套类似于 archlinux 的包管理工具,我们可以在 Msys2 的控制台当中通过 pacman 来安装相应的工具包,这其中就包括 MinGW 的编译工具链。...就是程序编译之前执行的操作,预处理指令又叫做宏。那编译又是啥?编译就是将我们编写的源代码翻译成机器能够执行的机器指令的过程,源代码机器是不能直接执行的,不然程序员就要下岗了。...printf 也是一个函数,它是由 C 语言标准库定义的,因此我们可以在任何支持 C 标准的平台上调用它,它的意思是 print format,格式化输出。...WinGW用的是 GDB ,也可以设置显示汇编指令的格式: # 设置为 Intel 的指令格式 set disassembly-flavor intel # 设置为 AT&T 的指令格式 set disassembly-flavor...例如,基础库中有个函数叫printf,你也写了一个函数也叫printf,就会导致错误。所以使用帕斯卡命名法能够避免一些类似的问题。

    3.2K10

    记一次uboot升级过程的两个坑

    消失的打印 为了明确卡住的位置,就去修改了库的源码,添加一些打印(此时还是在旧版本uboot下编译的),结果发现卡住的位置或随着添加打印的变化而变化,且有些打印语句,添加后未打印出来。...分析下uboot中的printf实现,最底层就是写寄存器,是一个同步的函数,也没什么可疑的地方。...验证改动 为了求证,将库反汇编出来,发现确实避开了r8寄存器,但使用了r9寄存器。 说明uboot在指定gd寄存器的同时,还有某种方法让其他代码不使用这个寄存器。...因为uboot进入kernel之前都会关cache,由kernel自己去重新打开。 也就是不管是用哪份uboot,也不管uboot中是否开了cache,对kernel阶段都应该没有影响才对。...再全局搜索下,原来这个新版本uboot中,套路是在board_init中进行此项设置的,而这个平台从旧版本移植过来,就没有设置 SMP bit, 补上即可。

    1K10

    Linux 环境基础开发工具详解

    通过本文的学习,读者将掌握在 Linux 系统中如何配置开发环境、编写代码、编译、调试以及进行版本控制等关键技能。 一、Linux 软件包管理器 yum 1.1 什么是软件包?...在 Linux 中,软件包是经过预编译、打包的应用程序或工具,它类似于 Windows 系统中的安装程序。软件包可以通过包管理器进行管理,简化软件的安装、更新和卸载过程。...设置断点: 在某行设置断点:break 行号 或 b 行号 在某个函数设置断点:break 函数名 或 b 函数名 单步执行: next 或 n:单步执行,不进入函数内部。...step 或 s:单步执行,进入函数内部。 查看变量值:print 变量名 或 p 变量名。 继续运行:continue 或 c,继续执行程序直到下一个断点。...这样每次循环都能够覆盖之前的输出,实现类似动态刷新的效果。 通过使用 usleep(10000),可以控制进度条的速度,使其更新更为平滑。该程序的实现非常简单,却展示了控制台应用的一些基本技巧。

    13110

    ARM64 SMP多核启动(上)- spin-table

    1.开场白 环境: 处理器架构:arm64 uboot版本:uboot-2020.01 内核源码:linux-5.0 ubuntu版本:20.04.1 ATF版本:2.1 代码阅读工具:vim+ctags...但是在系统 启动阶段他们的地位并不是相同的,其中core0是主cpu(也叫引导处理器),其他core是从cpu(也叫辅处理器),引导cpu负责执行我们的启动加载程序如uboot,以及初始化内核,系统初始化完成之后主...2)我们要知道,程序为何可以在多个cpu上并发执行:他们有各自独立的一套寄存器,如:程序计数器pc,栈指针寄存器sp,通用寄存器等,可以独自 取指、译码、执行,当然内存和外设资源是共享的,多核环境下当访问临界区...从bootloader说起(以uboot为例):首先,上电后主处理器和从处理器都会启动,执行uboot,从uboot的_start的汇编代码开始执行,主处理器在uboot中欢快的执行后启动内核,进入内核执行...那么这个地址什么时候会被设置呢?答案是:主处理器在uboot中读取设备树的相关节点属性获得,我们来看下如何获得。

    81020

    【Linux探索学习】第八弹——Linux工具篇(三):Linux 中的编译器 GCC 的编译原理和使用详解

    Linux下的vim编辑器:【Linux探索学习】第七弹——Linux的工具(二):Linux下vim编辑器的使用详解-CSDN博客 前言: 在上一篇我们学习了如何在Linux环境下直接用vim编辑器来进行编辑代码...二、背景知识 在我们正式讲解GCC如何编译及其背后原理之前,我们先来了解一个背景知识,这个在我们之前用VS学习C语言和C++的时候是学过的,那就是——我们所编写的代码是如何经编译器处理一步步生成一个可执行程序并得到执行的...我们通过一个C语言的代码来试一下 我们创建一个C语言文件hello.c 用vim打开,在里面写入这样一段简单代码 #include int main() { printf(...gcc -c -hello.s -o hello.o 4.4 链接 最后一步是链接。链接器(如 ld)将一个或多个目标文件和所需的库文件(如标准库)结合起来,生成最终的可执行文件。...五、函数库 在我们代码中,会有printf等函数,我们并没有对它们的实现,而且预编译"stdio.h"中,也只有对它的声明,没有对它的实现,那么这些函数是在哪进行实现的呢?

    19410

    Ubuntu下如何安装并使用Objective-C

    它跟Java相比更接近底层,你可以直接在里面写内联汇编或直接与汇编文件一起连接(因为它就是C语言,在C语言基础上扩展了SmallTalk的消息机制与OO机制)。...在编译之前,我们进入 /usr/share/GNUstep/Makefiles 目录,来对编译环境进行设置,在当前控制台(terminal)执行: sudo bash /usr/share/...GNUstep/Makefiles/GNUstep.sh 这样,当前控制台的GNUStep的编译环境就建立好了。...所以最好的方式还是通过利用makefile来解决问题,呼呼~ 下面在提一下Objective-C与纯C以及汇编混编的情况。...由于GNUStep提供的makefile package仅仅提供了C、C++、Objective-C以及Objective-C++这四种编程语言,而不支持汇编语言,因此,如果要在GNUStep工程中使用汇编

    88500
    领券