看板 ASM 關於我們 聯絡資訊
最近在學習arm assembly,之前有寫過8051,想詢問arm要怎麼使用51的org偽指令功能 我參考了armKEIL官方的compiler reference guide:https://reurl.cc/pW178e 但寫了後,compiler都不會過,不曉得是不是小弟語法使用錯誤,請前輩糾正 程式碼 https://imgur.com/kIEOnc5 https://imgur.com/WqPsL6N 只要加上org這行就會讓編譯產生錯誤 .org 1b + 0x55 LDR R0, = SystemInit BLX R0 或是有沒有其他方法可以指定初始位置?因為我看跳LABEL的地址都是由compiler賦予的 在這先謝謝各位前輩 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.98.225 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/ASM/M.1642605905.A.278.html
Lipraxde: 沒仔細看,不過你文件是 v6,compiler 似乎是 v5 的? 01/20 01:00
breeze08: 你這看起來像是stm32?一般來說是不應該改startup檔才對 01/20 01:37
breeze08: 對,因為這都是固定流程,其中包括了進行C語言的runtim 01/20 01:38
breeze08: e初始化,如果任意更改可能導致啟動行為不正確。如果真 01/20 01:39
breeze08: 的要更改的話首先你要確定你想改的是哪個地方,因此理 01/20 01:41
breeze08: 解硬體上電後的動作是必要的,一般來說上電後會從vecto 01/20 01:42
breeze08: r table中取出Reset handler地址來執行,假如你想更改 01/20 01:43
breeze08: 的是執行你的程式,那你應該直接更改reset handler的內 01/20 01:50
breeze08: 容而非去調整reset handler的地址 01/20 01:51
breeze08: 那假如你現在是要啟動後要跳去指定的地址執行放置在特 01/20 01:53
breeze08: 定地址的程式碼,也就是要直接設定Reset handler本身所 01/20 01:58
breeze08: 在地址的話,那你要更改的應該是linker script的內容 01/20 01:59
breeze08: 你提到的.org指令我沒用過,但其目的應該跟更改linker 01/20 02:02
breeze08: script是類似的 01/20 02:02
descent: 如果你的 arm 是 stm32/cortex-m, 可以參考 01/20 08:59
descent: https://bit.ly/350bKh3 01/20 09:00
student23489: 原來這是V6的compiler!沒注意到這一點,謝謝提醒! 01/20 22:39
student23489: 這顆是公司拿中國那邊開的來給我,不是stm32,但底 01/20 22:40
student23489: 是cortex-M0的架構,查了stm32,開機程式真的超像的 01/20 22:41
student23489: 是否ARM的startup都差不多這樣? 01/20 22:41
student23489: 會選擇在Reset handler這邊側是改地址是因為我習慣 01/20 22:42
student23489: 先跑keil的simulator,看他R0這些暫存器行為跟值 01/20 22:42
student23489: 但常常simulator跑完就直接上機,卻忽略了改這些可 01/20 22:43
student23489: 能會導致啟動問題,感謝breeze大的說明 01/20 22:44
student23489: 也感謝descent大,參考網址內資料後,也讓我找到C可 01/20 22:44
student23489: 以直接用__attribute__((section(.arm.at addres))) 01/20 22:45
student23489: 來定址 01/20 22:45
descent: 不是, arm 有不同系列,startup 都存在一些差異。 01/20 23:23
easypro: 大概是仿stm32的mcu吧。如果是仿的就會很像 主要是記憶 01/23 19:21
easypro: 體起始位置會有差異 01/23 19:21
sorcerer1973: 偽指令?不就給編譯器看的,別學好了。 04/21 16:50