This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] RTOS / RM48L952:RTOS / RM48L952:内存保护单元

Guru**** 2618835 points

Other Parts Discussed in Thread: RM48L952, HALCOGEN

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/783814/rtos-rm48l952-rtos-rm48l952-memory-protection-unit

器件型号:RM48L952
主题中讨论的其他器件: HALCOGEN

工具/软件:TI-RTOS

美好的一天!

微控制器 RM48L952工作环境上的项目- FreeRTOS、Code Composer Studio 8.3、HALCoGen 04.07.01。

项目中需要创建多个具有有限访问权限的全局数组:为任何任务读取数组元素、仅为一个任务写入。 这是为了保护阵列免受未经授权的记录。

通过 prvSetupDefaultMPU ()过程(os_port.c 文件)、RAM 的整个区域都配置为特权读取和写入访问以及非特权只读访问。 显然、这正是您所需要的。

我创建了一个包含两个任务的测试项目:一个任务具有 portPRIVILEGE_BIT 标志、另一个任务没有此标志。 我认为第一个任务可以写入和读取全局数组、第二个任务只能读取。 但是在执行测试时、我确保两个任务都写入全局数组。 这些。 保护阵列免受未授权的写入失败。

是否有解决此问题的方法?

此致、Talgat Burganov。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    很抱歉我的答复很晚。
    是否可以附加您的测试项目以便我们进行调试?


    此致、
    米罗
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    该程序在 RM46 Hercules 开发套件(HDK)的基础上进行了测试、  
    处理器- RM46L852ZWT。  
    CCS 8.3.0。
    //================================================================================
    unsigned int gTest[10];
    void vTaskBlink (void *pvParameters)
     // 500毫秒的块。
     const TickType_t xDelay = 500/ portTIK_PERIOD_MS;
     unsigned int i;
     while (1){
    对于(i=1;i<10;i++) gTest[i]= i;
      gioToggleBit (hetPORT1、PIN_HET_31);  //顶部
    gioSetBit (hetPORT1、PIN_HET_0、0);  //关闭 LED RightTop
      vTaskDelay (xDelay);
     }                     // while (1){
    void vTask2 (void *pvParameters)
     const TickType_t xDelay = 3000 / portTIK_PERIOD_MS;
     unsigned int i;
     while (1){
    gioSetBit (hetPORT1、PIN_HET_0、1);  // ON LED RightTop
      对于(i=1;i<10;i++) gTest[i]=10 + I;
      vTaskDelay (xDelay);
     }                     // while (1){
    void appl_Main (空)
     hetInit();
     gioInit();
     gioSetDirection (hetPORT1、0xFFFFFFFF);
     _enable_IRQ ();
     if (xTaskCreate (vTaskBlink、(const char *)"TaskBlink"、  
             configMINIMAL_STACK_SIZE、空、  
             3 | portPRIVILEGE_BIT、  
             null)!= pdTRUE)
     {
      //无法创建任务
      while (1);
     }
     if (xTaskCreate (vTask2、(const char *)"Task2"、  
             configMINIMAL_STACK_SIZE、空、  
             2、NULL)!= pdTRUE)
     {
      //无法创建任务
      while (1);
     }
     vTaskStartScheduler();
     while (1);
    //================================================================================