Tricore内核上下文切换机制CSA--Apple的学习笔记

动机

FreeRTOS在port.c中都是和内核相关的,我就是想了解清楚TC2上下文切换的机制。所以看pxPortInitialiseStack函数,里面主要是初始化CSA,在FreeRTOS任务创建函数中会调用,另外还看了xPortStartScheduler函数,这里面主要是处理上下文切换。
本来在看core寄存器说明文档,里面有说上下文切换保存和恢复的机制。

问题1

里面说到NEW_FCX,而且是用户不可操作的,另外还说道LINK WORD和PCXI关联,值是一样的,那么用户怎么操作呢?这部分不太理解。

问题2

为什么切换任务的时候要用rslcx,而且一开始初始化任务的时候要用lower+Up2个CSA,文档中说的都是or,而且主要都是说产生中断或trip会自动保存lower,为什么还要手动操作呢?

突破

带着这2个问题,我不了解代码为什么要这样设计,感觉混乱的原因是先有鸡还是先有蛋的感觉。于是乎网上搜索看看有没有线索,接着真的找到我想要的了,帮助我解决了理解问题,现在代码能够完全看懂。并且调试验证他理解的是正确的。
FreeRTOS任务创建、启动调度器、任务切换过程分析——基于Tricore1.6
看了他的文章后,我发现PCXI就是LINK WORD,之前没有搜索到,因为在图片中。

调试验证通过

 

FreeRTOS任务启动验证.png

小结:

重要的理解就是PCXI就是链表(连接线),所以PCXI可以理解为一个指针箭头。FCX的值绑定到连接线,即FCX指向了pulUpperCSA的下一个。

怎么区分低级还是高级上下文的呢?也就是说必须低级的下一个连接到高级,不能高级的下一个连接到低级?对称性,save2个,所以要restore2个。

基于这样的理解,我准备之后自己尝试,初始化只建立一个lowerCSA,那么启动任务的时候只要恢复一个lowerCSA即可。明天继续验证我的猜想。

寄存器参考

 

UpperAndLower.png

2020/4/7更新

昨夜遗留了一个想法,就是只使用一个lowerCSA可否,今天看了内核手册,发现应该是不可以的。于是修改了代码只用一个lowerCSA或upperCSA,调试结果也显示不可行。

答案从如下3方面来描述

  1. 从CSA区域功能角度。只有一个CSA,不使用lower和upper的组合的话,缺少参数A[4]。
  2. 最重要的一点就是Upper是自动保存和恢复的。即保存和恢复LINK word链表指向的CSA内的16个word的数据(这些数据会绑定到A和D寄存器中),而我无法直接为A11(RA)赋值,必须要通过PCXI指向的CSA区域中的A11赋值才可行。

  3.  自动保存upper.png

  4. 也不能通过mfcr向PCX来读取当前地址,通过地址+4来为当前的A11赋值。因为一读取,PCXI就自动从链表中移除,指向下一个链表。

    上下文恢复机制.png

 

有了以上3点,就说明我必须要自己制作lower的内容,然后通过rslcx指令手工恢复,由于退出函数会自动执行恢复UpperCSA,所以还在LowerCSA后面还要自己再连接一个UpperCSA。这样自动执行退出函数的时候,能找到我准备的自定义跳转函数,这样就进入了下一个我期待的函数了。Tricore的上下文切换的寄存器原来是要这么操作的。哈哈~

这么验证实验一下,使我对Tricore上下文切换理解的更加深入了。pxPortInitialiseStack和xPortStartScheduler函数的理解也更加深刻了。

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在TriCore上移植μC/OS-III,首先需要了解两个方面:TriCore架构和μC/OS-III的特征。 TriCore是一种32位的嵌入式微处理器架构,设计用于实时处理任务,具有高性能和低功耗特点。它广泛应用于汽车电子和工业自动化等领域。 μC/OS-III是一款针对多任务实时操作系统(RTOS)的核心部分。它具有实时性好、可扩展性强和资源占用少等特征。 下面是在TriCore上移植μC/OS-III的基本步骤: 1. 理解μC/OS-III的核心机制和特点。熟悉任务管理、中断处理、内存管理等方面的原理和实现方法。 2. 根据TriCore的架构和μC/OS-III的需求,进行适配和修改。TriCore CPU和μC/OS-III之间的接口需重新实现。 3. 编写适配层代码。根据TriCore的中断控制器、内存管理单元和时钟等硬件特点,实现μC/OS-III所需的硬件抽象层。 4. 移植μC/OS-III的启动代码。根据TriCore的启动流程和μC/OS-III的初始化要求,编写启动代码,完成μC/OS-III的初始化过程。 5. 移植μC/OS-III的任务管理、中断处理和调度算法等功能。根据μC/OS-III的规范和TriCore的特点,将原有的代码进行修改和补充。 6. 进行系统测试和优化。测试系统的稳定性和实时性,并对性能进行优化。 注意,以上只是移植的基本步骤,具体的细节需要根据具体的TriCore芯片和μC/OS-III版本进行适配和实现。同时,移植过程中可能会遇到各种问题,需要进行调试和调优。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值