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.
工具与软件:
大家好!
当使用 HalCoGen 生成的 FreeRTOS 端口尝试在我的项目中进行软件复位时、会遇到数据中止异常。
当 RTOS 未运行时、重置效果很好、但一旦涉及到 FreeRTOS、就会出现问题。
相关代码如下:
/** @file sys_main.c * @brief Application main file * @date 11-Dec-2018 * @version 04.07.01 * * This file contains an empty main function, * which can be used for the application. */ /* * Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com * * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the * distribution. * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /* USER CODE BEGIN (0) */ /* USER CODE END */ /* Include Files */ #include "sys_common.h" /* USER CODE BEGIN (1) */ /* USER CODE END */ /** @fn void main(void) * @brief Application main function * @note This function is empty by default. * * This function is called after startup. * The user can use this function to implement the application. */ /* USER CODE BEGIN (2) */ #include "FreeRTOS.h" #include "os_task.h" #include "gio.h" #include "spi.h" #include "reg_system.h" void toggle_led(); void blinkTask(void *pvParameters); void soft_reset(); xTaskHandle blinkTaskHandle; /* USER CODE END */ int main(void) { /* USER CODE BEGIN (3) */ gioInit(); spiInit(); xTaskCreate(blinkTask, "Blinky", configMINIMAL_STACK_SIZE, NULL, 1, &blinkTaskHandle); vTaskStartScheduler(); /* USER CODE END */ return 0; } /* USER CODE BEGIN (4) */ void toggle_led(){ gioToggleBit(spiPORT2, SPI_PIN_SIMO); gioToggleBit(spiPORT2, SPI_PIN_SOMI); gioToggleBit(spiPORT2, SPI_PIN_CLK); } void blinkTask(void *pvParameters){ uint8_t blinky_counter = 0; while(1){ toggle_led(); blinky_counter++; if(blinky_counter == 6) soft_reset(); vTaskDelay(300); } } void soft_reset(){ systemREG1->SYSECR = 0x8000U; } /* USER CODE END */
有没有人遇到过这种情况或对使用 FreeRTOS 时软件复位失败的原因有任何见解? 非常感谢您提出任何建议!
提前感谢您!
尊敬的 Fabrício Carneiro:
实际上、写入 SYSECR 寄存器应该只在特权模式下完成、如果您在用户模式下尝试写入该寄存器将产生数据中止。
实际上、如果我们使用 FreeRTOS、通常任务函数将在用户模式下执行。 但问题是用户模式没有访问系统资源的权限。 这可能是例外的原因。
有关更多详细信息、请参阅以下两个线程:
(+) TMS570LS3137:FreeRTOS 程序重置指令-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛
(+) TMS570LS1227:在 GIO 模式中使用 ECLK、而不生成 dabort。 -基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛
以上两个问题与您的问题类似。
——
谢谢、此致、
Jagadish。