打印
[Cortex-M0技术交流]

写了个nuc1xx用的“键值对化”设备配置用的中间层代码

[复制链接]
1772|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sun1986821|  楼主 | 2012-2-19 20:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主要是由VB等面向对象编程的语言的启发,想把nuv1xx芯片的一些外部接口/设备通过清晰明了的一个键值对化的配置可以直接改变设备属性(如VB中对按钮的长、宽、按钮文字等信息就是通过键值对来配置的)。既能使这些设备的配置对开发者来说更简单明了,也有利于通过rom的配置文件去简单地改变片上设备的配置,于是写了一下的代码。不过因为水平、精力有限,只写了简单UART接口的配置中间层API(当然,如果从BSP中去修改,效率肯定比中间外加一层要好,但还是水平、精力问题,没有从BSP里面修改,只是BSP上再铺上一层**肋的中间层)。其中也遇到一些问题,希望高手指点迷津!

/**
*******************************************************************************
* @file       Mid_Uart.h
* @version    V1.0 仅普通TTL串口通信功能
* @date       2012.01.18
* @brief      MidInterface of UART 串口中间层接口.
*******************************************************************************
* @copy    EPhon
*
* INTERNAL FILE,DON'T PUBLIC.
*
* <h2><center>&copy; COPYRIGHT 2012 EPhon </center></h2>
*******************************************************************************
*/
#ifndef __MID_UART
#define __MID_UART
/*---------------------------- Include ---------------------------------------*/
#include <DrvUART.h>
#include <DrvGPIO.h>
/*---------------------------- Variable Define -------------------------------*/
// 初值为9600波特率、8位数据、无校验位、1停止位、1字节中断
typedef struct DevUART
{
STR_UART_T   StrSet;
E_UART_PORT   DevID;    //UART_PORT0
E_DRVGPIO_FUNC  DevIO;    //E_FUNC_UART0
uint8_t    DevEnable;
uint8_t    IntEnable;
uint32_t   IntMode;   //(DRVUART_RLSINT | DRVUART_THREINT | DRVUART_RDAINT)
void    (*IntHandle)();  //void UART_INT_HANDLE(uint32_t u32IntStatus);
/* 构造函数 */
/* DevUART(): DevID(UART_PORT0), DevIO(E_FUNC_UART0)
{};
  StrSet.u32BaudRate   = 115200;
  StrSet.u8cDataBits   = DRVUART_DATABITS_8;
  StrSet.u8cStopBits   = DRVUART_STOPBITS_1;
  StrSet.u8cParity   = DRVUART_PARITY_NONE;
  StrSet.u8cRxTriggerLevel= DRVUART_FIFO_1BYTES;

  DevID   = UART_PORT0;
  DevIO  = E_FUNC_UART0;    //E_FUNC_UART0
  DevEnable = 1;
  IntEnable = 1;
  IntMode  = DRVUART_RDAINT;   */
  
}STR_UART_EP;
/*---------------------------- Function Declare ------------------------------*/
uint8_t SetUART(STR_UART_EP*);
#endif

/**
*******************************************************************************
* @file       Mid_Uart.c
* @version    V1.0 仅普通TTL串口通信功能
* @date       2012.01.18
* @brief      MidInterface of UART 串口中间层接口.
*******************************************************************************
* @copy         EPhon
*
* INTERNAL FILE,DON'T PUBLIC.
*
* <h2><center>&copy; COPYRIGHT 2012 EPhon </center></h2>
*******************************************************************************
*/
/*---------------------------- Include ---------------------------------------*/
#include "Mid_Uart.h"
/*---------------------------- Variable Define -------------------------------*/

/*---------------------------- Function Declare ------------------------------*/
/**
*******************************************************************************
* @brief      UART Setting  串口设置
* @param[in]  strUART       Address of Structure for Configuration配置参数结构体首地址
* @retval     0       Setting Error.设置失败
* @retval     1            Setting is successful.设置成功
*
* @par Description
* @details    This function use to set for UART.
* @note
*******************************************************************************
*/
uint8_t SetUART(STR_UART_EP *strUART){
if(!strUART->DevEnable)
  DrvUART_Close(strUART->DevID);
else
{
  if(DrvUART_Open(strUART->DevID, &(strUART->StrSet)) != E_SUCCESS)
    return 0;
  DrvGPIO_InitFunction(strUART->DevIO);
  if(strUART->IntEnable)
   DrvUART_EnableInt(strUART->DevID, strUART->IntMode, strUART->IntHandle);
  else
   DrvUART_DisableInt(strUART->DevID, strUART->IntMode);
}
return 1;
}

其实用这种方法去配置片上设备还有一个重要的考虑,就是能加入一定的默认配置,比如说我希望“数据位8位 停止位1位 校验位无”等等这些一般通用的配置可以作为一种默认配置,不需要开发者每次都不厌其烦地去复制一遍,既麻烦,也冗杂。可是我想希望给那个类似“类”的结构体“DevUART”写一个构造函数,却无法通过编译,貌似那是C++才有的语法(本人还不懂C++)。不知道有没有办法可以实现我这个让结构体的元素可以有一个默认的初始值。或者如果想用C++去写程序(像Lee老师写LOOK一样),貌似是需要MDK 4.2以上版本以及sourcery G++?关键是这个G++不知道去哪下啊,官网上的好像是7天试用版,根本不够用啊。望高手指点。

相关帖子

沙发
john_lee| | 2012-2-20 00:57 | 只看该作者
大概看了一下,对楼主的想法似懂非懂,感觉比较有意思,论坛上几句话也说不清楚,楼主可以在12047788群里讨论讨论。

p.s,楼主在群里是哪位?

使用特权

评论回复
板凳
sun1986821|  楼主 | 2012-2-22 13:23 | 只看该作者
3# john_lee 哦 John Lee老师,我以前在群里,id ♠EPhon 后来可能潜水太久,被踢出来了。我再加下吧。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

21

帖子

1

粉丝