农民讲习所建立通用程序 移植 到 Keil Cortex-M0

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 消息管理模块

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(稍后补充)

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值