單片機與嵌入式的區別
#1:單片機是一種芯片,組成部分有:中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計數器。
#2:大學時學習的是51單片機,出來工作後接觸的是stm32單片機(如STM32F207ZC),嵌入式是一個系統,類比如Linux系統那樣,有文件目錄結構,app可以在上面跑,可以後臺調試查看進程等等。
#3:
一個完整的單片機程序往往需要移植系統進行開發,例如ucos(ucos-II)操作系統,rtos系統等等配合開發。
一個完整的嵌入式系統往往需要重燒系統:uboot,內核,文件系統;然後要考慮接口,接線,裝驅動,裝軟件(app)等等問題。
#4:
一個單片機程序一般都是用keil uvision4,keil uvision5,keil MDK等等軟件進行開發,調試。
一個嵌入式程序一般是用Xilinx SDK進行開發。
#5:
調試單片機和嵌入式程序一般都可以通過串口(如rs232,usb轉ttl串口)進行調試,一般都可以通過j-link進行軟件燒錄。
#6:
k4,k5,sdk可以生成的目標文件可以有:Hex、bin、axf、elf等文件。
keil從0開始新建工程
這篇鏈接寫得很詳細,特地引轉發一下:“STM32F4教程從零開始1——建工程”
https://blog.csdn.net/linxiaobo110/article/details/40349183
stm32標準外設庫
這篇鏈接寫得很詳細,特地引轉發一下:“STM32F20x_StdPeriph_Lib_V3.5.0庫全面解析”
https://blog.csdn.net/u011511430/article/details/17322643
移植ucos-ii
本文例子對應stm32f207zc移植的ucos-ii。
一個簡單的單片機代碼框架
#include "stdio.h"
#include <includes.h>
#include "os_cpu.h"
#include "ucos_ii.h"
static OS_STK TaskStk[1024];
static OS_STK AppTask1Stk[1024];
//任務1線程
void AppTask1(void *p_arg)
{
while(1)
{
//USER_OSTimeDlyHMSM(0, 0, 1, 0);
//to do
}
}
//在這裏創建不同的線程任務
void Task(void *pdata)
{
//創建線程任務1
OSTaskCreate(AppTask1,(void *)0,
&AppTask1Stk[1024-1],
30);
//在這裏創建不同的線程任務,to add
//創建任務n
}
static void init()
{
//初始化LED
//蜂鳴器初始化
//系統時鐘配置
//SRAM初始化
//串口1,2,3等初始化
//初始化網絡
//uc/os初始化
OSInit();
}
int main(void)
{
int ret = 0;
init();
ret = OSTaskCreateExt(Task,
(void *) 0,
&TaskStk[1024-1],
30,
30,
(OS_STK *)&TaskStk[0],
1024,
(void *) 0,
OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
OSStart();
}
自己寫了一個簡單demo鏈接:
https://download.csdn.net/download/Binair2019/12003498