91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

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

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

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

stm32f4ZG 和 cc2530f256的移植教程

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

掃碼添加小助手

加入工程師交流群

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

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

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

(f4)串口1:

圖片

(f4)串口2:

圖片

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

圖片

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

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

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

那就意味著我們所使用的 printf 存在不安全問(wèn)題!當(dāng)然我們?cè)谙到y(tǒng)中可以通過(guò)臨界保護(hù)區(qū)來(lái)處理,也可以通過(guò)信號(hào)量等等處理!

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

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

keil移植printf

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

圖片

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

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

圖片

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

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

圖片

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

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

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

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的。再來(lái)看看串口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;
  }
}

這個(gè) USART3->DR 為stm32串口的寄存器!讀者可參照自己的芯片來(lái)配置!

簡(jiǎn)單就完了!

IAR 配置方法

首先添加文件:

圖片

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

圖片

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

圖片

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

圖片

圖片

在選擇第一個(gè)大框框右邊的那個(gè):

圖片

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

圖片

上面是配置頭文件路徑的,第一個(gè)是絕對(duì)路徑,也就是說(shuō)你工程文件移動(dòng)了,就回到不到了,第二個(gè)是相對(duì)路徑!選第二個(gè)吧!

接著編譯就會(huì)發(fā)現(xiàn)報(bào)錯(cuò)了!!!

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

圖片

此時(shí)在編譯一次,就會(huì)發(fā)現(xiàn)也還是錯(cuò)了!說(shuō)什么沒(méi)定義。

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

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

圖片

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

圖片

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

    關(guān)注

    2293

    文章

    11032

    瀏覽量

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

    關(guān)注

    1

    文章

    401

    瀏覽量

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

    關(guān)注

    3

    文章

    4381

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    CC2530F128使用ZStack需要修改哪些?

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

    CC2530F256RHAR 無(wú)線收發(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中的例程都是針對(duì)CC2530F256的么? ?我現(xiàn)在用的板子是F128的,需要怎么改呢? 我編譯了一下SimpleApp的協(xié)調(diào)器版本,得到如下圖所示結(jié)果,代碼
    發(fā)表于 06-21 12:10

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

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

    請(qǐng)教關(guān)于CC2530F256芯片flash lock bits控制問(wèn)題

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

    CC2530F256RHAR 無(wú)線收發(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 無(wú)線收發(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芯片無(wú)法程序控制flash加解鎖最后16字節(jié)的原因?

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

    CC2530的相關(guān)資料推薦

    超低功耗要求的系統(tǒng)。運(yùn)行模式之間的轉(zhuǎn)換時(shí)間短進(jìn)一步確保了低能源消耗。CC2530F256 結(jié)合了德州儀器的業(yè)界
    發(fā)表于 12-10 08:25

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

    CC2530F256/128,分別具有 256/128KB 的閃存。具有不同的運(yùn)行模式,使得它尤其適應(yīng)超低功耗要求的系統(tǒng)。運(yùn)行模式之間的轉(zhuǎn)換時(shí)間短進(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ù)手冊(cè)

    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無(wú)線射頻收發(fā)RF芯片

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

    CC2530 芯片介紹

    源消耗。 CC2530F256 結(jié)合了德州儀器的業(yè)界領(lǐng)先的黃金單元ZigBee 協(xié)議棧(Z-Stack?),提供了一個(gè)強(qiáng)大和完整的ZigBee 解決方案。 CC2530F64 結(jié)合了德州
    發(fā)表于 01-03 11:00 ?4524次閱讀
    主站蜘蛛池模板: 日本国产黄色片 | 午夜韩国理论片在线播放 | 97理论三级九七午夜在线观看 | 四虎免费影院在线播放 | 天天操天天舔天天射 | 四虎精品成在线播放 | 伊人手机在线观看 | 天天插天天干 | 国产三级日产三级韩国三级 | 久久亚洲精选 | 久久a毛片| 91福利网站 | 扛着高跟鞋丝袜腿呻吟视频 | 色www视频永久免费软件 | 视频一区二区在线播放 | 国产综合成色在线视频 | 美女露出扒开尿口让男人桶 | 婷婷综合亚洲 | 成人三级视频 | 四虎影城库 | 夜色福利久久久久久777777 | 国产黄色在线 | 日本韩国三级在线 | 色多多18免费观看 | 亚洲插| 日本亚洲卡一卡2卡二卡三卡四卡 | 免费看国产一级片 | 中日韩在线视频 | 久久精品屋 | 中文字幕一区二区三区视频在线 | 天天做夜夜爱 | 欧美二级黄色片 | 天天爽夜夜爽视频 | 性色网址 | 一卡二卡三卡四卡无卡在线 | 六月婷婷导航福利在线 | 国产三级久久久精品三级 | 二区在线播放 | 奇米影视四色7777久久精品 | 老师啊灬啊灬用力啊快224视频 | 中文天堂最新版在线精品 |