开发板实现645协议C语言,迅为-imx6ull开发板之C语言实现LED例程

第九章我们使用汇编编写了 LED 灯的实验,在实际开发过程中大部分还是使用 C 语言,汇编只是用来完成 C 语言环境的初始化,本章我么就来实现用汇编完成 C 语言环境的初始化,然后用 C 语言实现 LED 的例程。

10.1 C 程序版LED例程简介

汇编完成 C 语言环境的初始化主要包括内存初始化,设置堆栈指针等等,当这些工作完成以后就可以跳转到 C 语言,执行 C 程序了,所以我们有两部分事情要做:

1.汇编文件,用来完成 C 语言的环境初始化

2.C 语言文件,主要实现我们的业务功能,比武我们本章的点亮 LED。

10.2 原理图分析 原理图分析

本章用到的硬件资源和第 6 章的一样,可以参照第六章的硬件原理分析。

10.3 程序编写

本实验对应的例程在光盘资料的:i.MX6UL 终结者光盘资料\04_裸机例程源码\2_led_C program 目录下,我们在 Ubuntu 系统建立“1_Led_C program”文件夹,然后在“Led_C program”文件夹下建立文件:start.S、main.c、main.h。其中 start.S 是汇编文件,main.c 和 main.h 是 C 语言文件。

我们在前面新建的“srart.S”文件中输入下面的代码:

1. global _start /* 全局标号 */

2. /*

3. * 描述: _start 函数,程序从此函数开始执行,此函数主要功能是设置 C

4. * 运行环境。

5. */

6. _start:

7. /* 进入 SVC 模式 */

8. mrs r0, cpsr

9. bic r0, r0, #0x1f /* 将 r0 寄存器中的低 5 位清零,也就是 cpsr 的 M0~M4 */

10. orr r0, r0, #0x13 /* r0 或上 0x13,表示使用 SVC 模式 */

11. msr cpsr, r0 /* 将 r0 的数据写入到 cpsr_c 中 */

12. ldr sp, =0X80200000 /* 设置栈指针 */

13. b main /* 跳转到 main 函数 */

第 1 行定义了一个全局标号_start

第 6 行是程序的入口、

第 8 行到第 11 行是设置处理器进入 SVC 模式

第 12 行通过 ldr 指令设置 SVC 模式下的 sp 指针(0x80200000),i.MX6 ULL 终结者开发板上的内存地址范

围是 0X80000000~0XA0000000(512MB)或 0X80000000~0X90000000(256MB),所以不论是 512MB 版本还是256MB 版本的,其内存起始地址都是 0X80000000,由于 i.MX6ULL 的堆栈是向下正常的,所以 SP 指针设置成 0X80200000(0X80200000-0X80000000,是 2MB 的栈空间,足够我们使用了)。

第 13 行是挑喜欢到 main 函数(C 语言的入口函数。

至此汇编部分的程序我们就完成了,主要用来设置处理器在 SVC 模式下运行,然后初始化 SP 指针,最后跳转到 C 程序的 main 入口函数。如果大家有接触过三星的 S3C2440

7841bb563222

7841bb563222

7841bb563222

7841bb563222

7841bb563222

7841bb563222

7841bb563222

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解锁环境变量在云原生应用中的各种姿势

应用程序在某些时刻总是需要一些外挂配置,云原生应用的实践是在容器化之前就将应用程序配置保留在代码之外。“12-Factors App:Store config in the environment① 外挂配置文件:业务配置 appsettings.json“可以在代码中要求加载appsetting.…

python字符串截取方法_如何使用python语言中的字符串方法截取字符串

在我们使用python语言中的字符串方法时,可能会判断某个字符串是否以什么开头,可以使用什么进行截取等。下面利用几个实例说明字符串中的方法的用法,操作如下:工具/原料 python 截图工具 方法/步骤 1 第一步,打开python…

数据结构——二叉树的层次遍历

问题描述: 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。 示例: 二叉树:[3,9,20,null,null,15,7] 返回其层次遍历结果: [ [3], [9,…

asp.net core 使用 TestServer 来做集成测试

asp.net core 使用 TestServer 来做集成测试Intro之前我的项目里的集成测试是随机一个端口,每次都真实的启动一个 WebServer,之前也有看到过微软文档上 TestServer 的介绍,当时没仔细看过以为差不多就没用,一直是启动了一个真正的…

python os system_python中os. popen system的区别

python调用Shell脚本或者是调用系统命令,有两种方法: os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码,正确会返回0,错误会返回其他数字。 后者的返回值是脚本执行过程中的输出内容。实际使用时视需求情况而选择。 p…

android 文件 c语言 jni,Android jni 调用的so文件一个函数的反汇编 高手来看看

[Asm] 纯文本查看 复制代码var_104 -0x104var_A0 -0xA0var_48 -0x48var_34 -0x34var_2C -0x2Cvar_28 -0x28STMFD SP!, {R4-R11,LR}LDR R8, (_GLOBAL_OFFSET_TABLE_ - 0x2B34)LDR R11, (__stack_chk_guard_ptr - 0xA104)SUB SP, SP, #0xE4ADD R8, PC, R8LDR R3, [R8,R11]ADD R4,…

数据结构——交换左右子树

递归——层次遍历—交换左右子树算法 思路&#xff1a; 与先序递归遍历类似 1如果有子树&#xff0c;交换这个节点的左右子树&#xff08;和交换两个变量的值一样&#xff09; 2再递归这个节点的左子树&#xff0c;右子树&#xff1b; #include<stdio.h> #include<b…

python人工智能面试题_人工智能面试题分享(含答案)

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 1、深度学习框架TensorFlow中有哪四种常用交叉熵&#xff1f; 答&#xff1a; tf.nn.weighted_cross_entropy_with_logits tf.nn.sigmoid_cross_entropy_with_logits tf.nn.softmax_cross_entropy_with_logits tf.nn.sparse_softm…

微服务很香--麻辣味,但要慢慢消化

前言微服务在编程圈火的是不行不行的啦&#xff0c;可能还有很多小伙伴还没有进行微服务实操&#xff0c;但这个词&#xff0c;要说没听过、没看过&#xff0c;那小伙伴一定是假Programmer。虽然微服务很火&#xff0c;但不能盲目使用&#xff1b;先不说涉及技术和工具有多少&a…

c语言实现灰度图像阈值分割,灰度图像--图像分割 阈值处理之平均阈值

学习DIP第52天转载请标明本文出处&#xff1a;http://blog.csdn.net/tonyshengtan &#xff0c;出于尊重文章作者的劳动&#xff0c;转载请标明出处&#xff01;文章代码已托管&#xff0c;欢迎共同开发&#xff1a;https://github.com/Tony-Tan/DIPpro开篇空话好久没写博客了&…

数据结构——二叉树的双序遍历

设计二叉树的双序遍历算法(双序遍历是指对于二叉树的每一个结点来说,先访问这个结 点,再按双序遍历它的左子树,然后再一次访问这个结点,接下来按双序遍历它的右子树 思路&#xff1a; 1.双序遍历与中序遍历类似&#xff0c;是中序遍历的变形 2.中序遍历是指对于二叉树的每一…

python如何封装成可调用的库_Python实现打包成库供别的模块调用

1.创建python项目bricewulib2.新建test_package包并创建info1类以及print_hello方法3.为了让包的结构再复杂点&#xff0c;我们再在test_package下面新建一个test_package2包并创建Info2类以及print_hello2方法&#xff08;注意&#xff1a;这里是Info2&#xff0c;不是上面的I…

从零开始实现 ASP.NET Core MVC 的插件式开发(九) - 如何启用预编译视图

标题&#xff1a;从零开始实现 ASP.NET Core MVC 的插件式开发(九) - 升级.NET 5及启用预编译视图作者&#xff1a;Lamond Lu地址&#xff1a;https://www.cnblogs.com/lwqlun/p/13992077.html源代码&#xff1a;https://github.com/lamondlu/Mystique适用版本&#xff1a;.NET…

android arp工具,GitHub - SummerSnow274/ARP_sed_rev: 在Android通过ARP询问实现获取同一网络所有设备的MAC地址,AP隔离的网络除外...

ARP_sed_rev在Android通过ARP询问实现获取同一网络所有设备的MAC地址&#xff0c;AP隔离的网络除外arpsed.c编译&#xff1a;gcc arpsed.c -o arpsed运行&#xff1a;sudo ./arpsed ens33 192.168.1.123 //ens33是网卡名&#xff0c;参数放在外面易于操作交叉编译在Android上运…

数据结构——二叉树的层次遍历进阶

之前的一个博客 数据结构——二叉树的层次遍历看完这个&#xff0c;可以简单实现下面的问题 问题&#xff1a; 1.计算二叉树的最大宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值。 2.用按层次顺序遍历二叉树的方法,统计树中具有度为1的结点数目。 解决问题的思路…

future.cancel不能关闭线程_多线程与高并发笔记

1. 创建线程的四种方式实现Runnable 重写run方法继承Thread 重写run方法线程池创建 Executors.newCachedThreadPool()实现Callable接口2. Thread线程操作方法当前线程睡眠指定mills毫秒Thread.sleep([mills])当前线程优雅让出执行权Thread.yield()例如Thread t1, t2&#xff0c…

ANDROID手表怎么设置壁纸,表盘背景随心换 果壳智能手表换壁纸教程

在智能手机和电脑上&#xff0c;我们一般都会换一张自己喜欢的图片作为壁纸&#xff0c;当我们想把一张喜欢的图片做成果壳GEAK Watch表盘时&#xff0c;应该怎么做呢&#xff1f;其实只要简单的几个步骤&#xff0c;你就能获得独一无二的专属表盘。首先&#xff0c;打开一张你…

如何踢掉 sql 语句中的尾巴,我用 C# 苦思了五种办法

一&#xff1a;背景 1. 讲故事这几天都在修复bug真的太忙了&#xff0c;期间也遇到了一个挺有趣bug&#xff0c;和大家分享一下&#xff0c;这是一块sql挺复杂的报表相关业务&#xff0c;不知道哪一位大佬在错综复杂的 嵌套 平行 if判断中sql拼接在某些UI组合下出问题了&#…

数据结构——二叉树的最长路径问题

题目&#xff1a; 求任意二叉树中第一条最长的路径长度,并输出此路径上各结点的值。 描述 设二叉树中每个结点的元素均为一个字符&#xff0c;按先序遍历的顺序建立二叉链表&#xff0c;编写算法求出该二叉树中第一条最长的路径。 输入 一行数据&#xff0c;为二叉树的先序序…

android http请求缓存,Android Http请求和响应使用协议缓冲区

我对协议缓冲区主题非常陌生.但我知道json解析等等现在,我实际上正在此协议缓冲区上工作,我正在制作一个使用带有协议缓冲区的android进行Http请求和响应的应用程序.我正在使用android中的协议缓冲区制作一个登录页面.服务中的一切正常工作墙返回了我想要的每个字段的响应,但是…