RT-Thread 能力认证习题总结 ---- 第二周

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

1、需要在menuconfig使能UART2的功能

2、在rtconfig.h中选择UART2作为控制台的输出,如下图:
RT-Thread 能力认证习题总结 ---- 第二周_第1张图片
3、使用putty作为终端显示,显示效果如下图:
RT-Thread 能力认证习题总结 ---- 第二周_第2张图片

作业2:提供代码

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

代码如下:

/* 引脚编号,通过查看设备驱动文件drv_gpio.c确定 */
#define LED_PIN_NUM       24  /* PB8 */
#define KEY_PIN_NUM       25  /* PB9 */
rt_uint8_t  flag_led = 0;   //实现灯的翻转
void led_flash(void)		//缺点,防抖未处理,延时可能会影响系统的正常的运行
{
   if(flag_led)
   {
      flag_led = 0;
      rt_pin_write(LED_PIN_NUM, PIN_LOW);
    }
    else
    {
       flag_led = 1;
       rt_pin_write(LED_PIN_NUM, PIN_HIGH);
    }
}
static void pin_led_sample(void)
{
    /* LED灯引脚为输出模式 */
    rt_pin_mode(LED_PIN_NUM, PIN_MODE_OUTPUT);
    /* 默认低电平 */
    rt_pin_write(LED_PIN_NUM, PIN_LOW);

    /* 按键引脚为上拉输入模式 */
    rt_pin_mode(KEY_PIN_NUM, PIN_MODE_INPUT_PULLUP);
    /* 绑定中断,下降沿模式,回调函数名为led_flash*/
    rt_pin_attach_irq(KEY_PIN_NUM, PIN_IRQ_MODE_FALLING, led_flash, RT_NULL);
    /* 使能中断 */
    rt_pin_irq_enable(KEY_PIN_NUM, PIN_IRQ_ENABLE);
}

- 其他设备:根据开发板的情况,做相关实验。SPI/I2C/UART/…

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

1、ls、mkdir

在这里插入图片描述

2、echo、cat

RT-Thread 能力认证习题总结 ---- 第二周_第3张图片

3、rm

RT-Thread 能力认证习题总结 ---- 第二周_第4张图片

作业4:使用文件系统,将串口中的信息(输入与输出)保存在一个文件中,能读取出来。提供实现代码

利用串口的接收和发送的调转函数。。。

- 作业追加

作业5:完成下面的练习题。


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];
}

答案:s1=23.0 ,s2=-2.7
正确答案: s1=15.0 ,s2=-2.7
错误原因:忘了判断条件i<9,错判为i<=9。

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

答案:感觉是D
答案:C(c的逆序对最少)

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

int main()
{
    int num1,num2;
    int i = 0, j = 0;
	scanf("%d %d",&num1,&num2);
	//判断输入是否在范围
	if((num1<=0) || (num2<=0))
    {
        printf("输入有误");
        return 0;
    }

    //采用暴力破解的策略
	//求最小公倍数
	if(num1>num2)
    {
        i = num1;
    }
    else
    {
        i = num2;
    }
	for(; i>0; i++)
    {
        if((i%num1 == 0) && (i%num2 == 0))
        {
            break;
        }
    }

    //求最大公约数
    if(num1>num2)
    {
        j = num2;
    }
    else
    {
        j = num1;
    }
    for( ; j>1; j--)
    {
        if((num1%j == 0) && (num2%j == 0))
        {
            break;
        }
    }

	//结果输出
    if(i<=0)
    {
        printf("最小公倍数不存在\n");
    }
    else
    {
        printf("最小公倍数是: %d\n",i);
    }
    if(j<=1)
    {
        printf("最大公约数不存在\n");
    }
    else
    {
        printf("最大公约数是: %d\n",j);
    }
    return 0;
}

解:最大公约数为两者的公共因子,用辗转相除法求最大公约数,可根据两者相乘再除以最大公约数得到最小公倍数

int main()
{
	int num1,num2,x,y,temp;
	scanf("%d %d",&num1,&num2);
	x=num1>num2?num1:num2;//x保存较大的数
	y= num1+num2-x;  //y保存较小的数
	while(x!=0){
		temp=y%x;
		y=x;
		x=temp;
	}
	printf("最大公约数:%d\n",y);
	printf("最小公倍数:%d\n",num1*num2/y);

}

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

A) ABCDE

B) BCDEA

C)EABCD

D)EDCBA

答案:C

2.在一个单链表 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


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

A) 255.255.255.0

B) 255.255.255.128

C)255.255.255.192

D)255.255.255.224

答案:D
2的5次方-1 = 31>26,故掩码尾段为11100000=224


1.单任务系统中两个程序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


1.ADC转换过程不含哪项( )

(A)采样 (B)量化 (C)编码 (D)逆采样

答案:D

2.Context – M3处理器的寄存器r14代表( )

(A)通用寄存器 (B)链接寄存器 (C)程序计数器 (D)程序状态寄存器

答案:B

你可能感兴趣的:(RT-Thread学习)