/* * Record.c * * Created on: 2014-5-26 * Author: zdl */ #include "includes.h" char *const Display_Name[]={ "Music List", "1-Beyond.wav", "2-LetItG.wav", "3-WeAreO.wav", "4-FanFan.wav", "5-OldBoy.wav", "6-Sodagr.wav", "7-WangF1.wav", "8-WangF2.wav", "9-Mayday.wav", "10-StevC.wav", }; void Music_Graph() { SysTickDisable(); //---------Draw Title---------- ui8Flush_Flag=FLUSH_ON; GrClearDisplay(&g_sContext); GrFlush(&g_sContext); } void Music_Begin() { DSTATUS i=1; SystemClock=SysCtlClockGet(); //----------------硬件初始化--------------- DAC_Init(); //初始化DAC //-------------------初始化SD卡-------------------- while(i==1)// 使用文件系统初始化SD卡 i=disk_initialize(0); //-------------------初始化Timer------------------- SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1); TimerDisable(TIMER1_BASE, TIMER_A); TimerConfigure(TIMER1_BASE, TIMER_CFG_A_PERIODIC_UP); TimerIntRegister(TIMER1_BASE,TIMER_A,Timer1IntHandler); TimerIntEnable(TIMER1_BASE, TIMER_TIMA_TIMEOUT); MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); MAP_GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_6); MAP_GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_6,GPIO_PIN_6); SysTickEnable(); } void Music_Main() { static uint8_t preDisplay_Num=255,Display_Num=0; while((ui8ButtonKeyValue&KEY_LEFT_ENTER) == 0 &&(ui8ButtonKeyValue&KEY_RIGHT_EXIT)==0) { Display_Num = GetWheelKey(); _nop(); if(Display_Num != preDisplay_Num) { DrawMenu(Display_Num,Display_Name); preDisplay_Num = Display_Num; } SysCtlDelay(SystemClock/100); } if(Music_Enter==1) { GrClearDisplay(&g_sContext); GrStringDrawCentered(&g_sContext, Display_Name[Display_Num], AUTO_STRING_LENGTH, 63, 20, OPAQUE_TEXT); GrContextFontSet(&g_sContext, &g_sFontFixed6x8); GrStringDraw(&g_sContext,"Time:",4,0,53,1); GrStringNumberCentered(&g_sContext,0,0,35+22,57); GrStringDraw(&g_sContext,"-",1,35+9,53,1); GrStringNumberCentered(&g_sContext,0,0,35+2,57); GrStringDraw(&g_sContext,"/",1,35+34,53,1); GrStringNumberCentered(&g_sContext,0,0,35+48,57); GrStringDraw(&g_sContext,"-",1,35+55,53,1); GrStringNumberCentered(&g_sContext,0,0,35+70,57); GrFlush(&g_sContext); ui8Flush_Flag=FLUSH_OFF; WaveOpen(Display_Name[Display_Num],MONO); ui8Flush_Flag=FLUSH_ON; preDisplay_Num=255; ui8ButtonKeyValue&=~(KEY_LEFT_ENTER+KEY_RIGHT_EXIT); } else { preDisplay_Num=255; rcd_ply_sel = 255; } } void Music_Quit() { MAP_GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_5,0); TimerDisable(TIMER1_BASE, TIMER_A); ui8Flush_Flag=FLUSH_ON; }
时间: 2024-04-10 22:31:43 浏览: 189
这是一个用于音乐播放的记录程序。程序中包含了一些函数,如Music_Graph用于绘制音乐界面,Music_Begin用于初始化硬件和SD卡,Music_Main用于处理音乐播放的主要逻辑,Music_Quit用于停止音乐播放。
其中,Display_Name是一个字符串数组,存储了音乐列表的名称。Music_Main函数中通过GetWheelKey函数获取当前选择的音乐编号,并根据该编号在屏幕上显示相应的音乐名称。当按下ENTER键时,进入音乐播放界面,并根据选择的音乐名称打开相应的音乐文件进行播放。
需要注意的是,程序中使用了一些外部库函数和硬件相关的代码,比如DAC_Init用于初始化DAC芯片,disk_initialize用于初始化SD卡,Timer1IntHandler是一个定时器中断处理函数等。这些函数的具体实现可能需要查看其他文件或库文件中的代码。
相关问题
怎样在jni中使用vendor/lib64下的libSNPE.so三方库并使用zdl::DlContainer::IDlContainer::open详细过程
在JNI(Java Native Interface)中使用vendor/lib64下的libSNPE.so三方库,通常需要几个步骤来确保库被正确加载和初始化。这里会涉及到JNI的一些基本操作和SNPE SDK的特定操作。以下是一个简化的流程:
1. 确保在Java层的native方法声明,并使用System.loadLibrary加载.so库。例如:
```java
public class MyNativeClass {
static {
System.loadLibrary("snpe");
}
public native void myNativeMethod();
}
```
2. 编写JNI函数实现,这通常是一个C/C++的源文件。在这一步中,你可能需要包含SNPE SDK的头文件,并调用`zdl::DlContainer::IDlContainer::open`来加载模型容器。例如:
```cpp
#include <jni.h>
#include <string>
#include "DlContainer.hpp" // SNPE SDK的头文件
extern "C" JNIEXPORT void JNICALL
Java_com_example_mynativeclass_MyNativeClass_myNativeMethod(JNIEnv *env, jobject instance) {
std::string containerPath = "/vendor/lib64/libSNPE.so";
zdl::DlContainer::IDlContainer::uniquePtr dlContainer;
zdl::DlContainer::IDlContainer::Status status = dlContainer->open(containerPath);
// 这里可以添加错误检查和后续的SNPE操作
}
```
3. 在使用`zdl::DlContainer::IDlContainer::open`之前,你需要确保已经正确初始化了SNPE的环境,可能需要调用`zdl::SNPE::SNPEFactory::buildZdlInitString`等函数来进行初始化。
4. 在JNI层进行必要的错误处理,确保在出现错误时可以捕获并处理。
5. 最后,记得在JNI层使用完毕后,进行资源的释放和环境的清理工作。
以上步骤概述了在JNI中使用SNPE库的基本流程,但请注意,实际操作可能会更加复杂,因为还需要考虑平台的特定配置,以及如何处理JNI和SNPE库之间可能的兼容性问题。
include_directories(${SNPE_DIR}/include/zdl)中的include_directories是啥
`include_directories` 是 CMake 中的一个命令,用于向编译器添加头文件搜索路径。在这个例子中,`${SNPE_DIR}/include/zdl` 是一个头文件目录的路径,通过 `include_directories` 命令将这个路径添加到编译器的头文件搜索路径中,以便编译器能够找到这个目录下的头文件。
阅读全文