在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

stm32f4ZG 和 cc2530f256的移植教程

科技綠洲 ? 來源:一起學嵌入式 ? 作者:一起學嵌入式 ? 2023-06-22 11:47 ? 次閱讀

嵌入式中printf 這種功能強大的函數可謂是c語言庫函數的中的一股清流!也就是太好用了吧!今天分享的例程有 stm32f4ZG 和 cc2530f256,這個兩款芯片的移植例程和移植教程!相信你看完后也可以移植到別的芯片去!

  • 使用的keil版本為:5.21a
  • IAR for 8051 version 為 10.10.1

可能會因為有些版本不同配置就略有所不同!

(f4)串口1:

圖片

(f4)串口2:

圖片

下面這個是TI 的cc2530(就先跑著寄存器版本的吧,協議棧里頭配置差不太多!):

圖片

為啥要移植呢!相信學過實時操作系統的都有所了解,有個叫互斥信號量的東西!就是為了防止同一時間內有兩個寄存器(那十來個寄存器,不是指外設!)在訪問同一塊內存!這個很嚴重的,可能會導致程序死機,或者卡在了某個死循環里面!

我們所使用的 printf 就是首先通過 vsprinf 對我們傳進來的參數進行格式化,我們傳進去多少數據,他按照我們傳進來的格式,格式化后統統存放在一個buf里,如果我們定義了重定向,它就會把這個buf發送至你要發送的地方!

想象一下,如果在某個系統中有一個線程在vsprintf里面運行,突然有一個任務級別比他高的任務把它運行的時間搶了過去!而任務優先級高的任務也在printf里面使用了那個buf,那就會產生上述的問題!

那就意味著我們所使用的 printf 存在不安全問題!當然我們在系統中可以通過臨界保護區來處理,也可以通過信號量等等處理!

但是目前有一個線程安全的函數,擺在你面前,就問你用不用?

那我們的上邊 printf_u1 它是怎么處理的呢?毫無疑問,看代碼就能知道,它是直接發送的,也就是說你傳進來的每一個參數它都會順手就發送出去(當然要看你配置),它的數據將不會存放在一個 buf 里邊,在發送。這就是他給力的地方了!

keil移植printf

首先,我們到文章的末尾獲取到源代碼后,打開 keil 軟件, 點擊 project > Options for… 就能打開一下頁面:

圖片

點擊 C/C++,選擇c99標準。到此為止編譯器配置完畢!

下面來配置代碼部分,打開頭文件為printf.h:

圖片

1,添加這個兩個文件的路徑還有頭文件,如果不懂可以搜搜!

2,點擊圖片上面的printf_ 去它定義的地方,我們要做出一定的修改。

圖片

來到這里之后我們可以看到_vsprintf 這個代碼里面最復雜的就是這一串函數了!

//我們只需要關心第一個參數即可!它是一個函數指針
static int _vsnprintf(out_fct_type out, char* buffer, const size_t maxlen, const char* format, va_list va)
//指向了一個參數為下圖的函數,返回值為void
typedef void (*out_fct_type)(char character, void* buffer, size_t idx, size_t maxlen);

我們只要修改這_putchar 里面的內容即可。參數二是我加上去的為了區分不同的串口類型,有多少個串口就的寫多少個_out_char 這樣的函數(這個是我的方法):

static inline void _out_char(char character, void* buffer, size_t idx, size_t maxlen)
{
  (void)buffer; (void)idx; (void)maxlen;
  if (character) 
  {
    _putchar(character,1);
  }
}

上圖是串口1的。再來看看串口2的:

int printf_u2(const char* format, ...)
{
  va_list va;
  va_start(va, format);
  char buffer[1];
  const int ret = _vsnprintf(u2_out_char, buffer, (size_t)-1, format, va);
  va_end(va);
  return ret;
}
//注意vsprintf第一參數
static inline void u2_out_char(char character, void* buffer, size_t idx, size_t maxlen)
{
  (void)buffer; (void)idx; (void)maxlen;
  if (character) {
    _putchar(character,2);
  }
}

而_putchar 就是我們數據最終流向的地方了!我是這樣寫的。

void _putchar(char character,char sw)
{
  // send char to console etc.
  if(sw == 1)
  {
    while((USART1- >SR&0X40)==0);//循環發送,直到發送完畢
    USART1- >DR = (u8) character;
  }
  if(sw == 2)
  {
  while((USART2- >SR&0X40)==0);//循環發送,直到發送完畢
     USART2- >DR = (u8) character;
  }
  if(sw == 3)
  {
  while((USART3- >SR&0X40)==0);//循環發送,直到發送完畢
     USART3- >DR = (u8) character;
  }
}

這個 USART3->DR 為stm32串口的寄存器!讀者可參照自己的芯片來配置!

簡單就完了!

IAR 配置方法

首先添加文件:

圖片

我在這里起名字為 C_Library。然后在添加文件:

圖片

選擇 printf.c (反正就是添加這個文件,放到哪里看你自己):

圖片

接著就是添加編譯器頭文件路徑:

圖片

圖片

在選擇第一個大框框右邊的那個:

圖片

點擊Click to add。選擇頭文件路徑所在的文件夾后 select,接著就會回到這里:

圖片

上面是配置頭文件路徑的,第一個是絕對路徑,也就是說你工程文件移動了,就回到不到了,第二個是相對路徑!選第二個吧!

接著編譯就會發現報錯了!??!

不要慌!我們首先選擇Options > General Options:

圖片

此時在編譯一次,就會發現也還是錯了!說什么沒定義。

經研究,哦,原來是stdint.h這個頭文件在for 8051 這款工具上,沒有定義64為的無符號整形,那個怎么辦??!

經發現,哦 ,原來注釋這個宏就行!

圖片

程序編譯通過!printf_u0 和stm32 配置類型,無非就是修改一下數據的流向!讀者自己研究一下吧!!

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • STM32
    +關注

    關注

    2272

    文章

    10923

    瀏覽量

    357570
  • 移植
    +關注

    關注

    1

    文章

    383

    瀏覽量

    28193
  • 函數
    +關注

    關注

    3

    文章

    4346

    瀏覽量

    62971
收藏 人收藏

    評論

    相關推薦

    CC2530F128使用ZStack需要修改哪些?

    ZStack-CC2530-2.5.1a中的例程都是針對CC2530F256的么?我現在用的板子是F128的,需要怎么改呢?我編譯了一下SimpleApp的協調器版本,得到如下圖所示結果,代碼量
    發表于 02-23 14:33

    CC2530F256RHAR 無線收發器芯片

    結合了領先的RF 收發器的優良性能,業界標準的增強型8051 CPU,系統內可編程閃存,8-KB RAM 和許多其他強大的功能。CC2530 有不同的閃存版本:CC2530F256/128,分別
    發表于 10-18 10:27

    關于CC2530F128使用ZStack需要哪些修改

    ZStack-CC2530-2.5.1a中的例程都是針對CC2530F256的么? ?我現在用的板子是F128的,需要怎么改呢? 我編譯了一下SimpleApp的協調器版本,得到如下圖所示結果,代碼
    發表于 06-21 12:10

    關于CC2530F256 的內存分配問題

    各位大師:大家好!第一次發帖,請多多包涵。本人最近在做一個項目:利用CC2530F256芯片進行開發,其中要求功能之一為對射頻芯片的IEEE地址進行軟件修改,即對flash的write操作;看了許多
    發表于 08-08 07:49

    請教關于CC2530F256芯片flash lock bits控制問題

    您好:我們在使用CC2530F256芯片時候,將設備發到現場使用155臺有60臺出現flash被擦除而沒有寫入真實數據,導致我們boot和app程序丟失無法正常運行。該問題出現概率相當高且導致項目
    發表于 08-10 06:44

    CC2530F256RHAR 無線收發器芯片

    結合了領先的RF 收發器的優良性能,業界標準的增強型8051 CPU,系統內可編程閃存,8-KB RAM 和許多其他強大的功能。CC2530 有不同的閃存版本:CC2530F256/128,分別
    發表于 02-15 17:27

    CC2530F256RHAR 無線收發器芯片

    結合了領先的RF 收發器的優良性能,業界標準的增強型8051 CPU,系統內可編程閃存,8-KB RAM 和許多其他強大的功能。CC2530 有不同的閃存版本:CC2530F256/128,分別
    發表于 03-23 11:04

    TI CC2530F256芯片無法程序控制flash加解鎖最后16字節的原因?

    您好: 我現在使用CC2530F256芯片,用TI專門的燒寫工具可以對flash加解鎖16字節進行加解鎖操作。但是現在我想通過調用HalFlashWrite()函數軟件控制BANK7的page127
    發表于 08-10 08:14

    CC2530的相關資料推薦

    超低功耗要求的系統。運行模式之間的轉換時間短進一步確保了低能源消耗。CC2530F256 結合了德州儀器的業界
    發表于 12-10 08:25

    CC2530F256RHAR 無線收發器芯片 ZigBee 解決方案

    CC2530F256/128,分別具有 256/128KB 的閃存。具有不同的運行模式,使得它尤其適應超低功耗要求的系統。運行模式之間的轉換時間短進一步確保了低能源消耗。CC2530F256 結合了德州儀器
    發表于 10-11 15:07

    STM32F412ZG Datasheet

    STM32F412ZG Datasheet
    發表于 12-10 13:49 ?38次下載

    CC2530F32 CC2530F64 CC2530F128C產品資料英文版

    CC2530F32 CC2530F64 CC2530F128C產品資料英文版
    發表于 01-26 09:25 ?0次下載

    片上系統SoC芯片CC2530F256數據手冊

    8051 MCU的領先射頻收發器具有優異的性能可編程閃存、8-KB RAM和許多其他強大功能。CC2530有四種不同的閃存版本:CC2530F32/64/128/256,分別具有32/64/128/
    發表于 07-21 15:32 ?3次下載

    CC2530F256RHAR Zigbee物聯網2.4G無線射頻收發RF芯片

    品牌;TI 型號:CC2530F256RHAR 封裝:QFN-40 包裝;2500 CC2530F256RHAR 產品信息:296-24547-2-ND 制造商 Texas Instruments
    的頭像 發表于 11-15 13:02 ?3009次閱讀

    CC2530 芯片介紹

    源消耗。 CC2530F256 結合了德州儀器的業界領先的黃金單元ZigBee 協議棧(Z-Stack?),提供了一個強大和完整的ZigBee 解決方案。 CC2530F64 結合了德州
    發表于 01-03 11:00 ?4034次閱讀
    主站蜘蛛池模板: 四虎国产精品永久在线播放 | www亚洲欲色成人久久精品 | 你懂的网站在线观看 | 欧美一级三级在线观看 | 全免费a级毛片免费看不卡 全日本爽视频在线 | 亚洲福利一区二区 | 嫩草影院播放地址一二三 | 国产精品美女一区二区三区 | 97超频国产在线公开免费视频 | 免费一级特黄特色大片在线观看 | www色在线| 韩国十八禁毛片无遮挡 | 欧美日韩国产另类一区二区三区 | 国产精品伦理一区二区三区 | 黄色3级| www.夜夜操| 特黄特级毛片免费视 | 欧美巨大bbbb动漫 | 好大好硬好深好爽想要免费视频 | 奇米四色7777 | 天天操天天操天天操香蕉 | 五月婷婷综合网 | 色色色色网 | 中文字幕网资源站永久资源 | h在线国产| 特级全毛片| 大色综合色综合网站 | 色偷偷狠狠色综合网 | 糖心vlog麻豆精东影业传媒 | 99久久99久久精品免费看子伦 | 嗯!啊!使劲用力在线观看 | 色天使在线视频 | 免费看黄在线观看 | 成人午夜性视频欧美成人 | 色爱综合区五月小说 | 亚洲国产欧美日韩一区二区三区 | 中文天堂在线观看 | 成在线人视频免费视频 | 色色色色网站 | 亚洲区免费 | 精品四虎免费观看国产高清 |