RT_thread能力认证考试RCEA培训——第二周: 外设+文件系统学习

   要求
   熟悉RT-Thread外设的使用。
   使用开发板上的SPI FLASH做文件系统,熟悉文件系统的使用,熟悉命令。可以参考的文档有:书籍、文档中心


   前提
   熟悉RT-Thread外设的使用。文档中心中提供很多设备的手册,开发板支持的都可以试试。

   熟悉文件系统:

   作业

   作业1:若现在控制台对应的是UART1,如何在UART2上实现控制台功能,请描述?

   实验开发板环境(STM32F103ZET6最小系统板),本来直接想用潘多拉开发板的,无奈很多接口都无法外接出来。

   方法1 .直接通过env配置 

   这个方法也是通过观看直播答疑才知道的,首先我们需要启动env工具来进行使能uart2如下图所示,

注意: 假如你在这里没有看到UART2这个选项怎么办?

这个时候需要手动添加一个外设,在board文件下有一个Kconfig文件,自己仿写一个即可。

可以参考https://www.rt-thread.org/document/site/application-note/driver/pwm/an0037-rtthread-driver-pwm/其中配置的

Kconfig文件。

也可参考相应的关于Kconfig的官方语法文档https://www.rt-thread.org/document/site/programming-manual/kconfig/kconfig/

再通过配置,将控制台名称改为uart2。

 最后保存配置后,再使用命令行重新生成工程

scons --target=mdk5

 

  方法2 .手动修改代码实现 

  1. 通过CubeMX对外设UART2的一个开启配置
  2. 通过修改Kconfig配置文件,添加UART2进去
  3. 通过Env工具开启UART2
  4. 再编译生成新的工程
  5. 最后一步修改默认的控制台对应的UART1 为 UART2

     rtthread_startup();

    ----rt_hw_board_init();

    -----------rt_console_set_device(RT_CONSOLE_DEVICE_NAME);   以上为函数包含关系。

    中修改RT_CONSOLE_DEVICE_NAME宏定义为 "uart2" 即可。

   

 

   作业2

  •    PIN设备:如果开发板上有 user key,请使用按键PIN中断控制led的亮灭。

    关于PIN设备的使用直接参考官方文档即可https://www.rt-thread.org/document/site/programming-manual/device/device/

  •    UART

    官方文档https://www.rt-thread.org/document/site/programming-manual/device/uart/uart/

    需要注意的是RT-Thread 提供的默认串口配置如下,即 RT-Thread 系统中默认每个串口设备都使用如下配置:

/* Default config for serial_configure structure */
#define RT_SERIAL_CONFIG_DEFAULT           \
{                                          \
    BAUD_RATE_115200, /* 115200 bits/s */  \
    DATA_BITS_8,      /* 8 databits */     \
    STOP_BITS_1,      /* 1 stopbit */      \
    PARITY_NONE,      /* No parity  */     \
    BIT_ORDER_LSB,    /* LSB first sent */ \
    NRZ_NORMAL,       /* Normal mode */    \
    RT_SERIAL_RB_BUFSZ, /* Buffer size */  \
    0                                      \
}

  可以根据自己的需求,修改默认参数。但是修改数据缓冲区大小为 RT_SERIAL_RB_BUFSZ一定要在 open 设备之前进行。

#define SAMPLE_UART_NAME       "uart2"    /* 串口设备名称 */
static rt_device_t serial;                /* 串口设备句柄 */
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;  /* 初始化配置参数 */

/* step1:查找串口设备 */
serial = rt_device_find(SAMPLE_UART_NAME);

/* step2:修改串口配置参数 */
config.baud_rate = BAUD_RATE_9600;        //修改波特率为 9600
config.data_bits = DATA_BITS_8;           //数据位 8
config.stop_bits = STOP_BITS_1;           //停止位 1
config.bufsz     = 128;                   //修改缓冲区 buff size 为 128
config.parity    = PARITY_NONE;           //无奇偶校验位

/* step3:控制串口设备。通过控制接口传入命令控制字,与控制参数 */
rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config);

/* step4:打开串口设备。以中断接收及轮询发送模式打开串口设备 */
rt_device_open(serial, RT_DEVICE_FLAG_INT_RX);

 在调试UART时遇到了一个数据分包的问题,具体可以参考这篇博文

https://blog.csdn.net/ylzmm/article/details/103009726

 

  • I2C

   内容较多可参考这篇博文https://blog.csdn.net/ylzmm/article/details/103016082

  • SPI

   内容较多可参考这篇博文

 

作业3:在自己的开发板上使用spi flash 虚拟文件系统FatFS,能使用文件系统的各个命令,提供截图

内容较多具体参考这篇博文https://blog.csdn.net/ylzmm/article/details/103088146

附加作业

完成下面的练习题。

1.定义如下变量和数组:

int k:
mt a[3][3]={9,8,7,6,5,4,3,2,1};

 则下列语句的输出结果足( )。

for(k=0;k<3;k++)
printf("%d",a[k][k]);

 (A) 7 5 3         (B) 9 5 1        (C) 9 6 3          (D) 7 4 1

 答案:  B

 

2.下面程序执行后,s1=( ), s2=( )

float b[]={0.5, 1.6, 2.7, 3.8, 4.9, 5, 6.1,6.2, 7.3, 8.4},sl,s2; 
int i;
for(i=0,sl=s2=0 ; i<9 ; i++ )
{
    if(i % 2)
        sl += ( int ) b[i];
    if(i % 3)
        s2 -= b[i]- (int) b[i];
}

答案: 15.0  -2.7

3.已知int a[][3] = { { 0, 1 }, { 2, 3, 4 }, { 5, 6 }, { 7 } };则 a[2][1]的值是( )
答案:6

4.用直接插入排序方法对下面4个序列进行排序(由小到大),元素比较次数最少的是 ( )

A)    94,32,40,90,80,46,21,69
B)    32,40,21,46,69,94,90,80
C)    21,32,46,40,80,69,90,94
D)    90,69,80,46,21,32,94,40

答案: C

5.编程:输入两个正整数m和n,求其最大公约数和最小公倍数

实现代码:

int main()
{
      int num1,num2,x,y,temp;
      scanf("%d %d",&num1,&num2);
    
      x = num1;
      if(x >num2)
           x = num2;    //x取小的一个数
	
      /*最大公约数*/
      for(int i=x;i>=1;i--)
      {
	if(num1%i==0&&num2%i==0)
	{
		printf("最大公约数 %d",i);
		temp = i; 
		break;
	 } 
      } 
	
      /*最小公倍数*/
      printf("最小公倍数: %d",(num1*num2)/temp);
      return 0;
}

6.设有一个栈,元素依次进栈的顺序为 A 、 B 、 C 、 D 、 E 。下列 是不可能的出栈序列

A)    ABCDE
B)    BCDEA
C)    EABCD
D)    EDCBA

答案  C

7.在一个单链表 HL 中,若要在当前由指针 p 指向的结点后面插入一个由 q 指向的结点,则执行如下 ( ) 语句序列。

A)    p=q; p->next=q;
B)    p->next=q; q->next=p;
C)    p->next=q->next; p=q;
D)    q->next=p->next; p->next=q;

答案 D

8.某公司申请到一个C类地址,但要连接到6个子公司,最大的一个子公司有26台电脑,每个子公司在一个网段中,则子网掩码应该设成()

A)    255.255.255.0
B)    255.255.255.128
C)    255.255.255.192
D)    255.255.255.224

答案 D

解析来自于直播答疑:

1、把子网数目从十进制转化为二进制数。本题6转换成2进制数为110;
2、统计得到的二进制位数N,本题N=3;
3、本题是C类地址,C类子网掩码255.255.255.0起,其中255.255.255为固定前缀,0为主机地址部分。把主机地址部分前N位全部置为1,本题为1110 0000=224(十进制)。
最后得到子网掩码为255.255.255.224

9.单任务系统中两个程序A和B,其中 A程序:CPU:10s -> 设备1:5s -> CPU:5s ->设备2:10s ->CPU:10s; B程序:设备1:10s-> CPU:10s -> 设备2:5s ->CPU:5s ->设备2:10s; 执行顺序为A->B,那么CPU的利用率是()

A)    30%
B)    40%
C)    50%
D)    60%

答案 C

10.ADC转换过程不含哪项( )
(A)采样 (B)量化 (C)编码 (D)逆采样
答案:D


11.Context – M3处理器的寄存器r14代表( )
(A)通用寄存器 (B)链接寄存器 (C)程序计数器 (D)程序状态寄存器

答案:B

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值