core_cm3文件函数一览
|
1 |
#define OS_ENTER_CRITICAL()
__asm( "CPSID I") #define OS_EXIT_CRITICAL() __asm( "CPSIE I") |
|
1 |
__asm
{ //原汁原味的汇编语句 } |
不用,编译器帮我们做了。
|
1 |
__asm uint32_t __get_PSP(
void) { mrs r0, psp bx lr } |
bx lr显式返回,我之前就忘了返回,然后就HardFault_Handler了。
|
1 |
/* define compiler specific symbols */
#if defined ( __CC_ARM ) #define __ASM __asm /*!< asm keyword for ARM Compiler */ #define __INLINE __inline /*!< inline keyword for ARM Compiler */ #elif defined ( __ICCARM__ ) #elif defined ( __GNUC__ ) #elif defined ( __TASKING__ ) #endif |
TASKING Compiler
(
Embedded software development tools
)?
|
1 |
/* ################### Compiler specific Intrinsics ########################### */ #if defined ( __CC_ARM ) #elif (defined (__ICCARM__)) #elif (defined (__GNUC__)) #elif (defined (__TASKING__)) /* #endif |
/* ARM armcc specific functions */讨论下。
|
1 |
/**
* @brief Return the Process Stack Pointer * * @return ProcessStackPointer * * Return the actual process stack pointer */ __ASM uint32_t __get_PSP( void) { mrs r0, psp bx lr } /** |
OSStartHighRdy
|
1 |
;定义几个常量,类似C语言中的#define预处理指令。
NVIC_INT_CTRL EQU 0xE000ED04 ; 中断控制寄存器 NVIC_SYSPRI14 EQU 0xE000ED22 ; PendSV优先级寄存器的地址 NVIC_PENDSV_PRI EQU 0x000000FF ; PendSV中断的优先级为255(最低) NVIC_PENDSVSET EQU 0x10000000 ; 触发软件中断的值,位28为1. ;******************************************************************************************************** ; START MULTITASKING ; void OSStartHighRdy( void) ; ; Note(s) : ) This function triggers a PendSV exception (essentially, causes a context switch) to cause ; the first task to start. ; ; ) OSStartHighRdy() MUST: ; a) Setup PendSV exception priority to lowest; ; b) Set initial PSP to , to tell context switcher this is first run; ; c) Set the main stack to OSRunning ; d) Trigger PendSV exception; ; e) Enable interrupts (tasks will run with interrupts enabled). ;******************************************************************************************************** OSStartHighRdy ;设置PendSV中断的优先级 LDR R4, =NVIC_SYSPRI14 ; set the PendSV exception priority LDR R5, =NVIC_PENDSV_PRI STR R5, [R4] ;设置PSP为0 MOV R4, #0 ; set the PSP to for initial context switch call MSR PSP, R4 ;设置OSRunning为TRUE LDR R4, =OSRunning ; OSRunning = TRUE MOV R5, #1 STRB R5, [R4] ;触发PendSV中断 CPSIE I ;enable interrupts at processor level |
省掉第一次上下文切换时候的R4-R11的入栈保护,仅此而已,这是事实没错,但是这个考虑会增加代码的编写,体现在此处和PendSV中断函数的编写上,不过这也表明作者的多OS过程的认识,思维的严谨。关于第5点,显示声明中断要开着,没有也没关系,因为本来中断就是开着的,只要你不蛋疼的去把它关掉。
|
1 |
#define NVIC_INT_CTRL *((OS_CPU_SR *)0xE000ED04)
//中断控制寄存器ICSR #define NVIC_PENDSVSET 0x10000000 //触发软件中断的值,位28为1. #define OS_TASK_SW() NVIC_INT_CTRL = NVIC_PENDSVSET #define OSIntCtxSw() NVIC_INT_CTRL = NVIC_PENDSVSET #define OS_ENTER_CRITICAL() #define NVIC_SYSPRI14 *((OS_CPU_SR *)0xE000ED22) void OSStartHighRdy( |
放在os_cpu_c.c文件中,当然一般的宏定义还是会放在头文件oc_cpu.h中的。
PSP,这也是我之前没注意的地方,
扯远了,看下一个:
|
1 |
/**
* @brief Return the Main Stack Pointer * * @return Main Stack Pointer * * Return the current value of the MSP (main stack pointer) * Cortex processor register */ __ASM uint32_t __get_MSP( void) { mrs r0, msp bx lr } /** |
|
1 |
/**
* @brief Reverse byte order in unsigned short value * * @param value value to reverse * @return reversed value * * Reverse byte order in unsigned short value */ __ASM uint32_t __REV16(uint16_t value) { rev16 r0, r0 bx lr } /** |
|
1 |
/**
* @brief Remove the exclusive lock created by ldrex * * Removes the exclusive lock which is created by ldrex. */ __ASM void __CLREX( void) { clrex } /** /** /** /** /** /** /** /** |
core_cm3文件函数一览的更多相关文章
- PHP写文件函数
/** * 写文件函数 * * @param string $filename 文件名 * @param string $text 要写入的文本字符串 * @param string $openmod ...
- PHP输出XML文件函数
PHP输出XML文件函数 function xml_out($content, $charset = 'utf-8') { @header("Expires: -1"); @hea ...
- PHP多重判断删除文件函数
<?function delete_file($file) { if (file_exists($file)) { $delete = chmod ($file, ...
- PHP常用文件函数和目录函数整理
一.常用文件函数库 1.basename(); -- 返回路径中的文件名部分. string basename ( string $path [, string $suffix ] ) //给出一个包 ...
- BCB/Delphi中常用的VCL函数说明(文件函数)
--------------------文件操作--------------------函数名称:ChangeFileExt函数说明:更改指定文件的扩展名,函数原型如下:AnsiString __fa ...
- 通过ajax前端后台交互/登录页和注册页前端后台交互详解/前端后台交互基础应用/几个后台函数的基础应用/php文件函数基础应用/php字符传函数基础应用/php数组函数基础应用
前 言 PHP 学习了好久的PHP,今天做一个可以后台交互的登录页和注册页,没做什么判断,简单的了解一下. 具体的内容分析如下: ① PHP中的数据传输-->>由注册页传输 ...
- PHP 文件锁和常用文件函数
文件锁 bool flock ( int handle, int operation [, int &wouldblock] );flock() 操作的 handle 必须是一个已经打开的文件 ...
- php总结7——文件函数库、序列化数据、文件包含
7.1 文件函数库 php用来操作文件的 1) fopen 代开文件或URL 格式:resource fopen(string $filename, string $mode) 'r' 只读方式 ...
- PHP文件函数
PHP文件函数 函数 描述 PHPbasename() 返回路径中的文件名部分. 3chgrp() 改变文件组. 3chmod() 改变文件模式. 3chown() 改变文件所有者. 3clearst ...
随机推荐
- Java基础知识强化58:经典排序之二叉树排序(BinaryTreeSort)
1. 二叉树排序 二叉树排序的描述也是一个递归的描述, 所以二叉树排序的构造自然也用递归的: 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它 ...
- IIS7的安装详解
IIS7安装流程规范 1, IIS常用的功能模块介绍: 1) 静态内容:可发布静态 Web 文件格式,比如 HTML 页面和图像文件. 2) 默认文档:允许您配置当 ...
- rpm软件包类型
rpm软件包 在linux世界里有两种流行的包管理方式,分别是redhat系的rpm和debian系的deb.其中rpm是RedHat Package Manager(RedHat软件包管理工具)的简 ...
- 网页CSS1
样式的属性 1,背景与前景 background-color: //背景的颜色 background-image:url //背景图片 background-attachment:fixed; //背 ...
- NHibernate之映射文件配置说明(转载1)
源博客:http://www.cnblogs.com/kissdodog/archive/2013/02/21/2919886.html 1. hibernate-mapping 这个元素包括以下可选 ...
- .NET中使用GridView控件输入数据时出现“ Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index"的问题
在.NET中使用GridView控件的在线编辑数据时,出现了“ Index was out of range. Must be non-negative and less than the size ...
- xcode下载方式
1.去AppStore下载 对于Xcode老是在AppStore升级失败,而且下载慢,可取找到了这个--> 官方 Xcode .dmg 文件下载链接:超级传送门 2.开发者中心官网下载 可参考这 ...
- Ajax从服务器端获取数据---原生态Ajax
写在前面的话 Ajax从服务器获取的数据都是字符串,但是通过不同的解析,可以解析为XML或JSON来进行应用. 一般来说.使用XML格式的数据比较通用,但是服务器和客户端解析起来都比较复杂一些;而使用 ...
- js带箭头左右翻动控制
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- (二)HTML5 - Web SQL 本地数据库
简介 WEB SQL Database即本地的SQLite数据库,使用的方式和方法和SQLite基本相同 判断浏览器是否支持 if (!window.openDatabase) { alert('Da ...