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 ...
随机推荐
- 十二.200多万元得到的创业教训--app名字是关键
摘要:当完毕了一个app后,就要须要上应用市场,以下讲一下起名和上应用市场的一些技巧. 健生干货分享:第12篇 1.必须是先上app store,再上其它应用市场 为啥要这样做?由于app store ...
- CSS Hack是什么意思
CSS hack由于不同的浏览器,比如Internet Explorer 6,Internet Explorer 7,Mozilla Firefox等,对CSS的解析认识不一样,因此会导致生成的页面效 ...
- spring-security 登陆认证之初次探究
首先,希望还对 spring-security框架完全不懂的新手 下载下Git源码. 引入到项目中.这个短文就是边看源码边聊的.也会启动下项目验证自己的推想. 一.登陆认证的登陆配置项 <for ...
- C3P0连接池配置方式
c3p0的配置方式分为三种,分别是 1.setters一个个地设置各个配置项 2.类路径下提供一个c3p0.properties文件 3.类路径下提供一个c3p0-config.xml文件 1.set ...
- Objective-C 引用计数:不讲用法,只说原理
本文所使用的源码为 objc4-647 和 CF-1153.18 实际上这是我本周实习周报的一部分,写的比较仓促,如有差错还请多多指正. 不讲用法,只说原理. 引用计数如何存储 有些对象如果支持使用 ...
- iOS_SN_CocoaPods使用详细说明( 转)
一.概要 iOS开发时,项目中会引用许多第三方库,CocoaPods(https://github.com/CocoaPods/CocoaPods)可以用来方便的统一管理这些第三方库. 二.安装 由于 ...
- 设置Chrome和IE搜索栏的默认搜索引擎
由于本人比较喜欢用Google香港作为自己的默认搜索引擎,Chrome里面可以轻松设置. ======================== Chrome ======================= ...
- Codeforces Round #276 (Div. 1)
a. 给俩数, 求他俩之间二进制数中1最多的,有多个输出最小的: 贪心,从小到大加能加就加,最后可能碰到一个不能加了但是当前数比l小,那么就加上这个数,然后从大到小,能减就减,见到符合条件 #incl ...
- 兼容IE的渐变
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=, startColorstr=#1471da, endColorstr ...
- Ubuntu 14.04 标题栏实时显示上下行网速、CPU及内存使用情况
首先当然是用wget下载indicator-sysmonitor,终端执行命令:wget -c https://launchpad.net/indicator-sysmonitor/trunk/4.0 ...