正点原子例程:精英板例10-2 UCOSIII使用信号量访问共享资源区
IAR版本:IAR 6.30
- 保留例程中以下文件夹
- USER文件夹里保留以下文件
3.用IAR的启动文件替换
4.建立IAR工程
5.建立组并添加文件,添加时有的要选IAR文件夹下的
6.设置工作路径和宏定义
6.选择MCU型号
7.其他设置
void WFI_SET(void)
{
__ASM volatile("wfi");
}
//关闭所有中断
void INTX_DISABLE(void)
{
__ASM volatile("cpsid i");
}
//开启所有中断
void INTX_ENABLE(void)
{
__ASM volatile("cpsie i");
}
//设置栈顶地址
//addr:栈顶地址
__asm void MSR_MSP(u32 addr)
{
MSR MSP, r0 //set Main Stack value
BX r14
}
将sys.c中的上面代码替换为下面的
void WFI_SET(void)
{
asm("WFI");
}
//关闭所有中断
void INTX_DISABLE(void)
{
asm("CPSID I");
asm("BX LR");
}
//开启所有中断
void INTX_ENABLE(void)
{
asm("CPSIE I");
asm("BX LR");
}
//设置栈顶地址
//addr:栈顶地址
void MSR_MSP(u32 addr)
{
asm("MSR MSP, r0"); //set Main Stack value
asm("BX r14");
}
//标准库需要的支持函数
struct __FILE
{
int handle;
};
FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
_sys_exit(int x)
{
x = x;
}
将USART.C中的上述代码替换为下面的
//标准库需要的支持函数
//struct __FILE
//{
// int handle;
//
//};
FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
void _sys_exit(int x)
{
x = x;
}
10.将os_cpu.h中的void OS_CPU_PendSVHandler (void);改为void PendSV_Handler (void);
将os_cpu_a.asm中的两个OS_CPU_PendSVHandler,改为PendSV_Handler
11.补充:SysTick中断,UCOSIII中用的void OS_CPU_SysTickHandler (void),正点原子例程中用的void SysTick_Handler(void),如果要用官方的,就要把启动文件中的SysTick_Handler,改为OS_CPU_SysTickHandler 。