硬件平台:STM32F429-DISCOVERY
软件平台:MDK510
Author :
ucos-ii :Version : V2.91
修改说明:
1. 在stm32f4xx.h中,Uncomment the #define STM32F427_437xx ;
Uncomment the #define USE_STDPERIPH_DRIVER ;
modify:HSE_VALUE to 8Mhz
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
2. 在system_stm32f4xx.c中:
#define PLL_M 8
#if defined (STM32F427_437xx) || defined (STM32F429_439xx)
uint32_t SystemCoreClock = 168000000;
#endif /* STM32F427_437x || STM32F429_439xx */
ucos-ii代码修改:
1.OS_CPU.H
访问临界代码段的方法:
#define OS_CRITICAL_METHOD 3
#if OS_CRITICAL_METHOD == 3
#define OS_ENTER_CRITICAL() {cpu_sr = OS_CPU_SR_Save();}
#define OS_EXIT_CRITICAL() {OS_CPU_SR_Restore(cpu_sr);}
#endif
以上是相关的程序片段。如果应用程序中用了这两个宏,那么要定义一个局部变量并初始化
为0 ,如OS_CPU_SR cpu_sr = 0;
在中断服务函数中:
void SysTick_Handler(void)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr = 0;
#endif
OS_ENTER_CRITICAL(); /* Tell uC/OS-II that we are starting an ISR */
OSIntNesting++;
OS_EXIT_CRITICAL();
OSTimeTick(); /* Call uC/OS-II's OSTimeTick() */
OSIntExit(); /* Tell uC/OS-II that we are leaving the ISR */
}
在os_cpu_c中,systick初始化:
void OS_CPU_SysTickInit (void)
{
INT32U cnts;
RCC_ClocksTypeDef rcc_clocks;
RCC_GetClocksFreq(&rcc_clocks); //获得系统时钟频率。
cnts = rcc_clocks.HCLK_Frequency / OS_TICKS_PER_SEC;
SysTick_Config(cnts);
}
1.本例程主要实现了二值信号量和互斥信号的优先级反转?
main.c文件里1-8注释说明了互斥执行顺序。由用户按键启动此过程。任务0、1、2。
2.加入对列的操作。其实队列Q就像是多个邮箱Mbox的组合。任务3。
加入了事件标志Flag,满足两个事件后,挂起的任务解锁。存储块的创建,获取,释放操作。任务4、5。
|