如何解决TI ROTS BIOS设置semaphore函数错误
运行下面的代码时,我总是收到错误消息。 这应该是示例代码,所以我不确定为什么此代码会出现此错误。
它与semaphore()有关,但老实说,我不知道此错误来自何处。 有人可以帮我吗?
描述资源路径位置类型 #10010链接期间遇到错误;未建立“ blink_target_HWI.out” blink_target_HWI C / C ++问题
描述资源路径位置类型 #10234-D仍存在未解析的符号blink_target_HWI C / C ++问题
描述资源路径位置类型 gmake:*** [全部]错误2 blink_target_HWI C / C ++问题
描述资源路径位置类型 gmake 1:*** [blink_target_HWI.out]错误1 blink_target_HWI C / C ++问题
描述资源路径位置类型 未解析的符号信号量,首先在./main.obj blink_target_HWI C / C ++问题中引用
//---------------------------------------------------------------------------------
// Project: Blink TM4C BIOS Using Hwi (STARTER)
// Author: Eric Wilbur
// Date: June 2014
//
// Note: The function call TimerIntClear(TIMER2_BASE,TIMER_TIMA_TIMEOUT) HAS
// to be in the ISR. This fxn clears the TIMER's interrupt flag coming
// from the peripheral - it does NOT clear the CPU interrupt flag - that
// is done by hardware. The author struggled figuring this part out - hence
// the note. And,in the Swi lab,this fxn must be placed in the
// Timer_ISR fxn because it will be the new ISR.
//
// Follow these steps to create this project in CCSv6.0:
// 1. Project -> New CCS Project
// 2. Select Template:
// - TI-RTOS for Tiva-C -> Driver Examples -> EK-TM4C123 LP -> Example Projects ->
// Empty Project
// - Empty Project contains full instrumentation (UIA,RTOS Analyzer) and
// paths set up for the TI-RTOS version of MSP430Ware
// 3. Delete the following files:
// - Board.h,empty.c,EK_TM4C123GXL.c/h,empty_readme.txt
// 4. Add main.c from TI-RTOS Workshop Solution file for this lab
// 5. Edit empty.cfg as needed (to add/subtract) BIOS services,delete given Task
// 6. Build,load,run...
//----------------------------------------------------------------------------------
//----------------------------------------
// BIOS header files
//----------------------------------------
#include <xdc/std.h> //mandatory - have to include first,for BIOS types
#include <ti/sysbios/BIOS.h> //mandatory - if you call APIs like BIOS_start()
#include <xdc/runtime/Log.h> //needed for any Log_info() call
#include <xdc/cfg/global.h> //header file for statically defined objects/handles
//------------------------------------------
// TivaWare Header Files
//------------------------------------------
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "driverlib/sysctl.h"
#include "driverlib/gpio.h"
#include "inc/hw_ints.h"
#include "driverlib/interrupt.h"
#include "driverlib/timer.h"
//----------------------------------------
// Prototypes
//----------------------------------------
void hardware_init(void);
void ledToggle(void);
void delay(void);
void blink_target_swi(void);
//---------------------------------------
// Globals
//---------------------------------------
volatile int16_t i16ToggleCount = 0;
//---------------------------------------------------------------------------
// main()
//---------------------------------------------------------------------------
void main(void)
{
hardware_init(); // init hardware via Xware
BIOS_start();
}
//---------------------------------------------------------------------------
// hardware_init()
//
// inits GPIO pins for toggling the LED
//---------------------------------------------------------------------------
void hardware_init(void)
{
uint32_t ui32Period;
//Set CPU Clock to 40MHz. 400MHz PLL/2 = 200 DIV 5 = 40MHz
SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
// ADD Tiva-C GPIO setup - enables port,sets pins 1-3 (RGB) pins for output
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
// Turn on the LED
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3,4);
// Timer 2 setup code
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER2); // enable Timer 2 periph clks
TimerConfigure(TIMER2_BASE,TIMER_CFG_PERIODIC); // cfg Timer 2 mode - periodic
ui32Period = (SysCtlClockGet() /2); // period = CPU clk div 2 (500ms)
TimerLoadSet(TIMER2_BASE,TIMER_A,ui32Period); // set Timer 2 period
TimerIntEnable(TIMER2_BASE,TIMER_TIMA_TIMEOUT); // enables Timer 2 to interrupt CPU
TimerEnable(TIMER2_BASE,TIMER_A); // enable Timer 2
}
//---------------------------------------------------------------------------
// ledToggle()
//
// toggles LED on Tiva-C LaunchPad
//---------------------------------------------------------------------------
void ledToggle(void)
{
//TimerIntClear(TIMER2_BASE,TIMER_TIMA_TIMEOUT);
// LED values - 2=RED,4=BLUE,8=GREEN
while(1){
Semaphore_pend(semaphore(),BIOS_WAIT_FOREVER);
if(GPIOPinRead(GPIO_PORTF_BASE,GPIO_PIN_2))
{
GPIOPinWrite(GPIO_PORTF_BASE,0);
}
else
{
GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,2);
}
//delay(); // create a delay of ~1/2sec
i16ToggleCount += 1; // keep track of #toggles
Log_info1("LED TOGGLED [%u] TIMES",i16ToggleCount); // send toggle count to UIA
};
}
//---------------------------------------------------------------------------
// delay()
//
// Creates a 500ms delay via TivaWare fxn
//---------------------------------------------------------------------------
void delay(void)
{
SysCtlDelay(6700000); // creates ~500ms delay - TivaWare fxn
}
void blink_target_swi(void) // Software driven interrupt
{
Semaphore_post(semaphore());
//Swi_post(blink_target_SWI);
TimerIntClear(TIMER2_BASE,TIMER_TIMA_TIMEOUT); // must clear timer flag FROM timer
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。