当前位置: 首页 > news >正文

全栈网站开发流行框架北京做网站公司

全栈网站开发流行框架,北京做网站公司,传媒公司网站源码php,网站建设大德通实现系统调试信息打印接口 当系统出错时或者使用内核日志时会输出一些打印信息,这最终都是调用到bspLib.c中的bspDebugMsg 这个接口来实现的,所以我们在开发BSP时,第一个要做的工作就是实现这个接口。 一般的调试信息都是通过串口来输出的&am…
实现系统调试信息打印接口

        当系统出错时或者使用内核日志时会输出一些打印信息,这最终都是调用到bspLib.c中的bspDebugMsg 这个接口来实现的,所以我们在开发BSP时,第一个要做的工作就是实现这个接口。

        一般的调试信息都是通过串口来输出的,所以我们需要实现全志R16平台上串口发送的函数。因为U-Boot在启动时使用串口0输出信息,所以我们这里只要实现串口0的发送函数即可,像串口的时钟、波特率设置等等U-Boot已经帮我们做好了,所以我们这里可以不用关心。另外需要说明的是,在本系列教程中并不会去详细地讲解外设驱动寄存器具体如何设置,我们这里关心的是BSP的框架和开发的整体流程,至于寄存器怎么设置请参考厂商提供的U-Boot或者Linux下的对应代码。

        由于我们现在要实现串口驱动,所以可以在driver 目录下新建一个uart目录用来存放串口驱动文件:

        其中uart.h会被bspLib.c文件使用,我们需要在uart.c中实现串口的轮询发送接口:

#define  __SYLIXOS_KERNEL
#include <SylixOS.h>
#include <linux/compat.h>/*********************************************************************************************************基地址定义
*********************************************************************************************************/
#define UART0_BASE            (0x01c28000)
/*********************************************************************************************************寄存器偏移
*********************************************************************************************************/
#define RBR                   0x0
#define THR                   0x0
#define USR                   0x7CVOID  uartPutChar (CHAR  cChar)
{//  若 FIFO 不满就填入数据,否则等待while (!(readl(UART0_BASE + USR) & BIT(1)));writel(cChar, UART0_BASE + THR);
}VOID  uartPutMsg (CPCHAR  cpcMsg)
{CHAR  cChar;if (!cpcMsg) {return;}while ((cChar = *cpcMsg) != '\0') {uartPutChar(cChar);cpcMsg++;}
}

        最后在bspLib.c中的bspDebugMsg 接口中调用我们实现的串口轮询发送函数即可:

/*********************************************************************************************************
** 函数名称: bspDebugMsg
** 功能描述: 打印系统调试信息
** 输 入  : pcMsg     信息
** 输 出  : NONE
** 全局变量:
** 调用模块:
*********************************************************************************************************/
VOID  bspDebugMsg (CPCHAR  pcMsg)
{/** TODO: 通过 UART 打印系统调试信息*/uartPutMsg(pcMsg);
}

        到此为止我们可以先编译出SylixOS内核镜像来启动了,如果串口上有打印就说明我们最起码能通过打印来调试了。编译BSP工程(当然需要提前先编译好base工程),在Release目录下找到bsp_allwinner_r16.bin 这个文件,这个就是SylixOS内核镜像,将其拷贝到SD卡上,将SD卡插入开发板上,上电通过以下命令启动SylixOS内核:

=> fatload mmc 0:1 40000000 bsp_allwinner_r16.bin
reading bsp_allwinner_r16.bin
3231464 bytes read in 175 ms (17.6 MiB/s)
=> go 40000000

我们就可以在串口上看到SylixOS启动过程中的日志打印:

## Starting application at 0x40000000 ...
longwing(TM) kernel initialize...
kernel low level initialize...
kernel heap build...
semaphore "heap_lock" has been create.
kernel heap has been create 0x40f08c18 (47149928 Bytes).
system heap build...
system heap has been create 0x0 (0 Bytes).
kernel interrupt vector initialize...
kernel high level initialize...
semaphore "sigfdsel_lock" has been create.
thread "t_idle0" has been initialized.
thread "t_idle0" has been start.
thread "t_itimer" has been initialized.
thread "t_itimer" has been start.
semaphore "job_sync" has been create.
thread "t_isrdefer" has been initialized.
thread "t_isrdefer" has been start.
semaphore "job_sync" has been create.
thread "t_except" has been create.
msgqueue "log_msg" has been create.
partition "printk_pool" has been create.
thread "t_log" has been initialized.
semaphore "ios_mutex" has been create.
semaphore "evtfdsel_lock" has been create.
semaphore "bmsgsel_lock" has been create.
semaphore "bmsgd_lock" has been create.
semaphore "semfdsel_lock" has been create.
semaphore "semfd_lock" has been create.
semaphore "tmrfdsel_lock" has been create.
semaphore "hstmrfdsel_lock" has been create.
semaphore "gpiofdsel_lock" has been create.
semaphore "blkio_lock" has been create.
semaphore "autom_lock" has been create.
semaphore "mount_lock" has been create.
semaphore "bus_listlock" has been create.
semaphore "blk_lock" has been create.
semaphore "power_lock" has been create.
semaphore "sel_wakeup" has been create.
thread "t_power" has been create.
semaphore "job_sync" has been create.
semaphore "hotplug_lock" has been create.
semaphore "sel_wakeup" has been create.
thread "t_hotplug" has been create.
semaphore "hpsel_lock" has been create.
semaphore "hotplug_lock" has been create.
system initialized.
semaphore "cpprt_lock" has been create.
semaphore "cond_signal" has been create.
c++ run time lib initialized.
kernel primary cpu usrStartup...
ARM(R) 920 none FPU pri-core initialization.
FPU initilaized.
__vmmVirtualCreate() bug: virtual switich page invalidate.

当然这时候系统是不可能完全启起来的,因为我们现在只是实现了调试信息输出而已。

另外在开发的过程中,可能需要带参数打印一些信息,这时候就不能使用bspDebugMsg 了,这个接口只能打印纯字符串,我们可以使用_PrintFormat 来打印变量值等等信息,用法类似于printf。

IMX6ULL相关的总结:

1,我们这里的打印参照的是正点原子的裸机的串口打印的程序

2,load拷贝数据的时候是放在80000000的地址处,按照的是芯片手册的逻辑。

http://www.yayakq.cn/news/901673/

相关文章:

  • 网站如何让百度抓取网站关键词排名优化软件
  • 昆明网站制作费用展板设计模板
  • 阿里巴巴做轮播网站网站设置手机版
  • 做网站那种语言好网站搜索
  • 好创意的设计网站蜘蛛从网站哪里抓取
  • wordpress怎么找到作者的分类标签四川自助seo建站
  • 四秒网站建设wordpress添加前台漂亮注册页面
  • 门户网站建设思维导图免费换ip软件
  • 安卓网站开发视频教程自己开发电商网站难吗
  • 赣州网上注册公司网站WordPress邮件回复stmp
  • 天元建设集团有限公司劳动合同模板关键词优化排名
  • 沈阳市建设公司网站宁波网站建设选择荣胜网络
  • 做网站分页泰安人才网最新招聘信息2022年
  • 佛山网站建设的首选个人网站可以做淘客
  • 大学生对校园网站建设的需求是什么wordpress 白色主题
  • 网站开发需要什么配置新中式装修效果图
  • 做网站算新媒体运营吗电商系统源码公司哪家好
  • 苏州吴江做网站公司兰州的网站建设
  • 域名注册没有网站html5做网站心得体会
  • 北京手机版网站制作网站建设的一般流程是
  • 淘宝网官方网站电脑版企业网站建设 会计分录
  • 个人 做自媒体 建网站响应式儿童网站源码
  • 字体设计网站有哪些免费wordpress array
  • 网站培训培训班电脑编程培训班学费
  • 专业网站设计团队小程序制作开发如意推
  • 网站正建设中设计网站的结构时
  • 网站后台默认用户名巩义服务专业网站建设
  • 百度收录网站左侧图片网络营销推广哪家比较好
  • 中国站长站官网市场营销ppt模板
  • wordpress 中文站wordpress的媒体选项