摘要:
目录如下图所示,详见码云:https://liangkangnan.gitee.io/2020/03/21/深入浅出RISC-V调试/ 阅读全文
摘要:
本项目实现的是一个32位单核RISC-V处理器(tinyriscv),采用verilog语言编写,只求以最简单、最通俗易懂的方式实现RISC-V指令的功能。tinyriscv处理器有以下特点: 1.支持RV32IM指令集,通过RISC-V指令兼容性测试; 2.采用三级流水线,即取指,译码,执行; 3 阅读全文
摘要:
前面说过zephyr支持静态和动态两种方式创建线程,这里分析动态创建的方式。应用程序通过调用k_thread_create()函数创建一个线程,实际上是调用_impl_k_thread_create()函数,定义在zephyr-zephyr-v1.13.0\kernel\thread.c: 第9行, 阅读全文
摘要:
每一个支持多进程(线程)的系统都会有一个滴答时钟(系统时钟),这个时钟就好比系统的“心脏”,线程的休眠(延时)和时间片轮转调度都需要用到它。 Cortex-M系列的内核都有一个systick时钟,这个时钟就是设计用来支持操作系统的,是一个24位的自动重装载向下计数器,中断入口就位于中断向量表里面,定 阅读全文
摘要:
一.写在前面 最近对zephyr这个系统很感兴趣,因此业余有时间的时候都在研究它的源码,而光看代码不去动手这不是我的风格,于是乎在网上淘了一块STM32F103C8T6的核心板和一块NRF52832的最小系统板。由于zephyr支持很多种开发板,因此一行代码都不用修改就直接可以在这两块板子上跑起来。 阅读全文
摘要:
一.概述 Zephyr支持在Windows、Linux和MacOS环境下开发,这里只介绍如何在Windows下搭建zephyr的开发环境。 二.步骤 2.1安装msys2 msys2是一个Linux模拟环境,类似于ArchLinux。 安装完成后,要添加源(这与Linux环境是类似的),这里我添加的 阅读全文
摘要:
Zephyr是一个面向物联网的嵌入式实时操作系统(RTOS),是Linux基金会旗下的一个项目,具有以下特点: 1.安全的,灵活、高可扩展性,支持多种硬件平台(ARM、ARC、X86、xtensa、nois2、riscv32); 2.基于Apache 2.0许可,完全开源,代码托管在github; 阅读全文
摘要:
前言 说到看门狗,应该不会陌生,看门狗说白了就是一个定时器,但是它有一个非常重要的功能就是复位系统。在A20里,看门狗的操作非常简单,只有两个寄存器,不需要操作时钟相关的东西,系统起来后可以直接使用,它的最大定时时间为16秒。一、目的 学习使用A20的看门狗,实现软件复位系统。二、源代码说明 start.S文件。首先禁止CPU的IRQ和FIQ,设置为管理模式,需要注意的是,这里设置异常向量表的起始地址为start.S文件里的第一指令的地址,学过ARM的都知道,ARM的异常向量表可以设置在低地址(0地址),也可以设置在高地址(0xffff0000地址,通常在使能了MMU后使用),但是目... 阅读全文
摘要:
前言 在Cubieboard2裸机开发之(三)里用到了一个延时函数delay,它的延时时间是不精确的,因此为了能够精确延时,就需要定时器的配合。定时器可以精确延时的一个重要原因是它的计时时钟(或者说频率)是精确的,计时时钟越小,能实现的延时时间就越小。 A20的定时器模块比较强大,它不仅有6个普通的定时器,还有4个高速定时器,计时频率可达上百MHz,更重要的是它们操作起来非常简单、易懂。一、目的 学习使用A20的普通定时器,实现精确延时。二、源代码说明start.S文件。首先禁止CPU的IRQ和FIQ,设置为管理模式,然后设置堆栈指针,最后调用C语言的main函数。 1 /* 2 ... 阅读全文
摘要:
前言 前面通过汇编语言点亮LED,代码虽然简单,但并不是很直观。这次使用熟悉的C语言来控制LED,但是需要注意的地方有两点,第一,要想使用C语言,首先需要在调用C语言代码之前设置好堆栈;第二,调用C语言函数时,是需要相对跳转还是绝对地址跳转,还是两者都可以,这就需要知道代码是否运行在链接地址处,是位置无关的还是位置有关的。从前面分析可以知道,我们的代码是运行在链接地址处的,因此可以用直接进行函数的调用。一、目的 使用C语言的方式操作板载LED。二、源代码说明start.S文件。首先禁止CPU的IRQ和FIQ,设置为管理模式,然后设置堆栈指针,最后调用C语言的main函数。 1 /* 2 ... 阅读全文