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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章