找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1730|回復(fù): 4
收起左側(cè)

IAR for AVR下變量和常量可以像Keil C51一樣使用嗎?

[復(fù)制鏈接]
ID:78835 發(fā)表于 2022-8-13 10:36 | 顯示全部樓層 |閱讀模式
我想達(dá)到的效果時(shí),常量定義下flash里面,然后可以像變量一樣讀取。
和下圖一樣:
下載.png

然而我移植到AVR里面,卻不行。
下圖是AVR的測(cè)試:
下載.png

后面發(fā)現(xiàn)改變Uart_COM1_WR_NByte_F(uint16_t Len,uint8_t const __flash * Array)這個(gè)函數(shù)的指針類型,也可以操作常量。
如下圖:
下載.png

這就導(dǎo)致需要寫2個(gè)函數(shù),一個(gè)是變量指針的函數(shù),一個(gè)常量指針的函數(shù),keil C51 可以2個(gè)函數(shù)通用。而IAR for AVR下不行。


回復(fù)

使用道具 舉報(bào)

ID:78835 發(fā)表于 2022-8-13 10:49 | 顯示全部樓層
查找資料,有人說(shuō)AVR是哈佛結(jié)構(gòu),他的FLASH空間和SRAM空間是重疊的,所以2個(gè)函數(shù)不能通用,要區(qū)分開來(lái),之前以為是我寫法不對(duì),研究了好久,網(wǎng)上的資料大部分是教你如何定義常量到flash,沒(méi)有說(shuō)如何讀取常量。反正我沒(méi)辦法了,只能寫2個(gè)函數(shù)區(qū)別,比如打印函數(shù),寫2個(gè),一個(gè)可以打印變量的數(shù)據(jù),一個(gè)打印常量的數(shù)據(jù),有沒(méi)有大神可以解決這個(gè)問(wèn)題的,讓它變的通用。類似keil_C51 , PIC一樣通用
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2022-8-13 13:32 | 顯示全部樓層
問(wèn)題在于"123",不在于什么結(jié)構(gòu)
IAR和Keil對(duì)于"123"這個(gè)字符串的定義不一樣
IAR沒(méi)有用過(guò),不知道,在Keil中,"123"是被分成"1""2""3"三個(gè)ASCII碼的
而且,Keil也可以識(shí)別"回家"這種中文的字符串,在別的環(huán)境,有的是不行
但如果是C語(yǔ)言,那就是一樣的,沒(méi)有什么指令結(jié)構(gòu)這一說(shuō)的
回復(fù)

使用道具 舉報(bào)

ID:1034262 發(fā)表于 2022-8-13 14:44 | 顯示全部樓層
常量讀取與變量讀取一般不同,51也是不同的。
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2022-8-13 21:09 | 顯示全部樓層
我記得AVR是統(tǒng)一編址的啊,應(yīng)該是AVR可以,51不行。

怎么到你這里就顛倒過(guò)來(lái)了呢?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表