Tag: 嵌入式

使用gstreramer播放歌曲的顺序是什么?

我正在建立一个基于gstreamer-0.10的音乐播放器。 我能够成功地玩,但是当我改变管道的状态时我遇到了问题。 我已经发布了代码来初始化并启动以下管道: void start_gstreamer() { gst_init(0,NULL);//call to initialise gstreamer time_val=0;//set to default value volume = 1.0;//set volume to default value player = gst_element_factory_make (“playbin2”, “player”);//get pipeline equalizer = gst_element_factory_make (“equalizer-10bands”, “equalizer”);//get the 10band equalizer convert = gst_element_factory_make (“audioconvert”, “convert”); sink = gst_element_factory_make (“autoaudiosink”, “audio_sink”);//get the audio-sink if (!equalizer || !convert || !sink)//check is all […]

编译时间浮动打包/打孔

我正在为PIC32MX编​​写C语言,使用Microchip的PIC32 C编译器(基于GCC 3.4)编译。 添加我以下的标准是GNU99(带GNU扩展的C99,编译器标志-std=gnu99 ) 我的问题是:我有一些可重新编程的数字数据存储在EEPROM或芯片的程序闪存中。 这意味着当我想存储浮动时,我必须做一些类型的惩罚: typedef union { int intval; float floatval; } IntFloat; unsigned int float_as_int(float fval) { IntFloat intf; intf.floatval = fval; return intf.intval; } // Stores an int of data in whatever storage we’re using void StoreInt(unsigned int data, unsigned int address); void StoreFPVal(float data, unsigned int address) { StoreInt(float_as_int(data), […]

嵌入式应用程序的高性能日志库

我正在寻找一个我将在嵌入式设备上使用的高性能日志库。 我还想说我之前使用的是PaulBunyan日志库,它提供了一种有效的信息传输方法。 [通过高效我的意思是它有一个解决方案,用于通过低速接口(例如SERIAL)发送数据时仅传输__LINE__和__FILE__ – 当然先前通过扫描代码进行__LINE__ __FILE__映射]。 你知道这样的解决方案还是至少类似的解决方案? 提前感谢任何指针/类似解决方案, 尤利安

C相同结构大小不同

我的问题与这个问题有关: c在struct中定义具有不同大小的数组 但是,我不想使用动态分配(嵌入式目标)。 问题回顾: 在C中 ,我希望有两个相同结构的版本,每个版本的静态数组大小不同。 两个结构都将通过指针参数由相同的函数使用。 typedef struct { short isLarge; //set 0 at initialization short array[SIZE_A]; //more arrays } doc_t; typedef struct { short isLarge; //set 1 at initialization short array[SIZE_B]; //more arrays } doc_large_t; void function( doc_t* document ) { if ( document->isLarge ) { //change document into doc_large_t* [1] } //common […]

GCC C ++(ARM)和const指向struct字段的指针

假设有一个简单的测试代码 typedef struct { int first; int second; int third; } type_t; #define ADDRESS 0x12345678 #define REGISTER ((type_t*)ADDRESS) const int data = (int)(&REGISTER->second)*2; int main(void) { volatile int data_copy; data_copy = data; while(1) {}; } 这是用于裸机ARM的CodeSourcery G ++(gcc 4.3.2)编译的。 它还有一个非常标准的链接描述文件。 当用C编译(作为main.c)时,对象“data”进入Flash,如预期的那样。 当用C ++编译时(作为main.cpp),这个对象进入RAM,并添加了额外的代码,只是将值从Flash复制到RAM(该值已经计算,只需复制!)。 所以编译器可以计算地址,但不知何故不想“只使用它”。 问题的根源是地址的乘法 – 没有“* 2”乘法,两个版本都按预期工作 – “数据”放在Flash中。 另外 – 当“数据”被声明为: const int […]

如何在跨文件预处理时获取唯一值

问题 我需要一种使用预处理器指令生成唯一值的方法。 目的是每次调用宏时,它将具有唯一的整数标识符。 但它应该保留它跨文件的价值。 有点像预处理器计数器,用于调用函数的次数。 更进一步的信息 我正在使用的宏是: #define LOG_MSG(a) log_msg(?) ‘a’是用户想要打印的字符串。 log_msg是一个用于在UART上打印消息的自定义函数 ‘?’ 如果我需要帮助的部分。 该宏仅在一个地方定义。 在预处理阶段,’?’ 将被唯一标识符替换。 我们这样做是为了减少字符串带来的开销,因为此代码将在嵌入式设备上运行。 在预处理之后,将提取标识符和相关字符串,并且将创建将映射它们的表(这将在应用程序侧)。 由于这将用于多个文件,我想要一种方法来为多个文件中的每次使用生成唯一标识符( 整数而不是字符串 )(每个唯一字符串的标识符将是理想的但不是必需的)。 有任何想法吗? 如果有任何遗漏或不完整的信息,请提及 笔记 __COUNTER__是我尝试的第一件事,但它并不适用于文件。 __FILE__会给我一个破坏目的的字符串。 有人提到使用唯一文件标识符。 但我不想静态分配这些。 我们正在使用CCS(它基于Eclipse Kepler构建)来构建此代码。 所以我想我们可以在构建系统中添加一些内容来执行@embedded_guy所提到的内容。 谁知道怎么做? 谢谢

什么是典型的按键持续时间

我正在做一些关于按键处理固件项目的工作。 我一直在谷歌搜索试图找出按键的典型持续时间,特别是快速打字员的最低时间。 令人惊讶的是,我无法在任何地方找到任何数据。

RTC与msp430

我以前曾问过这个问题,但我想这次我可以更清楚地问一下。 以下是我的RTC测试代码。 我正在使用msp430f5418和IAR EW 5。 我的问题是在一段时间后(我们测试了15分钟以上),分钟中断比预期更早。 即,第一次,在正好60秒之后和15分钟之后,分钟中断在第45秒进行。 为什么会这样? 我们使用TI提供的库来进行RTC寄存器操作。 谁能告诉我为什么会这样? 这是代码的问题,还是库的不当使用或硬件本身的问题? 提前致谢… #include #define RTC_VALID_READ_MAX_WAIT 500U int main() { WDTCTL = WDTPW + WDTHOLD; RTCCTL01 = RTCMODE + RTCTEVIE + RTCTEV_0; RTCCTL01 |= RTCHOLD; /* Calling the routines in the workaround assembly module supplied by TI */ SetRTCYEAR (2011U); SetRTCMON (6U); SetRTCDOW (3U); SetRTCDAY (4U); […]

将float序列化为32位整数的便携方式

我一直在努力寻找一种可移植的方法来序列化C和C ++中的32位浮点变量,以便发送到微控制器和从微控制器发送。 我希望格式足够明确,以便可以从其他语言完成序列化/反序列化,而无需太多努力。 相关问题是: C ++中双/浮点型二进制序列化的可移植性 用C序列化double和float c ++便携式转换为long to double 我知道在大多数情况下, 类型转换联合/ memcpy可以正常工作,因为浮动表示是相同的,但我宁愿有更多的控制和心灵。 到目前为止我想出的是以下内容: void serialize_float32(uint8_t* buffer, float number, int32_t *index) { int e = 0; float sig = frexpf(number, &e); float sig_abs = fabsf(sig); uint32_t sig_i = 0; if (sig_abs >= 0.5) { sig_i = (uint32_t)((sig_abs – 0.5f) * 2.0f * 8388608.0f); e […]

ISR和multithreading程序中的C’Volatile’关键字?

我读到了内存映射硬件寄存器,ISR和multithreading程序中C volatile关键字的用法。 1)注册 uint8_t volatile * pReg; while (*pReg == 0) { // do sth } // pReg point to status register 2)ISR int volatile flag = 0; int main() { while(!flag) { // do sth } } interrupt void rx_isr(void) { //change flag } 3)multithreading int volatile var = 0; int task1() { while […]