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.
参考以下成功进行移植后 C代码如下:
[【TI C2000】F28002x移植SYS/BIOS并运行TI-RTOS及工程模板](blog.csdn.net/.../145650628)
/* * ======== main.c ======== */ /* BIOS/XDC Include Files. */ #include <xdc/std.h> #include <xdc/cfg/global.h> #include <xdc/runtime/IHeap.h> #include <xdc/runtime/System.h> #include <xdc/runtime/Error.h> #include <xdc/runtime/Memory.h> #include <ti/sysbios/BIOS.h> #include <ti/sysbios/knl/Task.h> #include <ti/sysbios/knl/Event.h> #include <ti/sysbios/knl/Semaphore.h> #include <ti/sysbios/knl/Clock.h> #include <ti/sysbios/heaps/HeapBuf.h> #include <ti/sysbios/heaps/HeapMem.h> #include <ti/sysbios/knl/Event.h> #include <ti/sysbios/family/c28/Hwi.h> #include "device.h" #include "driverlib.h" #include <stdint.h> #include <stdlib.h> #include <stddef.h> #include <string.h> #include <stdio.h> #include <math.h> // // Globals // // // Send data for SCI-A // uint16_t TX_Buf[2]={0xAA,0xBB}; // // Received data for SCI-A // uint16_t RX_Buf[2]={0xFF,0xFF}; // // Function Prototypes // void Init_GPIO(void) { // // GPIO28 is the SCI Rx pin. // GPIO_setPinConfig(DEVICE_GPIO_CFG_SCIRXDA); GPIO_setDirectionMode(DEVICE_GPIO_PIN_SCIRXDA, GPIO_DIR_MODE_IN); GPIO_setPadConfig(DEVICE_GPIO_PIN_SCIRXDA, GPIO_PIN_TYPE_STD); GPIO_setQualificationMode(DEVICE_GPIO_PIN_SCIRXDA, GPIO_QUAL_ASYNC); // // GPIO29 is the SCI Tx pin. // GPIO_setPinConfig(DEVICE_GPIO_CFG_SCITXDA); GPIO_setDirectionMode(DEVICE_GPIO_PIN_SCITXDA, GPIO_DIR_MODE_OUT); GPIO_setPadConfig(DEVICE_GPIO_PIN_SCITXDA, GPIO_PIN_TYPE_STD); GPIO_setQualificationMode(DEVICE_GPIO_PIN_SCITXDA, GPIO_QUAL_ASYNC); //GPIO 31 34 Output GPIO_setPinConfig(GPIO_31_GPIO31); GPIO_setDirectionMode(31, GPIO_DIR_MODE_OUT); GPIO_setPadConfig(31, GPIO_PIN_TYPE_STD); GPIO_setQualificationMode(31, GPIO_QUAL_ASYNC); GPIO_setPinConfig(GPIO_34_GPIO34); GPIO_setDirectionMode(34, GPIO_DIR_MODE_OUT); GPIO_setPadConfig(34, GPIO_PIN_TYPE_STD); GPIO_setQualificationMode(34, GPIO_QUAL_ASYNC); GPIO_writePin(31,0); GPIO_writePin(34,1); } void Init_SCI(void) { SCI_setConfig(SCIA_BASE, DEVICE_LSPCLK_FREQ, 115200, (SCI_CONFIG_WLEN_8 | SCI_CONFIG_STOP_ONE | SCI_CONFIG_PAR_NONE)); SCI_enableModule(SCIA_BASE); SCI_enableTxModule(SCIA_BASE); SCI_enableRxModule(SCIA_BASE); SCI_resetChannels(SCIA_BASE); SCI_performSoftwareReset(SCIA_BASE); } void delay_ms(uint32_t ms) { while(ms--) { DEVICE_DELAY_US(1000); } } /* * ======== taskFxn ======== */ void taskFxn(UArg a0, UArg a1) { Init_GPIO(); Init_SCI(); SCI_writeCharArray(SCIA_BASE, TX_Buf, 2); while (1) { GPIO_togglePin(31); GPIO_togglePin(34); // SCI_readCharArray(SCIA_BASE, RX_Buf, 1); SCI_writeCharArray(SCIA_BASE, RX_Buf, 1); } } int main(void) { Task_Params taskParams; System_printf("enter main()\n"); // // Initializes system control, device clock, and peripherals // Device_init(); Device_initGPIO(); // // Initializes PIE and clear PIE registers. Disables CPU interrupts. // and clear all CPU interrupt flags. // Interrupt_initModule(); // // Initialize the PIE vector table with pointers to the shell interrupt // Service Routines (ISR). // Interrupt_initVectorTable(); // // Enable Global Interrupt (INTM) and realtime interrupt (DBGM) // EINT; ERTM; Task_Params_init(&taskParams); taskParams.priority = 3; Task_create(taskFxn, &taskParams, NULL); BIOS_start(); /* does not return */ return(0); }
调试时 发现System_printf不能输出
且Task的循环在运行十次后就自动卡死
是否有什么配置没完成的?有无官方移植成功的示例工程参考?
SYS/BIOS 不再受支持、也从未在 F28002x 上受到正式支持、因此我只能提供有限的帮助。 一般而言、我们建议将 SYS/BIOS 用户迁移到 FreeRTOS。 不过、我可以指出一些我看到您上面的代码存在的潜在问题。 这里有一个常见问题解答、其中包含更详细的信息、但您需要注意不要在代码中配置 SYS/BIOS 拥有的资源。 例如、如果 SYS/BIOS 正在配置 SYSCLK、请确保从 Device_init ()中删除 SYSCLK 初始化、否则会禁止 SYS/BIOS 对其进行设置。 SYS/BIOS 将拥有 PIE 矢量表来管理其 Hwi、因此您不应该调用 Interrupt_initVectorTable()函数。 以下是 System_printf 故障排除的常见问题解答