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 ...
随机推荐
- android GestureDetector 手势的判断
import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.Ges ...
- 前端 HTML基础
前端三大利器概述 学习前端,不得不学习前端中的三大利器:html + css + javascript.那么这三个组件分别起到什么作用呢?以人体为例,单单具有html属性的人,只是一个裸体的人偶(理解 ...
- Web文件管理:elFinder.Net(支持FTP)
elFinder 是一个基于 Web 的文件管理器,灵感来自 Mac OS X 的 Finder 程序. elFinder.Net是.Net版本的一个Demo,使用ASP.NET MVC 4集成,可以 ...
- C#实现测量程序运行时间及cpu使用时间
private void ShowRunTime() { TimeSpan ts1 = Process.GetCurrentProcess().TotalProcessorTime; Stopwatc ...
- csv 导入到 access中去
Csv中有500万数据,导入到Access中去,每6万条数据为1Table 先是参照着http://support.microsoft.com/kb/257819/zh-cn来写 1.找不到可安装的 ...
- AngularJs练习Demo19 Resource
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport&quo ...
- Swift 语言函数
import Foundation // 函数声明于实现 func sayHello(name){ print("Hello \(name)") } // 函数调用 sayHell ...
- 安全性良好的operator=操作,和新的new方法(针对深度复制的情况)
class B { }; class A { public: A& operator=(const A& a) { B* temp = b; //这里解决重复赋值的方法是用temp指向 ...
- CentOS 7 之找回失落的ifconfig
自5号凌晨安装完centos7 minimal之后,一直没有机会时间(懒惰)来玩玩这个,实在惭愧,今天是周六,天下着小雨,所以收拾一下心情来学学一下这个系统: 开机登陆进去,想看看ip多少,于是很自然 ...
- javascript版QQ在线聊天挂件
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...