1 关闭中断
下面的程序 如何移植?
//--------------------------------------------------
//压入消息,带一个字节参数
//--------------------------------------------------
void Msg_PushByte(unsigned char mMsg,unsigned char mData)
{
B=IE;
EA=0;
InMsg_Push_Tail(mMsg);//消息字
InMsg_Push_Tail(1);//消息长度
InMsg_Push_Tail(mData);//参数
IE=B;
}
其中的 B=IE; EA=0;
以及 IE=B;是什么意思?
在 Cortex-M0中与其对应的指令是什么 ?
#define portDISABLE_INTERRUPTS() __disable_irq()
#define portENABLE_INTERRUPTS() __enable_irq()
对应:
__disable_irq() ----- cpsid i
__enable_irq() ----- cpsie i
100-uCOS-III-ST-STM32-003.pdf
2 memory.c 分配的内存 从哪里来 ?
从最后端 开始,往下面 开始分配 内存。
用法:
Cortex-M0 中 内存的使用方式:
#define SHARED_MEM_START_ADDR 0x20003060
unsigned char rcvData[256] __attribute__((at(SHARED_MEM_START_ADDR)));
指定地址,共享内存。
attribute at 应该是 keil 编译器的特殊指令。
__packed struct QueueBuffer
{
unsigned char *aBufferStart; //缓冲区起始点
unsigned char *aBufferEnd; //缓冲区结束点
unsigned char *pIn; //写指针
unsigned char *pOut; //读指针
unsigned char mCount; //缓冲区数据个数
};
别忘记 加上 __packed,否则可能出错
3 Cortex-M0 的 systick 定时器的运行模式
TRM_NUC130_NUC140(CN)_Series_SC_Rev2.02.pdf
ARM® Cortex™-M0 Technical Reference Manual
ARM® v6-M Architecture Reference Manual
Cortex-M0 包含系统定时器:SysTick。SysTick 提供一种简单的24位写清零、递减、自装载同时具有可灵活控制机制的计数器。该计数器可用作实时系统(RTOS) 的滴答定时器或一个简单的计数器。
当系统定时器使能后,将从SysTick 的当前值寄存器(SYST_CVR) 的值向下计数到0,并在下一个时钟周期,重新加载SysTick 重新加载值寄存器(SYST_RVR) 的值。当计数器减到0时,标志位COUNTFLAG置位,读COUNTFLAG 位使其清零。
复位后,SYST_CVR 的值未知。使能前,软件应该向寄存器写入值清零。这样确保定时器以SYST_RVR 的值计数,而非任意值。
若 SYST_RVR 为0,在重新加载后,定时器将保持当前值0。这个功能可以在计数器使能后用来禁用独立的功能。
4 NuMicro NUC100 Cortex-M0 内存
5 需要注意的问题
6 消息管理模块
(稍后补充)