Home | Notifications | New Note | Local | Federated | Search | Logout
SASANO Takayoshi@uaa@social.mikutter.hachune.net
OpenBSD(uaa@), Ham(JG1UAA), Ingress(Lv14, RES), Japanese(Sagamihara-city, Kanagawa)
Another side: https://social.tchncs.de/@uaa
npub1rarr265r9f9j6ewp960hcm7cvz9zskc7l2ykwul57e7xa60r8css7uf890
Messages from this Mastodon account can read via mostr.pub with npub1j3un8843rpuk4rvwnd7plaknf2lce58yl6qmpkqrwt3tr5k60vfqxmlq0w
Joined: 2026-01-01 23:18:25
387 notes, 1 following, 0 followers
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 15:44:52)
-fno-inline →起動しない
-fno-stack-protector, -ftrivial-auto-var-init=zeroないしuninitialized→tx ng
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 15:26:52)
@teobot memset/memcpy以外に、メモリアクセスに関連した最適化の違いはありますか?
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 15:07:14)
@teobot 再度の質問失礼します。ARMv7-Mにおける、gcc-13とgcc-14、最適化周りの違いについて教えてください。
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 15:06:29)
Arm GNU toolchain:
11.3 trx ok
12.3 trx ok
13.3 trx ok
14.3 tx ng rx ok
15.2 tx ng rx ok
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 13:28:53)
@teobot gcc-12相当の最適化を、gcc-14で行う場合…gcc-14で無効化する必要のある最適化オプションは何があるでしょう?
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 13:16:09)
@teobot __aeabi_memcpyは…ビルトイン関数ですよねえ?
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 13:01:04)
@teobot gcc側ではなくlibc(picolibc)側のmemcpyを強制的に使わせるには-fno-builtin-functionsでは不十分ですか?
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 12:55:55)
@teobot memset()やmemcpy()等の最適化…built-in function周りの違いはありますか?
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 12:31:18)
@teobot arm-none-eabi, ARMv7-M環境向けで、gcc-12, gcc-13, gcc-14の変更点で特に大きなものは何があるでしょう?
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 12:30:37)
うーん、fsl_dspi.cを-O0とする…gcc-12→13/14化した場合に何か挙動が変わったとかその辺を追うしかないのかな
Reply to @uaa@social.mikutter.hachune.net
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 12:26:49)
hardware/も無関係と。
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 12:21:49)
functions/, interfaces/は確認済、-O0化しても動作変わらず
Reply to @uaa@social.mikutter.hachune.net
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 11:46:38)
fsl_gpio.cの-O0化は不要(試したけど効果無し)。fsl_common_arm.c, fsl_notifier.c, fsl_pmc.c, fsl_rcm.c, fsl_uart.c以外の-O0化は試す価値があるのかも。
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 11:45:01)
fsl_dspi.cとfsl_common_arm.cを最新のSDKに同梱されている物に置き換えても-fsl_dspi.cの-O0は必須…なので、置き換えは不要。
Reply to @uaa@social.mikutter.hachune.net
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 11:20:22)
fsl_dspi.c、これは-O0が必要か。ってことは…OpenGD77に入ってるKinetis SDKの更新とかも要るのかもしれないねえ。
Reply to @uaa@social.mikutter.hachune.net
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 11:02:54)
…ってことは、MCUXpressoの最新版でビルドすると送信できなくなるという問題と、-Os効かせると受信できなくなる問題は別軸だな。
Reply to @uaa@social.mikutter.hachune.net
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 11:02:18)
../source/interfaces/clockManager.c \
../source/interfaces/gpio.c \
../source/interfaces/interrupts.c \
../source/interfaces/settingsStorage.c \
../source/main.c \
../source/semihost_hardfault.c \
../startup/startup_mk22f51212.c
この中のどれかが、最適化すると受信できなくなるという問題を抱えているっぽい。
Reply to @uaa@social.mikutter.hachune.net
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 11:01:23)
../lists/fsl_component_generic_list.c \
../osa/fsl_os_abstraction_free_rtos.c \
../source/SeggerRTT/RTT/SEGGER_RTT.c \
../source/SeggerRTT/RTT/SEGGER_RTT_printf.c \
../source/SeggerRTT/Syscalls/SEGGER_RTT_Syscalls_GCC.c \
../source/dmr_codec/codec_interface.c \
../source/firmware.c \
../source/functions/sound.c \
../source/hardware/SPI_Flash.c \
../source/hardware/UC1701_transfer.c \
Reply to @uaa@social.mikutter.hachune.net
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 11:01:11)
../drivers/fsl_common_arm.c \
../drivers/fsl_dspi.c \
../drivers/fsl_notifier.c \
../drivers/fsl_pmc.c \
../drivers/fsl_rcm.c \
../drivers/fsl_rtc.c \
../drivers/fsl_uart.c \
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-22 10:59:07)
うーん、libc-nanoではなくpicolibc前提になりそう。
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-21 16:28:40)
const static uint32_t hogefuga[] = {
0,
0,
0,
}
みたいなやつ、ARMv7-Mだと
const uint32_tで宣言してスタック上に定数領域を作らせる方がコードサイズが小さい(その分スタックは食うが)という…なかなかこれは興味深いな。
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-21 15:53:17)
やっぱR12の問題かなあ。
0→動かない
1→動く
0x7fffffff→動く
0x80000000→動く
0xffffffff→動く
…なるほど、R12はnon-zero valueであること、かな?
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-21 15:22:28)
push {r4-r11}/pop {r4-r11}→push{r3-r11}/pop {r3-r11}は問題なし
ってことはSPのアライメントの問題は多分無いんだろうな。
push {r4-r11}/pop {r4-r11}→push{r4-r12}/pop {r4-r12}は問題なし
…r12は壊すとイクナイって気がしていたんだが…?
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-21 13:18:01)
main()実行前に
*((volatile unsigned long)0xe000e008) = 0x00000002;でACTLR.DISDEFWBUF=1としても送受信の音は鳴らない。
これを取っ払って(デフォルトではこんな設定は無い)、gpio操作の後に__DSB()を入れても変わらない…ってことは、それ以外の問題だろうかねえ。
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-21 13:02:34)
とりあえず、Debian-12上でOpenDM1801-R20240908をビルドして(MCUXpresso抜きで!)動かすところまでは何とかたどり着けました。
何故か動かなかった件に関しては、最新版のOpenDM1801バイナリを書き込んでからR20240908を書き込むことで動くようになったという謎状態。最適化をいじったり、Debian-13でビルドすると動かないのは相変わらず。
まずは、"bl absolute-addr"周りの問題を潰した状態の動くコードを手に入れて、スタートラインにどうにか立てた…そんな状況です。
https://github.com/jg1uaa/opengd77-noxpresso/commit/69e627b1dbd2d53b659d9c80617b265319d4e708
Reply to @uaa@social.mikutter.hachune.net
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-21 10:24:44)
@teobot asm volatile (
"PUSH {R4-R11}\n"
"MOV R0, %0\n"
"MOV R1, R0\n"
"MOVS R2, #0\n"
"MOV R3, %1\n"
"MOVS R12, %2\n" // clear N, Z flag
"SUB SP, SP, #0x14\n"
"BLX R12\n"
"ADD SP, SP, #0x14\n"
"POP {R4-R11}"
:
: "r"(bitbuffer_encode),
"r"(ambebuffer_encode_ecc),
"r"(AMBE_ENCODE_ECC)
: "memory", "cc", "r0", "r1", "r2", "r3", "r12"
);
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-21 10:24:29)
@teobot このコードと、次に送るコードの比較をお願いします。
asm volatile (
"MOV R0, %0\n"
"MOV R1, %1\n"
"PUSH {R4-R11}\n"
"SUB SP, SP, #0x14\n"
"MOV R3, R1\n"
"LDR R2, =0\n"
"MOV R1, R0\n"
"BL " QU(AMBE_ENCODE_ECC) "\n"
"ADD SP, SP, #0x14\n"
"POP {R4-R11}"
:
: "r"(bitbuffer_encode),
"r"(ambebuffer_encode_ecc)
: "memory"
);
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-20 22:27:40)
OpenGD77というよりもMCUXpressoのSDKか何かに入ってるfsl_gpio.h、GPIO_PinWrite()の処理の後にdsb命令が一切ないんですね…
単にGPIOをon/offするだけならそれでも良いんでしょうけど、複数のGPIOを、順番に従ってon/offする場合はこれだとかなり困ります。
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-19 20:15:34)
でもとりあえずOpenGD77(OpenDM1801)はこっちでは凍結させたいなあ。ちゃんと動いてるならこちらで手を出す必要性が皆無になっちゃったし。alternativeな手段の確保、という意味では続けておきたいのだけど…ちょっと本業+電気通信術の方にリソース割きたいし。
SASANO Takayoshi@uaa@social.mikutter.hachune.net (2026-02-19 20:14:13)
うーむ、.cprojectから、ビルド対象となるファイル名とgccの最適化オプションを指定するためのキーワードを抽出するしかないかも。
なんとなくだけど、-Osするものが.cprojectに書いてあって、そうでなければ-O0でビルドしてる感じ。-Osの方が数が多いので逆の方がありがたいんですけどおおおおおおおおおおおおおおおお
Older Notes