一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

stm32f4ZG 和 cc2530f256的移植教程

科技綠洲 ? 來源:一起學(xué)嵌入式 ? 作者:一起學(xué)嵌入式 ? 2023-06-22 11:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

可能會因?yàn)橛行┌姹静煌渲镁吐杂兴煌?/p>

(f4)串口1:

圖片

(f4)串口2:

圖片

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

圖片

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

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

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

那就意味著我們所使用的 printf 存在不安全問題!當(dāng)然我們在系統(tǒng)中可以通過臨界保護(hù)區(qū)來處理,也可以通過信號量等等處理!

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

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

keil移植printf

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

圖片

點(diǎn)擊 C/C++,選擇c99標(biāo)準(zhǔn)。到此為止編譯器配置完畢!

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

圖片

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

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

圖片

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

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

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

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第一參數(shù)
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 就是我們數(shù)據(jù)最終流向的地方了!我是這樣寫的。

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

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

簡單就完了!

IAR 配置方法

首先添加文件:

圖片

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

圖片

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

圖片

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

圖片

圖片

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

圖片

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

圖片

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

接著編譯就會發(fā)現(xiàn)報錯了?。?!

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

圖片

此時在編譯一次,就會發(fā)現(xiàn)也還是錯了!說什么沒定義。

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

經(jīng)發(fā)現(xiàn),哦 ,原來注釋這個宏就行!

圖片

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

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2293

    文章

    11032

    瀏覽量

    364907
  • 移植
    +關(guān)注

    關(guān)注

    1

    文章

    401

    瀏覽量

    28691
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4381

    瀏覽量

    64866
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    CC2530F128使用ZStack需要修改哪些?

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

    CC2530F256RHAR 無線收發(fā)器芯片

    結(jié)合了領(lǐng)先的RF 收發(fā)器的優(yōu)良性能,業(yè)界標(biāo)準(zhǔn)的增強(qiáng)型8051 CPU,系統(tǒng)內(nèi)可編程閃存,8-KB RAM 和許多其他強(qiáng)大的功能。CC2530 有不同的閃存版本:CC2530F256/128,分別
    發(fā)表于 10-18 10:27

    關(guān)于CC2530F128使用ZStack需要哪些修改

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

    關(guān)于CC2530F256 的內(nèi)存分配問題

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

    請教關(guān)于CC2530F256芯片flash lock bits控制問題

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

    CC2530F256RHAR 無線收發(fā)器芯片

    結(jié)合了領(lǐng)先的RF 收發(fā)器的優(yōu)良性能,業(yè)界標(biāo)準(zhǔn)的增強(qiáng)型8051 CPU,系統(tǒng)內(nèi)可編程閃存,8-KB RAM 和許多其他強(qiáng)大的功能。CC2530 有不同的閃存版本:CC2530F256/128,分別
    發(fā)表于 02-15 17:27

    CC2530F256RHAR 無線收發(fā)器芯片

    結(jié)合了領(lǐng)先的RF 收發(fā)器的優(yōu)良性能,業(yè)界標(biāo)準(zhǔn)的增強(qiáng)型8051 CPU,系統(tǒng)內(nèi)可編程閃存,8-KB RAM 和許多其他強(qiáng)大的功能。CC2530 有不同的閃存版本:CC2530F256/128,分別
    發(fā)表于 03-23 11:04

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

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

    CC2530F256RHAR 無線收發(fā)器芯片 ZigBee 解決方案

    CC2530F256/128,分別具有 256/128KB 的閃存。具有不同的運(yùn)行模式,使得它尤其適應(yīng)超低功耗要求的系統(tǒng)。運(yùn)行模式之間的轉(zhuǎn)換時間短進(jìn)一步確保了低能源消耗。CC2530F256 結(jié)合了德州儀器
    發(fā)表于 10-11 15:07

    STM32F412ZG Datasheet

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

    CC2530F32 CC2530F64 CC2530F128C產(chǎn)品資料英文版

    CC2530F32 CC2530F64 CC2530F128C產(chǎn)品資料英文版
    發(fā)表于 01-26 09:25 ?0次下載

    片上系統(tǒng)SoC芯片CC2530F256數(shù)據(jù)手冊

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

    CC2530F256RHAR Zigbee物聯(lián)網(wǎng)2.4G無線射頻收發(fā)RF芯片

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

    AN4904_從STM32F1到STM32F4的軟件移植

    AN4904_從STM32F1到STM32F4的軟件移植
    發(fā)表于 11-21 17:06 ?5次下載
    AN4904_從<b class='flag-5'>STM32F</b>1到<b class='flag-5'>STM32F4</b>的軟件<b class='flag-5'>移植</b>

    CC2530 芯片介紹

    源消耗。 CC2530F256 結(jié)合了德州儀器的業(yè)界領(lǐng)先的黃金單元ZigBee 協(xié)議棧(Z-Stack?),提供了一個強(qiáng)大和完整的ZigBee 解決方案。 CC2530F64 結(jié)合了德州
    發(fā)表于 01-03 11:00 ?4524次閱讀