Ejemplo n.º 1
0
Archivo: telnet.c Proyecto: djyos/djyos
//THIS IS TELNET SERVER MODULE FUNCTION
bool_t ServiceTelnetInit(ptu32_t para)
{
    bool_t result;
    u16    evttID;
    u16    eventID;

    result = false;
    pTelnetClientSync = Lock_MutexCreate(NULL);
    if(NULL == pTelnetClientSync)
    {
        goto __TELNET_INIT_EXIT;
    }
    evttID = Djy_EvttRegist(EN_CORRELATIVE, gTelnetAcceptPrior, 0, 1,
            __TelnetAcceptMain,NULL, gTelnetAcceptStack, "TelnetAcceptMain");
    eventID = Djy_EventPop(evttID, NULL, 0, 0, 0, 0);

    if((evttID == CN_EVTT_ID_INVALID)||(eventID == CN_EVENT_ID_INVALID))
    {
        printk("%s:Create the accept main failed:evttID:0x%04x eventID:0x%04x\n\r",\
                __FUNCTION__,evttID,eventID);
        goto __TELNET_INIT_EXIT;
    }

    gTelnetClientEvttID = Djy_EvttRegist(EN_CORRELATIVE, gTelnetProcessPrior, 0, 1,
    		TelnetClientMain,NULL, gTelnetProcessStack, "TelnetClientMain");

    return __telnetConsoleInstall();

__TELNET_INIT_EXIT:
    return result;
}
Ejemplo n.º 2
0
//----组件初始化2-----------------------------------------------------------
//功能:可选组件初始化函数共有3个:
//      1、sys_module_init,在sys_init.c中,参见该函数注释
//      2、prj_module_init,在这里初始化的模块,需要调用跟具体工程相关的代码,例
//         如键盘模块,除了调用module_init_keyboard函数外,还要调用跟硬件相关的
//         module_init_keyboard_hard函数。
//      前两步初始化时,块相联分配方式还没有初始化,驱动中如果用到动态分配,使用
//      的是准静态分配,关于准静态分配的说明,参见mems.c文件。
//      3、run_module_init,参见该函数注释。
//参数:无
//返回:无
//-----------------------------------------------------------------------------
void prj_module_init(void)
{
    uint16_t evtt_main;

#if CN_CFG_KEYBOARD == 1
    Keyboard_ModuleInit(0);
#endif

#if CN_CFG_DJYFS == 1
    Djyfs_ModuleInit(0);
#if CN_CFG_DJYFS_FLASH == 1
    DFFSD_ModuleInit();
#endif
#endif

#if(CN_CFG_UART0_USED == 1)
    module_init_uart0(0);
#endif
#if(CN_CFG_UART1_USED == 1)
    module_init_uart1(0);
#endif
    evtt_main = Djy_EvttRegist(EN_CORRELATIVE,CN_PRIO_RRS,0,0,2,
                                __djy_main,CN_MAIN_STACK,"main function");
    //事件的两个参数暂设为0,如果用shell启动,可用来采集shell命令行参数
    Djy_EventPop(evtt_main,NULL,0,NULL,0,0,0);
    return ;
}
Ejemplo n.º 3
0
// =============================================================================
// 功能:RTC时间注册及初始化
// 参数:time, 时间值
// 返回:true,正常操作,否则出错
// =============================================================================
ptu32_t ModuleInstall_CpuRtc(ptu32_t para)
{
    s64 rtc_time;
    struct timeval tv;
    u16 evtt;

    //初始化硬件
    PMC_EnablePeripheral(ID_RTC);
    pRtcSemp = Lock_SempCreate(1,0,CN_BLOCK_FIFO,"RTC_SEMP");

    if(NULL == pRtcSemp)
        return false;

    evtt = Djy_EvttRegist(EN_CORRELATIVE,CN_PRIO_REAL,0,0,
                            Rtc_UpdateTime,NULL,800,
                                "RTC Update Event");

    if(evtt == CN_EVTT_ID_INVALID)
    {
        free(pRtcSemp);
        return false;
    }
    Djy_EventPop(evtt,NULL,0,NULL,0,0);
    Rtc_GetTime(&rtc_time);

    tv.tv_sec = rtc_time/1000000;//us ---> s
    tv.tv_usec = 0;

    settimeofday(&tv,NULL);

    //注册RTC时间
    if(!Rtc_RegisterDev(NULL,Rtc_SetTime))
        return false;
    return true;
}
Ejemplo n.º 4
0
void Enet_Task(void)
{
    u16 enettask;
    ModuleInstall_Enet(0);
    enettask = Djy_EvttRegist(EN_CORRELATIVE,180,0,0,2,
                                    EnetTest,0x100,"ENET TASK");
    Djy_EventPop(enettask,NULL,0,NULL,0,0,200);
}
Ejemplo n.º 5
0
bool_t TcpEffectTest(char *param)
{
   u16   evtt_id = CN_EVTT_ID_INVALID;
   evtt_id = Djy_EvttRegist(EN_CORRELATIVE, CN_PRIO_RRS-4, 0, 1,
   		(ptu32_t (*)(void))tcptstserver,NULL, 0x1000, "TCPEffectServer");
	if (evtt_id != CN_EVTT_ID_INVALID)
	{
		Djy_EventPop(evtt_id, NULL, 0, NULL, 0, 0);
	}
	return true;
}
Ejemplo n.º 6
0
void Led_Task(void)
{
    LED_Init();

    ledontask = Djy_EvttRegist(EN_CORRELATIVE,CN_PRIO_RRS,0,0,
                                    LedAllOn,NULL,0x30,"LedAllOn function");
    if(ledontask == CN_EVTT_ID_INVALID)
    {
        printk("ledontask create failed!\r\n");
    }

    ledofftask = Djy_EvttRegist(EN_CORRELATIVE,CN_PRIO_RRS,0,0,
                                    LedAllOff,NULL,0x30,"LedAllOff function");
    if(ledofftask == CN_EVTT_ID_INVALID)
    {
        printk("ledofftask create failed!\r\n");
    }
    Djy_EventPop(ledontask,NULL,0,NULL,0,200);

}
Ejemplo n.º 7
0
bool_t UdpServer_SndTask(char *param)
{
   u16   evtt_id = CN_EVTT_ID_INVALID;
   evtt_id = Djy_EvttRegist(EN_CORRELATIVE, CN_PRIO_RRS, 0, 1,
   		(ptu32_t (*)(void))UdpServer_Snd,NULL, 0x1000, "UdpServer_Snd");
	if (evtt_id != CN_EVTT_ID_INVALID)
	{
		Djy_EventPop(evtt_id, NULL, 0, NULL, 0, 0);
	}
	return true;
}
Ejemplo n.º 8
0
//关于信号灯的使用
// =============================================================================
// 函数功能:创建一个线程(DJY中叫一个事件)
// 输入参数:
// 输出参数:
// 返回值     :
// =============================================================================
int  create_thread(void *(*start_routine)(void *),void *arg)
{
    uint16_t threadID;
#error 不能用CN_CFG_MAIN_STACK吧,偷懒。
    threadID = Djy_EvttRegist(EN_CORRELATIVE,CN_PRIO_RRS,0,0,
                                start_routine,NULL,CN_CFG_MAIN_STACK,NULL);

    Djy_EventPop(threadID,NULL,0,arg,0,0);

//  debug_printf("-------------threadID=%d\n",threadID);
    return 0;

}
Ejemplo n.º 9
0
// =============================================================================
// 函数功能:看门狗模块的初始化
// 输入参数:
// 输出参数:
// 返回值  :1成功  0失败
// 说明    :创建看门狗硬件对应的软看门狗。注册看门狗异常信息解析器
// =============================================================================
ptu32_t ModuleInstall_Wdt(ptu32_t para)
{
    bool_t  result_bool;
    u16     evttid;

    g_ptWdtPool = M_Malloc(gc_u32CfgWdtLimit * sizeof(tagWdt),0);
    if(g_ptWdtPool == NULL)
        return 0;
    ptWdtPool = Mb_CreatePool(g_ptWdtPool,gc_u32CfgWdtLimit,sizeof(tagWdt),0,0,"wdt pool");
    //init the queue
    ptWdtHead = NULL;
    ptWdtTail = NULL;
    ptWdtHard = NULL;

    //create the msg box for the api to snd msg to the wdt service task
    ptWdtMsgBox = MsgQ_Create(CN_WDTMSG_LIMIT,sizeof(tagWdtMsg),CN_MSGQ_TYPE_FIFO);

    //create the main service
    evttid = Djy_EvttRegist(EN_CORRELATIVE,CN_PRIO_WDT,0,0,Wdt_Service,
                                NULL,0x1000,"wdt service");
    if(evttid == CN_EVTT_ID_INVALID)
        return 0;
    if( Djy_EventPop(evttid,NULL,0,0,0,0) == CN_EVENT_ID_INVALID)
    {
        printk("WDT MODULE:POP SERVICE FAILED!\n\r");
        Djy_EvttUnregist(evttid);
        return 0;
    }

    //create the soft wdt match the hard wdt
    struct tagWdtHalChipInfo hardpara;
    result_bool = WdtHal_GetChipPara(&hardpara);
    if(true == result_bool)//存在硬件看门狗,则创建硬件看门狗
    {
        fnWdtHardFeed = hardpara.wdtchip_feed;
        ptWdtHard = Wdt_Create(hardpara.wdtchip_name,\
                               hardpara.wdtchip_cycle,\
                               __Wdt_HardWdtYipHook,\
                               EN_EXP_DEAL_IGNORE, NULL);
    }
//todo:此处有警告
    extern bool_t Exp_RegisterThrowinfoDecoder(fnExp_ThrowinfoDecoderModule decoder,const char *name);
    if(false ==Exp_RegisterThrowinfoDecoder(__Wdt_WdtExpInfoDecoder,\
                                            CN_WDT_EXPDECODERNAME))
    {
        printk("WDT MODULE: Register Wdt Exp Decoder Failed!\n\r");
    }

    printk("WDT MODULE:Init end ...\n\r");
    return 1;
}
Ejemplo n.º 10
0
void led_init(void)
{
    GPIO_PowerOn(CN_GPIO_C);
    GPIO_CfgPinFunc(CN_GPIO_C, 6, CN_GPIO_MODE_GPIO_OUT_PP_2Mhz);
    GPIO_CfgPinFunc(CN_GPIO_C, 4, CN_GPIO_MODE_GPIO_OUT_PP_2Mhz);
    GPIO_CfgPinFunc(CN_GPIO_C, 8, CN_GPIO_MODE_GPIO_OUT_PP_2Mhz);
    GPIO_CfgPinFunc(CN_GPIO_C, 9, CN_GPIO_MODE_GPIO_OUT_PP_2Mhz);

    evtt_led = Djy_EvttRegist(EN_CORRELATIVE, CN_PRIO_RRS, 0, 1,
                                led_flash, NULL,1000, "hello led");
    if (evtt_led != CN_EVTT_ID_INVALID)
    {
        event_led = Djy_EventPop(evtt_led, NULL, 0, NULL, 0, 0);
    }
}
Ejemplo n.º 11
0
//----初始化CAN配置参数---------------------------------------------------------
//功能: 初始化CAN配置参数
//参数: pCanPara,CAN控制器配置参数结构体指针
//返回: 成功初始化则返回true,否则则返回false.
//-----------------------------------------------------------------------------
bool_t CAN_Main(void)
{
	uint16_t evtt;
	uint8_t i;
	bool_t ret;
	CanFilterConfPara *pFilterConfPara;
	pFilterConfPara=malloc(sizeof(CanFilterConfPara));
	if(pFilterConfPara==NULL)
	{
		printf("Can Init failed.\r\n");
		return false;
	}
	pFilterConfPara->FilterNumber=0;
	pFilterConfPara->FilterMode=CAN_FILTERMODE_IDMASK;
	pFilterConfPara->FilterScale=CAN_FILTERSCALE_32BIT;
	pFilterConfPara->FilterIdHigh=0x0000;
	pFilterConfPara->FilterIdLow=0x0000;
	pFilterConfPara->FilterMaskIdHigh=0x0000;
	pFilterConfPara->FilterMaskIdLow=0x0000;
	pFilterConfPara->FilterFIFOAssignment=0;
	pFilterConfPara->FilterActivation=1;
	pFilterConfPara->BankNumber=14;

	for(i=0;i<CN_CAN_NUM;i++)
	{
		ret=CAN_Hard_Init(i,125,pFilterConfPara);
		if(!ret)
		{
			printf("Can Init failed.\r\n");
			return false;
		}
	}
	CAN_Shell_Module_Install();
	evtt = Djy_EvttRegist(EN_CORRELATIVE,CN_PRIO_RRS,0,0,__Can_Monitor,
			  CAN_MonitorStack,sizeof(CAN_MonitorStack),"CAN Monitor function");
    if(evtt!=CN_EVTT_ID_INVALID)
    {
	   Djy_EventPop(evtt,NULL,0,NULL,0,0);
    }
    else
    {
	   Djy_EvttUnregist(evtt);
    }

    printf("CAN install OK.\r\n");
    return true;
}
Ejemplo n.º 12
0
int pthread_create(pthread_t  *threadId, const pthread_attr_t *attr,\
       ptu32_t (*taskroutine)(void ),void *arg)
{
    int result = -1;
    u16 evttID;
    u16 eventID;

    evttID = Djy_EvttRegist(EN_CORRELATIVE,CN_PRIO_RRS,0,0,\
                           taskroutine,NULL,0x1000,NULL);
    if(evttID != CN_EVTT_ID_INVALID)
    {
        eventID = Djy_EventPop(evttID,NULL,0,(ptu32_t)arg,0,0);
        if(CN_EVENT_ID_INVALID != eventID)
        {
            if(NULL != threadId)
            {
                *threadId = (evttID<<16)|eventID;
            }
            result = 0;
        }
    }
    return result;
}
Ejemplo n.º 13
0
//----操作系统内核组件配置-----------------------------------------------------
//功能:配置和初始化可选功能组件,在用户工程目录中必须实现本函数,在内核初始化
//      阶段调用。
//      本函数实现内核裁剪功能,例如只要注释掉
//          ModuleInstall_Multiplex(0);
//      这一行,多路复用组件就被裁剪掉了。
//      用户可从example中copy本文件,把不要的组件注释掉,强烈建议,不要删除,也
//      不要修改调用顺序。可以把用户模块的初始化代码也加入到本函数中,建议跟在
//      系统模块初始化后面.
//      有些组件有依赖关系,裁剪时,注意阅读注释.
//参数:无
//返回:无
//---------------------------------------------------------------------------
void Sys_ModuleInit(void)
{
    static struct tagGkWinRsc desktop;
    struct tagDisplayRsc *lcd_windows;
    tagDevHandle char_term_hdl;
    u32 stdinout;
    uint16_t evtt_main;

    //初始化PutChark,Putsk,GetChark,GetsK四个内核级输入输出函数,此后,printk
    //可以正常使用.printf和scanf将调用前述4个函数执行输入输出
    Stddev_KnlInOutInit( 0 );
    //shell模块,依赖:无
    ModuleInstall_Sh(0);
    //文件系统模块,依赖:shell
    ModuleInstall_Djyfs(0);
    //设备驱动模块
    ModuleInstall_Driver(0);
    //多路复用模块,提供类似Linux的epoll、select的功能
    ModuleInstall_Multiplex(0);
    //消息队列模块
    ModuleInstall_MsgQ(0);

    //提供在shell上输出内核信息的功能,依赖:shell模块
    ModuleInstall_DebugInfo(0);

    //异常监视模块,依赖:shell模块
    ModuleInstall_Exp(0);
    //安装异常信息解析器,解析异常模块记录的二进制数据
//    Exp_InfoDecoderInit( );

    //flash文件系统初始化,依赖:文件系统模块,shell模块
    ModuleInstall_DFFSD(0);
    //nand flash驱动,依赖:flash文件系统模块
    ModuleInstall_WinFs(NULL);
    //设置工作路径,依赖:文件系统,且相关路径存在.
    Djyfs_SetWorkPath(gc_pCfgWorkPath);


    //标准IO初始化,不影响printk函数,此后,printf和scanf将使用stdin/out输出和输
    //入,如果裁掉,将一直用PutChark,Putsk,GetChark,GetsK执行IO
    //依赖: 若stdin/out/err是文件,则依赖文件系统
    //      若是设备,则依赖设备驱动
    //      同时,还依赖用来输出信息的设施,例如串口,LCD等
    ModuleInstall_Stddev( 0 );
    ModuleInstall_Cmd(0);

    //打开IO设备,不同的板件,这部分可能区别比较大.
    stdinout = Driver_FindDevice(gc_pCfgStddevName);
    char_term_hdl = Driver_OpenDeviceAlias(stdinout,O_RDWR,0);
    if(char_term_hdl != NULL)
    {
        ModuleInstall_CharTerm((ptu32_t)stdinout);
        Driver_CloseDevice(char_term_hdl);
    }

    //djybus模块
    ModuleInstall_DjyBus(0);
    //IIC总线模块,依赖:djybus
    ModuleInstall_IICBus(0);
    //SPI总线模块,依赖:djybus
    ModuleInstall_SPIBus(0);

    //日历时钟模块
    ModuleInstall_TM(0);
    //使用硬件RTC,注释掉则使用tick做RTC计时,依赖:日历时钟模块
//    ModuleInstall_RTC(0);

    //定时器组件
    ModuleInstall_TimerSoft(0);

//    ModuleInstall_DjyIp(0);

    //键盘输入模块
    ModuleInstall_KeyBoard(0);
    //键盘输入驱动,依赖:键盘输入模块
    ModuleInstall_KeyBoardWindows(0);

    //字符集模块
    ModuleInstall_Charset(0);
    //gb2312字符编码,依赖:字符集模块
    ModuleInstall_CharsetGb2312(0);
    //ascii字符集,注意,gb2312包含了ascii,初始化了gb2312后,无须本模块
    //依赖:字符集模块
//    ModuleInstall_CharsetAscii(0);
    //初始化utf8字符集
//    ModuleInstall_CharsetUtf8(0);
    //国际化字符集支持,依赖所有字符集模块以及具体字符集初始化
    ModuleInstall_CharsetNls("C");


    ModuleInstall_Font(0);                 //字体模块

    //8*8点阵的ascii字体依赖:字体模块
//    ModuleInstall_FontAscii8x8Font(0);
    //6*12点阵的ascii字体依赖:字体模块
//    ModuleInstall_FontAscii6x12Font(0);
    //从数组安装GB2312点阵字体,包含了8*16的ascii字体.依赖:字体模块
    ModuleInstall_FontGb2312_816_1616_Array(0);
    //从文件安装GB2312点阵字体,包含了8*16的ascii字体.依赖:字体模块,文件系统
//    ModuleInstall_FontGb2312_816_1616_File("sys:\\gb2312_1616");
    //8*16 ascii字体初始化,包含高128字节,依赖:字体模块
    //注:如果安装了GB2312,无须再安装
    ModuleInstall_FonAscii8x16Font(0);

    ModuleInstall_GK(0);           //gkernel模块
    //lcd驱动初始化,如果用系统堆的话,第二个参数用NULL
    //堆的名字,是在lds文件中命名的,注意不要搞错.
    //依赖: gkernel模块
    lcd_windows = (struct tagDisplayRsc*)ModuleInstall_Lcd("sim_display",NULL);

    GK_ApiCreateDesktop(lcd_windows,&desktop,0,0,
                        CN_COLOR_RED+CN_COLOR_GREEN,CN_WINBUF_BUF,0,0);

    //触摸屏模块,依赖:gkernel模块和显示器驱动
    ModuleInstall_Touch(0);

    //依赖:触摸屏模块,宿主显示器驱动,以及所依赖的硬件,例如qh_1的IIC驱动.
    //     如果矫正数据存在文件中,还依赖文件系统.
    ModuleInstall_TouchWindows((ptu32_t)"sim touch");

    //看门狗模块,如果启动了加载时喂狗,看门狗软件模块硬件从此开始接管硬件狗.
//    ModuleInstall_Wdt(0);

    //GDD组件初始化
    ModuleInstall_GDD(&desktop,pGddInputDev,sizeof(pGddInputDev)/sizeof(void*));

    evtt_main = Djy_EvttRegist(EN_CORRELATIVE,CN_PRIO_RRS,0,0,
                               __djy_main,NULL,gc_u32CfgMainStackLen,
                               "main function");
    //事件的两个参数暂设为0?如果用shell启动?可用来采集shell命令行参数
    Djy_EventPop(evtt_main,NULL,0,NULL,0,0);

    //用户自己程序的初始化模块,建议放在这里.
    Heap_DynamicModuleInit(0);  //自此malloc函数执行块相联算法
    //至此,初始化时使用的栈,已经被系统回收,本函数就此结束,否则会死得很难看

    return ;
}
Ejemplo n.º 14
0
//----操作系统内核组件配置-----------------------------------------------------
//功能:配置和初始化可选功能组件,在用户工程目录中必须实现本函数,在内核初始化
//      阶段调用。
//      本函数实现内核裁剪功能,例如只要注释掉
//          ModuleInstall_Multiplex(0);
//      这一行,多路复用组件就被裁剪掉了。
//      用户可从example中copy本文件,把不要的组件注释掉,强烈建议,不要删除,也
//      不要修改调用顺序。可以把用户模块的初始化代码也加入到本函数中,建议跟在
//      系统模块初始化后面.
//      有些组件有依赖关系,裁剪时,注意阅读注释.
//参数:无
//返回:无
//---------------------------------------------------------------------------
void Sys_ModuleInit(void)
{
    tagDevHandle char_term_hdl;
    u32 stdinout;
    uint16_t evtt_main;

    //初始化PutChark,Putsk,GetChark,GetsK四个内核级输入输出函数,此后,printk
    //可以正常使用.printf和scanf将调用前述4个函数执行输入输出
    Stddev_KnlInOutInit( 0 );
    //shell模块,依赖:无
    ModuleInstall_Sh(0);
    //文件系统模块,依赖:shell
    ModuleInstall_Djyfs(0);
    //设备驱动模块
    ModuleInstall_Driver(0);
    //多路复用模块,提供类似Linux的epoll、select的功能
    ModuleInstall_Multiplex(0);
  //消息队列模块
    ModuleInstall_MsgQ(0);
    //提供在shell上输出内核信息的功能,依赖:shell模块
    ModuleInstall_DebugInfo(0);
    //异常监视模块,依赖:shell模块
    ModuleInstall_Exp(0);

    //文件系统
    extern ptu32_t ModuleInstall_DFFSD(ptu32_t para);
    extern ptu32_t ModuleInstall_fs_s29glxxx(ptu32_t para);
    ModuleInstall_DFFSD(0);
    ModuleInstall_fs_s29glxxx("easyfs");
    //设置工作路径,依赖:文件系统,且相关路径存在.
    Djyfs_SetWorkPath(gc_pCfgWorkPath);

    ModuleInstall_UART(CN_UART0);
    //标准IO初始化,不影响printk函数,此后,printf和scanf将使用stdin/out输出和输
    //入,如果裁掉,将一直用PutChark,Putsk,GetChark,GetsK执行IO
    //依赖: 若stdin/out/err是文件,则依赖文件系统
    //      若是设备,则依赖设备驱动
    //      同时,还依赖用来输出信息的设施,例如串口,LCD等
    ModuleInstall_Stddev( 0 );
    //打开IO设备,不同的板件,这部分可能区别比较大.
    stdinout = Driver_FindDevice(gc_pCfgStddevName);
    char_term_hdl = Driver_OpenDeviceAlias(stdinout,O_RDWR,0);
    if(char_term_hdl != NULL)
    {
        Driver_CtrlDevice(char_term_hdl,CN_UART_START,0,0);
        Driver_CtrlDevice(char_term_hdl,CN_UART_DMA_USED,0,0);
        //设置串口波特率为115200,
        Driver_CtrlDevice(char_term_hdl,CN_UART_SET_BAUD,115200,0);
        ModuleInstall_CharTerm((ptu32_t)stdinout);
        Driver_CloseDevice(char_term_hdl);
    }

    //djybus模块
    ModuleInstall_DjyBus(0);
    //IIC总线模块,依赖:djybus
    ModuleInstall_IICBus(0);
    //SPI总线模块,依赖:djybus
    ModuleInstall_SPIBus(0);

    //日历时钟模块
    ModuleInstall_TM(0);
//    //使用硬件RTC,注释掉则使用tick做RTC计时,依赖:日历时钟模块
//    ModuleInstall_RTC(0);

    //定时器组件
    extern ptu32_t ModuleInstall_TimerSoft(ptu32_t para);
    ModuleInstall_TimerSoft(CN_TIMER_SOURCE_TICK);

    //看门狗模块,如果启动了加载时喂硬件狗,看门狗软件模块从此开始接管硬件狗.
    ModuleInstall_Wdt(0);

   //网络协议栈组件
    extern  ptu32_t ModuleInstall_DjyIp(ptu32_t para);
    //协议栈组件初始化
    ModuleInstall_DjyIp(0);
    //添加屋里网卡
    extern bool_t ModuleInstall_Tsec(ptu32_t para);
    ModuleInstall_Tsec(1);
    //添加LOOP网卡
    extern bool_t Loop_AddDevShell(char *param);
    Loop_AddDevShell(NULL);

    evtt_main = Djy_EvttRegist(EN_CORRELATIVE,CN_PRIO_RRS,0,0,
                                __djy_main,NULL,gc_u32CfgMainStackLen,
                                "main function");
    //事件的两个参数暂设为0?如果用shell启动?可用来采集shell命令行参数
    Djy_EventPop(evtt_main,NULL,0,NULL,0,0);

    //用户自己程序的初始化模块,建议放在这里.
    Heap_DynamicModuleInit(0);  //自此malloc函数执行块相联算法
    //至此,初始化时使用的栈,已经被系统回收,本函数就此结束,否则会死得很难看
#ifndef DEBUG
    extern void LockSysCode(void);
    LockSysCode();
#endif
//  extern int VncServer_Main();
//  VncServer_Main();
    return ;
}
Ejemplo n.º 15
0
//----组件初始化2-----------------------------------------------------------
//功能:可选组件初始化函数共有3个:
//      1、sys_module_init,在sys_init.c中,参见该函数注释
//      2、prj_module_init,在这里初始化的模块,需要调用跟具体工程相关的代码,例
//          如键盘模块,除了调用module_init_keyboard函数外,还要调用跟硬件相关的
//          module_init_keyboard_hard函数。
//      前两步初始化时,块相联分配方式还没有初始化,驱动中如果用到动态分配,使用
//      的是准静态分配,关于准静态分配的说明,参见mems.c文件。
//      3、run_module_init,参见该函数注释。
//参数:无
//返回:无
//-----------------------------------------------------------------------------
void Sys_ModuleInit(void)
{
	tagDevHandle char_term_hdl;
	u32 stdinout;
	uint16_t evtt_main;

	//初始化PutChark,Putsk,GetChark,GetsK四个内核级输入输出函数,此后,printk
	//可以正常使用.printf和scanf将调用前述4个函数执行输入输出
	Stddev_KnlInOutInit( 0 );
	//shell模块,依赖:无
	Sh_MoudleInit(0);
	//文件系统模块,依赖:shell
	//    Djyfs_ModuleInit(0);
	//设备驱动模块
	Driver_ModuleInit(0);
	//多路复用模块,提供类似Linux的epoll、select的功能
	Multiplex_ModuleInit(0);

	//提供在shell上输出内核信息的功能,依赖:shell模块
	Debug_InfoInit(0);
	//异常监视模块,依赖:shell模块
	Exp_ModuleInit(0);
	//安装异常信息解析器,解析异常模块记录的二进制数据
	Exp_InfoDecoderInit( );

	UART_ModuleInit(CN_UART0);
	UART_ModuleInit(CN_UART1);

	//标准IO初始化,不影响printk函数,此后,printf和scanf将使用stdin/out输出和输
	//入,如果裁掉,将一直用PutChark,Putsk,GetChark,GetsK执行IO
	//依赖: 若stdin/out/err是文件,则依赖文件系统
	//      若是设备,则依赖设备驱动
	//      同时,还依赖用来输出信息的设施,例如串口,LCD等
	Stddev_ModuleInit( 0 );

	//打开IO设备,不同的板件,这部分可能区别比较大.
	stdinout = Driver_FindDevice(gc_pCfgStddevName);
	char_term_hdl = Driver_OpenDeviceAlias(stdinout,O_RDWR,0);
	if(char_term_hdl != NULL)
	{
		Driver_CtrlDevice(char_term_hdl,CN_UART_START,0,0);
		//设置串口波特率为115200,
		Driver_CtrlDevice(char_term_hdl,CN_UART_SET_BAUD,115200,0);
		CharTerm_ModuleInit((ptu32_t)stdinout);
		Driver_CloseDevice(char_term_hdl);
	}

	//djybus模块
	DjyBus_ModuleInit(0);
	//IIC总线模块,依赖:djybus
	ModuleInit_IICBus(0);
	//SPI总线模块,依赖:djybus
	ModuleInit_SPIBus(0);
	SPI_Init();
	IIC0_Init();
//	IIC1_Init();

	//日历时钟模块
//	TM_ModuleInit(0);
	//使用硬件RTC,注释掉则使用tick做RTC计时,依赖:日历时钟模块
//	RTC_ModuleInit(0);

	//定时器组件
//	module_init_timersoft(0);

	//键盘输入模块
	//    Keyboard_ModuleInit(0);
	//键盘输入驱动,依赖:键盘输入模块
	//    module_init_keyboard_hard(0);

	//字符集模块
//	Charset_ModuleInit(0);
	//gb2312字符编码,依赖:字符集模块
//	Charset_Gb2312ModuleInit(0);
	//ascii字符集,注意,gb2312包含了ascii,初始化了gb2312后,无须本模块
	//依赖:字符集模块
	//    Charset_AsciiModuleInit(0);
	//初始化utf8字符集
	//    Charset_Utf8ModuleInit(0);
	//国际化字符集支持,依赖所有字符集模块以及具体字符集初始化
//	Charset_NlsModuleInit("C");

//	Font_ModuleInit(0);                 //字体模块
	//8*8点阵的ascii字体依赖:字体模块
	//    Font_Ascii8x8FontModuleInit(0);
	//6*12点阵的ascii字体依赖:字体模块
	//    Font_Ascii6x12FontModuleInit(0);
	//从数组安装GB2312点阵字体,包含了8*16的ascii字体.依赖:字体模块
	//    Font_Gb2312_816_1616_ArrayModuleInit(0);
	//从文件安装GB2312点阵字体,包含了8*16的ascii字体.依赖:字体模块,文件系统
	//    Font_Gb2312_816_1616_FileModuleInit("sys:\\gb2312_1616");
	//8*16 ascii字体初始化,包含高128字节,依赖:字体模块
	//注:如果安装了GB2312,无须再安装
//	Font_Ascii8x16FontModuleInit(0);


	//看门狗模块,如果启动了加载时喂硬件狗,看门狗软件模块从此开始接管硬件狗.
//	module_init_wdt(0);

	//事件的两个参数暂设为0,如果用shell启动,可用来采集shell命令行参数
	evtt_main = Djy_EvttRegist(EN_CORRELATIVE,CN_PRIO_RRS,0,0,__djy_main,
						   NULL,gc_u32CfgMainStackLen,"main function");
	//事件的两个参数暂设为0,如果用shell启动,可用来采集shell命令行参数
	Djy_EventPop(evtt_main,NULL,0,NULL,0,200);

	Heap_DynamicModuleInit(0);//自此malloc函数执行块相联算法
	//至此,初始化时使用的栈,已经被系统回收,本函数就此结束,否则会死得很难看
	return ;
}