- 博客(186)
- 资源 (14)
- 问答 (1)
- 收藏
- 关注
原创 NorFlash 知识点总结
NorFlash(也称为 NOR 型闪存)是一种非易失性存储器,常用于嵌入式系统和存储设备中。NorFlash 是一种闪存类型,可以用于存储程序代码、固件、操作系统以及其他数据。与 NAND Flash 相比,NorFlash 具有较低的存储密度和较高的成本,但具有较快的读取速度、较低的读取延迟和较好的随机访问性能。这使得 NorFlash 适合用作执行代码和存储需要低延迟和高可靠性的关键数据的应用程序。它在嵌入式系统中被广泛应用于引导存储器和关键数据存储,为设备的启动和运行提供了可靠的解决方案。
2023-12-14 13:41:09
5516
原创 SylixOS 自旋锁机制
从上节可以看出不同的自旋锁接口底层都会执行 ARCH 层接口 archSpinLock()、archSpinUnlock(),因为这部分代码和具体的硬件架构有关。这是典型的 ticket spinlock,即引入了排队机制,以 FIFO 的顺序处理申请者。加锁过程主要是将 ticket 值加一,然后通过 now 和 ticket 的值判断当前是否排到自己,若没有排到则等待。5、不锁定中断, 同时允许加锁后调用可能产生阻塞的操作。2、忽略中断版本(必须在中断关闭的状态下被调用)6、自旋锁原始加锁操作。
2023-04-06 18:37:19
523
原创 基于 ACOEGC_T3(PF) 搭建 JLink 调试环境
3、在 JLink 安装目录下创建目录:JLink_V645a\Devices\ALLWIN\T3,在目录中放入脚本文件 Core0.JLinkScript、Core1.JLinkScript、Core2.JLinkScript、Core3.JLinkScript(见附件);5、使用同样的方式启动 core2 和 core3,4 个核都启动后可以通过 Debug 窗口切换调试对象,从而实现 4 核同时调试。1、这里仅介绍 4 核同时调试的情况,实际使用中可根据需要调试指定核即可;...
2022-08-30 18:25:16
1239
1
原创 VMware 中搭建 SylixOS 环境
重启即可,注意这里创建了两个虚拟硬盘,一个作为启动盘,一个作为文件系统盘。这样做是因为如果将一个虚拟硬盘分为两个区,则系统无法被正常引导,原因暂时还未知。插入U盘启动盘,点击“编辑虚拟机设置”,先改内存为1G。再次使用”打开电源时进入固件“的方式启动虚拟机,将100M分区作为第一启动项。制作成功后插入U盘。点击确定创建虚拟机,使用”打开电源时进入固件“的方式启动虚拟机。修改启动项到U盘启动,启动后进入U盘中的SylixOS。关闭虚拟机,删除虚拟机的U盘分区。...
2022-07-22 10:28:33
710
原创 SylixOS TCP 数据段发送流程简述
tcp_output_segment()--->ip_output_if()--->ip4_output_if()--->ip4_output_if_opt_src()(大部分IP层协议内容在这里完成)--->ethernet_output()--->netdev_netif_linkoutput()--->NETDEV_TRANSMIT()3)调用tcp_output()用于发送TCP段。1)调用write发送TCP数据。...
2022-07-18 17:16:24
648
原创 SylixOS 进程资源回收机制
SylixOS 中使用 t_reclaim 线程回收进程资源。t_reclaim 线程在系统启动时创建,优先级较低,为 253。线程执行流程非常简单,即接收消息队列值并执行 vprocReclaim() 进行回收,消息队列数据位待回收的线程控制块指针。如下图所示。 vprocReclaim() 执行流程如下:1)等待所有线程被彻底删除;2)回收线程全部资源(打开的文件、信号量、时间、定时器等);3)释放模块资源;4)回收进程控制块资源 通过调用 __resReclaimReq()
2022-07-13 16:42:54
245
原创 基于 QEMUv8 搭建 OP-TEE 开发环境
开发环境:Ubuntu 22.04 desktop 虚拟机1、环境需求$ sudo dpkg --add-architecture i386 $ sudo apt-get update$ sudo apt-get install android-tools-adb android-tools-fastboot autoconf automake bc bison build-essential ccache codespell cpio cscope curl device-tree-compiler ex
2022-07-01 18:13:47
1567
原创 SylixOS TCP 数据段接收流程简述
1、数据包最初由网卡驱动中断接收,通过调用 tcpip_input() 送入 LwIP 协议栈;2、在 tcpip_inpkt() 中将 ip_input() 通过 mbox (本质为消息队列) 投递至线程 “t_netproto”,并在线程中执行 ip_input();3、在 ip_input() 中针对 IPv4 报文调用 ip4_input() 进行处理。针对 TCP 报文,tcp_input() 处理了基本的协议规则;4、针对有效数据包,通过调用 TCP_EVENT_RECV(即调用 tcp_rec
2022-06-17 15:19:38
372
原创 MS-RTOS 内核模块动态装载
1、MS-RTOS 内核模块动态装载简介 MS-RTOS 支持内核模块动态装载功能。用户可以根据需要,在不需要对内核重新编译的情况下,使用 insmod、rmmod 等命令动态地将模块加入或移出内核。这样可以提高 MS-RTOS 的灵活性,当需要对模块进行修改时,不用对整个内核编译而只需要对模块进行编程即可。模块可以不依赖于某个固定的硬件平台,当模块被加载入内核后,就相当于静态链接到了内核中,内核和模块的地址空间可以相互访问。2、BSP 添加内核模块动态装载功能1)BASE 构建时需要添加 `
2022-06-17 10:33:04
651
原创 SylixOS ECS 启动过程
在 SylixOS ECS 中可以通过 SHELL 命令 “ecs“ 和 ”srtp“ 创建一个新的容器环境,其中 ”ecs“ 命令本质就是使用 ”srtp"。1、新容器环境的创建是在 SHELL 命令背景线程中创建的,注册命令 "srtp" 时会加上创建新容器标志 LW_OPTION_KEYWORD_NEW_CONTAINER,如下图所示:2、SylixOS 处理 shell 命令的调用链:API_TShellExec() ---> __tshellExec() ---> __tshellBgCreate
2022-06-01 11:47:20
293
1
原创 bootloader 编译为 Debug 无法引导 MS-RTOS 问题
一、问题描述在智芯 SCM402F 芯片上,bootloader 如果按照 Debug 模式编译则无法成功引导 MS-RTOS,反之按照 Release 模式编译则可以正常引导。引导代码如下所示:static void ms_boot_os(ms_addr_t *addr){ ms_func_t func = (ms_func_t)addr[1U]; ms_printk(MS_PK_NOTICE, "Start MS-RTOS...\n"); ...
2022-05-30 20:09:54
897
2
原创 SylixOS 线程、进程退出流程
SylixOS 中进程、线程可能由于 ”自然退出“、”接收 SIGKILL 信号(9 号)“、”接收 SIGCNCL 信号(16 号)“、”接收 SIGTERM 信号(15 号)“、“执行 exit()”、“执行 pthread_exit()” 等原因退出。下面以此简单描述一下各种情况下的退出流程:1、自然退出自然退出意思是指进程 main 函数执行到结束(或执行到 return)导致的进程退出。当进程 ”自然退出“,即在 API_ModuleRunEx() 中从...
2022-05-07 17:54:05
735
原创 SylixOS 信号发送、接收机制
SylixOS 可以通过 kill() 或 sigqueue() 向线程发送信号(向进程发送信号相当于发送给进程的主线程)。kill() 与 sigqueue() 的区别主要在发送信号的类型不一样,kill() 发送非排队信号,sigqueue() 发送排队信号。kill() 中首先会调用 _doKill() 接口,在 _doKill() 中构建信号信息结构 struct siginfo 和 LW_CLASS_SIGPEND 结构,这里主要是保存信号值、信号产生源、发送信...
2022-05-05 20:04:04
325
原创 Watchdog 芯片 ADM6316 介绍
ADM6316 是一款硬件 Watchdog 芯片,同系列产品包括ADM6316、ADM6317、ADM6318、ADM6319、ADM6320、ADM6321、ADM6322。芯片有 5 个引脚,如下图所示。VCC :VCCGND : GNDRESET :输出复位信号复位控制器MR:低电平为手动复位模式,1us 的低电平会强制芯片生成一个复位信号WDI:如果 WDI 引脚保持低电平或者高电平一段时间,直到 Watchdog 定时器超时,则会导致芯...
2022-04-14 14:34:59
1855
2
原创 Cortex M4 SysTick 详解
Cortex M4 提供了 SysTick 功能,SysTick 是一个 24bits 定时器,可以通过简单的编程提供一个周期中断,常用于作为操作系统的”心跳“。一、寄存器1、STK_CTRL2、STK_LOAD3、STK_VAL二、时钟源SysTick 可选择两种时钟源,通过寄存器 STK_CTRL 的 CLKSOURCE 位来选择,‘0’ 表示时钟源为 AHB(HCLK)的 1/8,'1' 表示时钟源为 AHB(HCLK)。三、重装载与中断通过寄存器.
2022-02-15 17:46:13
2475
原创 GIC 高优先级中断无法抢占低优先级中断问题分析要点
SylixOS 支持中断抢占,但 BSP 中需要进行相应的配置,如果遇到高优先级中断无法抢占低优先级中断的情况基本可以按照以下几点进行分析:以 T3 为例,中断控制器为 GIC 2.0:1、高优先级中断的优先级需要高于 GICC_PMR 寄存器,这是每个 interface 的优先级阈值寄存器,优先级低于此值则此核无法接收到中断信号;2、触发的中断的可抢占优先级(主优先级)需要高于正在执行的中断的可抢占优先级(主优先级)。GIC 控制器优先级是一个 8 位值,共有 255 个优先级,可.
2022-02-10 20:47:26
1426
原创 GIC2.0 发送核间中断
GIC2.0 通过操作 GICD_SGIR(0xf00)寄存器发送软中断TargetListFilter 位设置 0 表示转发中断到 CPUTargetList 位所指定的核上:SGIINTID 位设置需要发送的中断号 0-15。因此发送软中断接口实现如下:static VOID armGicV1RaiseSoftIrq (UINT64 ullCpuId, ULONG ulVector){ ULONG ulBase; UINT32 ...
2022-02-10 20:44:43
404
原创 STM32 调整重启电压阈值 BOR
STM32 支持调整重启电压阈值,即 BOR。重启电压阈值指的是,如果电源电压低于此阈值,则 MCU 进入复位状态。有三个级别可以设置,level 1、level 2、level 3。以 STM32F412RE 为例,level 1 对应 2.13V、level 2 对应 2.44V、level 3 对应 2.75V。此设置配置在 MCU 内部 FLASH 中的选项字中,地址为 0x1FFFC000: 我们可以通过 FLASH 选项字控制寄存器 F...
2022-01-15 17:16:50
5266
原创 C 语言静态库的一些特性总结
一、静态库按 .o 为最小单位连接到程序,如果某个 .o 中的所有符号都没有被引入则这个 .o 不会被连接,反之 .o 中只要有一个符号被引入则链接整个 .o 。可以做一个例子来验证一下。构建一个静态库,包含两个 .c 文件,libtest.c 和 libtest2.c。libtest.c 中包含三个函数:lib_func1()、lib_func2()、lib_func3()。#include <stdio.h>void lib_func1 (void){ ...
2022-01-14 19:59:31
405
原创 SylixOS x86 HPET 定时器驱动
HPET(High Precision Event Timer) 俗称高精度定时器,最低时钟频率为10MHZ,而且定义了比较严格的精确度(间隔 >= 1 毫秒的允许 +-0.05% 的误差,间隔 <=100 微妙的允许 +-0.2% 的误差)。x86 架构中一般支持 HPET 定时器。在 HPET 体系结构中规定 32 个定时器组成一个定时器块,最多可支持 8 个块,也就是 256 个定时器。实际设备中可使用的定时器数量可以从相关寄存器中查询。每个定时器均可以单独配置成一个中断。...
2022-01-14 17:57:18
424
原创 SylixOS 绑核操作
指定线程在某些 CPU 运行,SylixOS 中只能指定一个 CPULW_API int pthread_setaffinity_np(pthread_t thread, size_t setsize, const cpu_set_t *set); /* * 设置线程CPU亲和性 */ cpu_set_t cpuset; CPU_ZERO(&cpuset); CPU_SET(1, &cpuset); iRet = pthre
2022-01-14 17:02:15
490
原创 SylixOS CPU 利用率统计机制
SylixOS CPU 利用率统计基于 TCB 中的两个变量,TCB_ulCPUUsageTicks 和 TCB_ulCPUUsageKernelTicks。用于记录规定时间内的 CPU 使用 TICK 计数与 Kernel 使用计数。 top 命令首先清空所有的 TCB 的计数统计,然后开启统计数据更新,等待规定时间后(默认 1s)关闭统计数据更新。此时 TCB_ulCPUUsageTicks 与 TCB_ulCPUUsageKernelTicks 变量中就存放了这段时间内...
2022-01-14 17:00:18
332
原创 SylixOS SMP 中断实时性调优总结
设备使用全志 T3,搭载 SylixOS SMP。在使用过程中存在中断响应不及时问题。具体表现为周期 833us 的外部中断偶发性出现周期超过 900us,即中断响应不及时。中断响应不及时可能存在如下原因:1)中断碰撞,在触发核上存在其他中断正在执行,且占用时长较长;2)关中断时间过长,在内核调度过程中存在大量关中断自旋锁操作,如果多个锁碰撞就可能导致关中断时间过长;下面将针对如上原因罗列常用解决方案:1)提高中断优先级,开启中断抢占;2)中断绑核,且独占一个核资...
2022-01-14 16:57:49
522
原创 __attribute__((constructor)) 与__attribute__((destructor)) 的用法
__attribute__((constructor)) 与 __attribute__((destructor)) 是 GCC 中用来修饰函数的,constructor 可以使被修饰的函数在 main() 执行前被调用,destructor 可以使被修饰的函数在 main() 执行结束或 exit() 调用结束后被执行。__attribute__((constructor)) void constructor_func() { // ...}__attribute__(...
2022-01-14 16:55:54
2243
原创 SylixOS x86 HPET 定时器驱动
HPET(High Precision Event Timer) 俗称高精度定时器,最低时钟频率为10MHZ,而且定义了比较严格的精确度(间隔 >= 1 毫秒的允许 +-0.05% 的误差,间隔 <=100 微妙的允许 +-0.2% 的误差)。x86 架构中一般支持 HPET 定时器。在 HPET 体系结构中规定 32 个定时器组成一个定时器块,最多可支持 8 个块,也就是 256 个定时器。实际设备中可使用的定时器数量可以从相关寄存器中查询。每个定时器均可以单独配置成一个中断。在 x86
2022-01-06 17:37:25
789
原创 SylixOS 不同容器(ECS)间使用信号量同步方案
1、概述 在 SylixOS 容器版本中由于容器间存在命名空间隔离的问题因此无法直接使用信号量进行同步操作,这在某些场合下可能无法完成实际需求,如共享内存通信时。本文介绍一种在容器间实现信号量同步功能的解决方案。2、解决方案 此解决方案思路是在 SylixOS 标准信号量的基础上封装一层字符设备,在内核层创建信号量并提供相关接口使容器内的 APP 可以通过字符设备接口获取内核信号量句柄,再通过标准信号量 API 进行操作。实现不同容器间的 APP 同步操作。基本框架如下图...
2021-07-24 15:24:05
429
1
原创 SylixOS 下 openssh 使用
1、编译编译工程 openssh,部署生成的相关文件(依赖 openssl);2、修改 passwd修改 /etc/passwd,在文件末尾添加如下内容:sshd:x:74:74:Privilege-separate::/var/empty/sshd:/sbin/nologin3、生成秘钥文件# cd /apps/openssh79P/# ./ssh-keygen -A执行结束后生成如下文件注意生成的文件的权限,这里需要使用 TpsFs 文件系统,若使用 FatF
2021-07-12 20:53:08
440
5
原创 SylixOS 防火墙相关命令使用
1、添加防火墙规则格式:npfruleadd [netifname] [rule] [input | output] [allow | deny] [args...]eg: npfruleadd en1 mac input deny 11:22:33:44:55:66 npfruleadd en1 ip input allow 192.168.0.5 192.168.0.10 npfruleadd lo0 udp input deny 0.0.0.0 255.255.255....
2021-07-10 10:57:56
374
原创 SylixOS 挂载 RAM 文件系统
mount -t ramfs 【空间大小(字节)】 【挂载位置】# mount -t ramfs 10000000 /mnt/ram注意:此空间从内核堆中分配,若需要较大的空间需要适当扩大内核堆空间。
2021-07-10 10:49:14
271
原创 SylixOS Module 中使用硬件浮点方式
1、在 BSP 中更改启动参数,打开内核FPU2、修改内核配置3、修改内核模块配置由于内核模块默认不能配置硬件浮点,因此首先需要将内核模块工程改为专家模式在mk文件的编译选项栏加入硬件浮点配置项,以T3为例(T3的FPU为VFPv4)...
2021-07-10 10:39:39
190
3
原创 SylixOS 中 free 命令含义
SylixOS 下 free 命令执行效果如下:heap show >> 部分显示 kernel 堆和 system 堆信息,一般二者合二为一显示为 “kersys"TOTAL 表示大小,即在调用 API_KernelStart() 接口时传入的 __heap_end 与 __heap_start 的差值(实际因为对齐会有一点偏差),如下图所示。USED 表示当前已使用的大小,MAX USED 表示曾经使用过的最大大小,SEGMENT 表示当前堆中的碎片块数,USED 表示当前已使用
2021-07-01 21:58:33
611
1
原创 SylixOS:T3 打包量产 IMG 文件手册
适用范围本文档主要介绍全志 T3 平台量产 SylixOS 系统的方法。区别于《AllWinnerT3量产使用手册.docx》,本文主要介绍如何生成可通过 Phoenixsuit 或 PhoenixCard 软件直接烧录的 img 文件。准备工作T3 平台设备,已在 EMMC 上固化 SylixOS、APP、运行环境,等待打包 USB 转串口设备一个 Ubuntu 虚拟机 T3 设备 lichee 开发环境概述整体打包流程大致由4步组成,如图 3.1所示。图 3.1 整体打包流程.
2021-06-01 13:51:02
1137
原创 SylixOS ROMFS 使用手册
适用范围本文档主要介绍基于 SylixOS 的 RomFs 的使用方法。准备工作SylixOS 硬件设备 BSP 源码 USB 转串口设备一个操作步骤在 BSP 中添加编译项 romfs.S;拷贝文件 romfs.S 到 BSP 源码 SylixOS\bsp 目录下,在 Makefile 中增加编译项,如图 3.1所示。图 3.1在 BSP 中修改文件系统挂载点,如图 3.2所示。图 3.2这里将 /bin/、/apps/、/lib/、/usr/ 挂载到只读文件系统中
2021-06-01 13:38:37
529
原创 libamp_virnetdrv 虚拟网卡在 T3 AMP 上的移植案例
libamp_virnetdrv 可以方便的移植到各种平台,为 AMP 架构提供简单、高效的核间通信机制。下面以 T3 AMP(SylixOS + SylixOS)为例介绍具体的移植过程。1、驱动支持虚拟网卡包含 libamp_virnetdrv与 libamp_virnetdrv_config 两个部分。T3 是 ARM 平台,因此首先拷贝 libamp_virnetdrv\src\demo\arm_aarch64 下的四个文件到 T3 每个系统的 BSP 目录 bspallwinnert3\Sy
2021-05-15 19:23:47
343
原创 keil5 Device Database 灰色问题
使用 keil5 安装 GD 软件包后打开工程依然无法搜索到对应的芯片型号(GD32F450)。The Project references device, files or libraries that are not installed. Download and install:但可以确认 GD 软件包已经正常安装,可以在 file ---> Device Database 中搜索到对应的型号(若此步未能搜索到则需要安装 GD pack 包,百度搜索即可)分析原因是用 k
2021-04-12 20:37:57
11760
4
原创 keil 调试模式下拷贝数据信息
keil调试下可以很轻松的查看数组内的数据,但确无法拷贝出来。这时可以通过keil的function editor功能,生成一个可以打印数组的命令即可。1、打开 Debug ---> function editor2、导入实现准备好的功能文件 a.ini,内容如下:FUNC void displayvalues(void) {int idx;exec("log > MyValues.log");for (idx = 0; idx < 128; idx++) {.
2020-07-10 15:44:17
4830
3
原创 STM32锁死解锁方法
STM32程序中如果设置相关引脚电平会导致jlink无法连接,此时STM32上电后执行程序操作IO管脚,jlink无法更新程序和调试。这是相当于STM32芯片被锁死。解锁方式如下:1、芯片断电,连接jlink线;2、将芯片复位脚接地;3、保持复位脚接地状态让芯片上电;4、点击jflash工具connect设备;5、在connect后立即将RST与GND断开;6、此时可以显示正常连接,使用jflash擦除芯片内部flash即可恢复芯片;...
2020-07-10 15:40:00
9266
原创 STM32 SPI DMA 与 I2C DMA 冲突
现象为直接操作I2C DMA模式读写EEPROM数据正常,一旦进行一次SPI1 DMA传输后,EEPROM读写失败,示波器查看没有I2C数据部分波形。分析发现EEPROM使用I2C3,I2C3的接收通道与SPI1的发送通道公用DMA1通道的通道3。但在DMA驱动中已加入互斥操作,逻辑上这样操作是没有问题的。解决:DMA通道是多个外设公用的,比如I2C3的接收与SPI1的发送公用DMA1_CH3。在每个外设中会有独立的DMA通道开关,需要使用是打开,使用结束后需要关闭,否则会影响其他外设。..
2020-07-10 15:38:57
2131
2
原创 【MPSoC ZCU102 BOOT.BIN文件制作】
1 说明本文介绍了通过Xilinx官方网站提供的Vivado、petalinux等工具制作官方开发板Xilinx MPSoC ZCU102启动文件BOOT.BIN的过程。此启动文件可通过SD启动方式被加载,最终引导启动u-boot。基本流程是首先通过Vivado生成ZCU102的硬件描述文件(2019版本中为xsa文件,之前版本为hdf文件),再由petalinux编译生成BOOT...
2019-12-18 16:23:32
2847
原创 【SylixOS RMS 调度】
RMS(Rate Monotonic Secheduling)是一种可以提供固定任务周期的调度系统。与普通的随机式的、不可预测的调度系统不同,RMS可以提供固定的、可设置的调度周期,且精度可达到纳秒级。多个RMS调度之间优先级按照周期越小优先级越高的原则。函数原型: sched_rms_init()为线程 thread 创建一个rms调度器,sched_rms_d...
2019-10-16 11:38:00
560
2
基于spi-flash的fatfs配置
2013-12-18
protues7.5教程与keil联调.zip
2011-06-12
c语言课程设计道路交通灯控制系统.zip
2011-06-12
c语言数据结构字符串模式匹配算法.zip
2011-06-12
c语言数据结构应用图的遍历.zip
2011-06-12
c语言程序设计停车场管理系统.zip
2011-06-12
c语言课程设计迷宫求解.zip
2011-06-11
c语言课程设计病房管理.zip
2011-06-11
在面试中遇到一个枚举类型相关问题
2015-06-11
TA创建的收藏夹 TA关注的收藏夹
TA关注的人