开发板实现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 的介绍,当时没仔细看过以为差不多就没用,一直是启动了一个真正的…

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

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

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

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

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

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

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

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

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

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

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

之前的一个博客 数据结构——二叉树的层次遍历看完这个,可以简单实现下面的问题 问题: 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手表怎么设置壁纸,表盘背景随心换 果壳智能手表换壁纸教程

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

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

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

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

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

.NET 应用如何优雅的做功能开关(Feature Flag)

点击上方蓝字关注“汪宇杰博客”导语曾经,我们要在应用程序里做功能开关,就避免不了在配置文件里加上一堆 bool 类型的配置项,然后在代码里用 if else 去判断。尽管这种做法是可行的,但我们现在有办法让代码更加整洁,避…

鼠标右键 移动选定的文件夹到指定位置_iRightMouse:一款免费Mac鼠标右键增强神器...

如果你是多年的Windows用户转到macOS平台,你必定会发现Windows上很多非常方便的鼠标右键菜单在macOS上都是没有的,例如新建txt文档、一键隐藏文件等。而这些快捷功能的缺失也确实会带来一些不便,奇客君发现一款刚刚上线的免费右键增强工具&am…

数据结构——从叶子结点到根节点的全部路径

问题 给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-paths 257.二叉树的所有路径 与…

台电x80plus装linux,纤巧却不简单——台电X80 Plus评测

8英寸平板一直是各平板品牌混战厮杀的大战场。“性价比”是这个尺寸平板好坏的最重要关键字。今天就为大家带来台电8英寸X80 Plus平板电脑的评测。X80 Plus是台电8英寸产品中的最新款,采用的是英特尔新一代CherrTrail架构芯片Atom X5 Z8300。HD核显由原来的Gen7升级…

数据结构——二叉树的递归算法

二叉树的结构定义: typedef struct BiNode {TElemType data;struct BiNode *lchild;struct BiNode *rchild; }BiNode,*BiTree;这里包含的递归算法有: 二叉树的先序创建;二叉树的先序中序后序遍历;二叉树的销毁算法;双…

使用BeetleX访问redis服务

BeetleX针对redis访问封了全async/await操作模式,通过它可以更高效地访问redis服务。BeetleX.Redis提供读写分离和多机故意写入处理,同时安全的TLS访问机制,在使用功能上组件支持绝大部分基础指令,并提供json,protobuf…