Azure RTOS ThreadX MDK 汇编 tx_initialize_low_level

AC5 和 AC6 代码不太一样
移植Threadx 的道理就在tx_initialize_low_level.s中

tx_initialize_low_level 的作用是做操作系统底层初始化操作,在Threadx初始化过程中执行。
可以参考 FREERTOS 中的代码 void vTaskStartScheduler( void )

两个版本可以根据需求选择的用。
不是说Threadx 要接管STM32的启动文件不务正业,原因是Threadx有一套耦合紧密的结构需要从底层做起。
用户去修改启动文件对启动文件有入侵性,还有就是增加了开发难度,所以Threadx做好了一部分作为一个示例。
tx_initialize_low_level 放在的文件夹为ac5\example_build ,ac6\example_build\sample_threadx
example,sample的本意意义是个例子

AC6

在这里插入图片描述
/**/ C语言的注解符号可能会报错
SYSTEM_CLOCK CPU CLOCK的设定
SYSTICK_CYCLES RTOS systick频率

SYSTEM_CLOCK      =   400000000
SYSTICK_CYCLES    =   ((SYSTEM_CLOCK / 1000) -1)

在这里插入图片描述

在这里插入图片描述

@VOID   _tx_initialize_low_level(VOID)
@{
   
    .global  _tx_initialize_low_level
    .thumb_func
_tx_initialize_low_level:
@
@    /* Disable interrupts during ThreadX initialization.  */
@
    关闭中断
    CPSID   i
@
@    /* Set base of available memory to end of non-initialised RAM area.  */
@
	
    LDR     r0, =_tx_initialize_unused_memory       @ Build address of unused memory pointer
    LDR     r1, =Image$$ARM_LIB_STACKHEAP$$ZI$$Limit@ Build first free address
    ADD     r1, r1, #4                              @
    STR     r1, [r0]                                @ Setup first unused memory pointer
@

1.把_tx_initialize_unused_memory 地址放入r0寄存器
2.把STACKHEAP 堆地址的上限放入r1寄存器
3.r1寄存器值+4,也就是移动到未被使用的内存地址,第一个空内存
4.把r1的值填入r0指向的空间。

一套操作下来 _tx_initialize_unused_memory = RAM_segment_used_end + 4

在这里插入图片描述

@    /* Setup Vector Table Offset Register.  */
@
    MOV     r0, #0xE000E000                         @ Build address of NVIC registers
    LDR     r1, =vector_table                       @ Pickup address of vector table
    STR     r1, [r0, #
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值