要求
熟悉RT-Thread外設的使用。
使用開發板上的SPI FLASH做文件系統,熟悉文件系統的使用,熟悉命令。可以參考的文檔有:書籍、文檔中心
前提
熟悉RT-Thread外設的使用。文檔中心中提供很多設備的手冊,開發板支持的都可以試試。
熟悉文件系統:
- 文件系統資料:https://www.rt-thread.org/document/site/programming-manual/filesystem/filesystem/
- 文件系統應用:https://www.rt-thread.org/document/site/application-note/components/dfs/an0012-dfs/
作業
作業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 .手動修改代碼實現
- 通過CubeMX對外設UART2的一個開啓配置
- 通過修改Kconfig配置文件,添加UART2進去
- 通過Env工具開啓UART2
- 再編譯生成新的工程
- 最後一步修改默認的控制檯對應的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