摘要:root@ubuntu:~/arm/armv8-bare-metal# make aarch64-linux-gnu-ld -T linker.ld linker.ld boot.o vector.o exception.o kernel.o gic_v3.o uart.o psw.o aarch6
阅读全文
摘要:root@ubuntu:~/arm/raspberry-pi-os/exercises/lesson05/3/bl4ckout31# make mkdir -p build aarch64-none-elf-gcc -Wall -nostdlib -nostartfiles -ffreestandi
阅读全文
摘要:重点结构体学习 struct task_struct { struct thread_info thread_info; void* stack; /* CPU-specific state of this task: */ struct thread_struct thread; } 上次在学th
阅读全文
摘要:1、理解整个中断/系统调用流程的关键是kernel_entry和kernel_exit,也就是如何保存现场,并且恢复现场的。 我们先来看下armv8的寄存器,PLR(X30)无论是用户态还是内核态都用这个寄存器来存储程序的返回值。 sp_el0,sp_el1分别是有用户态和内核态的堆栈。 ELR_E
阅读全文
摘要:aarch64系统级体系架构之异常级别 1.简述 2.树莓派启动深度解析 3.不同异常级别需要注意的问题 1.简述 系统的异常级别对于arm芯片来说非常的重要,对于操作系统层面上来说,理解芯片的体系架构,将很容易的进入状态,随心所欲的去玩转芯片,对于做应用来说,熟悉芯片的体系架构,可以解决非常棘手的
阅读全文
摘要:自旋锁 + dis local cpu preemt + dis local cpu interrupt 在linux/spinlock.h中定义了spinlock操作的API。 spinlock的思想就是在SMP环境中,保护共享的数据结构;也就是CPU-A正在访问(读写)共享数据的期间,其他CPU
阅读全文
摘要:FreeRTOS任务代码中临界段的进入和退出主要是通过操作寄存器basepri实现的。进入临界段前操作寄存器basepri关闭了所有小于等于宏定义configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY所定义的中断优先级,这样临界段代码就不会被中断干扰到,而且实现任务
阅读全文
摘要:tos_knl_irq_enter和tos_knl_irq_leave __API__ void tos_knl_irq_enter(void) { if (!tos_knl_is_running()) { return; } if (unlikely(k_irq_nest_cnt >= K_NES
阅读全文
摘要:中断寄存器 1)ISER[8](Interrupt Set-Enable Registers):中断使能寄存器--void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);。其 中断使能寄存器共有8个,ISER[0]设置0~31号中断的使能,ISER[1]设
阅读全文
摘要:Cortex-M3/4 一些调试技巧 今天主要总结下这段时间在没有 调试器 情况下,解决 bug 的一些辅助调试手段。 在没有 调试器 的情况下,进行代码调试的手段就只有 log 大法,为了能够尽可能详细地输出有用的调试信息,往往我们需要将 调用栈 、R0- R15 寄存器、SCB、中断状态、线程状
阅读全文
摘要:为了防止死锁,spinlock需要关中断和禁止抢占 场景分析 对于spin lock,其保护的资源可能来自多个CPU CORE上的进程上下文和中断上下文的中的访问,其中,进程上下文包括:用户进程通过系统调用访问,内核线程直接访问,来自workqueue中work function的访问(本质上也是内
阅读全文
摘要:attribute有属性的含义,一般出现在代码中是用来定义“编译属性”的,当我们需要将C语言代码中的某个部分编译后链接到某个特定的段时,就需要在这个部分前面加上__attribute__((section(段名))),例如在代码中使用了__attribute__ ((section(".isr_ve
阅读全文
摘要:stm32专题三十八:在SRAM中调试代码 1、启动文件简介 启动文件由汇编编写,是系统上电复位后第一个执行的程序。主要做了以下工作: (1)初始化堆栈指针 MSP=_initial_sp (2)初始化 PC 指针=Reset_Handler (3)初始化中断向量表 (4)配置系统时钟 (5)调用
阅读全文
摘要:先了解下如何使用PendSV异常。(为何要使用PendSV而不是其他的异常,请参考《cortex-M3权威指南》) PendSV异常 PendSV,即可悬起的系统调用,OS可以利用它缓期执行一个异常,直到其它重要的任务完成后才执行操作。触发PendSV只需往NVIC的PendSV悬起寄存器的第2
阅读全文
摘要:简介 每个进程中访问临界资源的那段代码称为临界区(Critical Section) (临界资源是一次仅允许一个进程使用的共享资源)。每次只准许一个进程进入临界区,进入后不允许其他进程进入。不论是硬件临界资源,还是软件临界资源,多个进程必须互斥地对它进行访问。多个进程中涉及到同一个临界资源的临界区称
阅读全文
摘要:[root@bogon gcc-arm-embedded]# yum install gcc-arm-linux-gnu Loaded plugins: fastestmirror, langpacks Repository epel is listed more than once in the
阅读全文