2023年7月25日 星期二

更高效處理 micro second 的方式

更高效處理 micro second 的方式… 

以 STM32 為例…

__IO unsigned long sys_tick = 0;

void SysTick_Handler(void)
{
    HAL_IncTick();
    sys_tick += (SysTick->LOAD + 1);
}

unsigned long  micros_ticks(void)
{
    unsigned long save_sys_tick;
    unsigned long st;

    do
    {
        save_sys_tick = sys_tick;
        st = SysTick->VAL;
    } while (save_sys_tick != sys_tick);
    return (save_sys_tick-st);
}

Get micro second...
micros = micros_ticks()/(SysTick->LOAD + 1) 
or just get ticks for saving cpu calculate time...
microsxconstant = micros_ticks()

*在只需計時的場合直接使用 micros_ticks,可以節省 CPU 運算除法的時間

2023年3月8日 星期三

ArchLinux 安裝筆記

ArchLinux 安裝筆記 

使用 vm 練習 archlinux 安裝…

/// 磁碟分割
fdisk /dev/sda
// gpt 分割表
g
// 建立第一磁區 for /mnt/boot
n
1
ENTER
+512M
yes
// type 改為 EFI
t
uefi
// 建立第二磁區 for /mnt
n
2
ENTER
ENTER
yes
/// 寫入磁碟
w

/// 格式化磁碟
mkfs.fat -F32 /dev/sda1
mkfs.btrfs /dev/sda2

/// mount 磁區到 /mnt
mount /dev/sda2 /mnt

/// mount 磁區到 /mnt/boot
/// 注意!! /mnt/boot 資料夾在這邊就好建好 mount 好,系統才會安裝在正確的位置
mkdir /mnt/boot
mount /dev/sda1 /mnt/boot

/// 安裝基本系統
pacstrap /mnt base linux linux-firmware

/// 設定開機硬碟掛載規則
genfstab -U /mnt >> /mnt/etc/fstab

/// 進到新系統
arch-chroot /mnt

/// 安裝必要的軟體 networkmanager 才能連網
pacman -S sudo nano networkmanager

/// 啟用網路
systemctl enable NetworkManager.service
systemctl start NetworkManager.service

/// 變更 root 密碼
passwd
xxxxxxxx
xxxxxxxx

/// 安裝 grub 開機選單
pacman -S grub efibootmgr

/// 安裝 grub 至 EFI 分區
grub-install --target=x86_64-efi --bootloader-id=GRUB --efi-directory=/boot
grub-mkconfig -o /boot/grub/grub.cfg

/// 收尾
exit
umount /mnt/boot
umount /mnt
shutdown now


2021年10月14日 星期四

One Source, Multi-MCUs

The global chip shortage has turned me into a multi-platform firmware developer.

Zero code modifications.

STM / MM32 / Nuvotone



解決 Google Drive 中文名稱的問題

問題 :

    Google Drive 雲端硬碟檔案串流 在中文環境下預設是「G:\我的雲端硬碟」,磁碟代號可改,但「我的雲端硬碟」卻無法修改,導致有些「非多國語應用程式」無法正確指到檔案路徑。

解決 :

    使用 Windows 內建虛擬磁碟指令將 指定目錄變成一顆磁碟機…

        subst x: G:\我的雲端硬碟

2021年9月13日 星期一

一個奇怪的問題、一種簡單的解法

兩個未知規格的熱敏電阻(10K、20K或50K…未知),熱敏電阻A、熱敏電阻B

如何驗證二顆不同的熱敏電阻規格是一致的?

原來是一個簡單的分壓問題…

測試一、正電-->熱敏電阻A--求分壓a-->熱敏電阻B--負電

測試二、正電-->熱敏電阻B--求分壓b-->熱敏電阻A--負電

測試環境從 100°C~0°C,分壓a 需恆等於分壓b

即可初步判定二顆熱敏電阻規格是一致的

2021年9月9日 星期四

RDM DISCOVERY_COMMAND use Recursive Method

void DiscoveryAll( void ) {     /// unmute all devices : RDM_UnMute()     /// implement DISCOVERY_COMMAND:DISC_UNMUTE    RDM_UnMute( 0xFFFFFFFFFFFF ); 

    /// discovery full range      Discovery( 0, 0xFFFFFFFFFFFE );           }

void Discovery( long long low, long long high ) {     unsigned char res;

    while(1)     {         /// try to discover devices : RDM_Discovery()         /// implement DISCOVERY_COMMAND:DISC_UNIQUE_BRANCH        res = RDM_Discovery( low, high ); 

        if( res == TARGET_IDENTIFIED )    /// target identified                {             /// mute identified target : RDM_Mute()             /// implement DISCOVERY_COMMAND:DISC_MUTE            RDM_Mute(target);                continue;    /// repeat         } else if( res == DETECT_COLLISIONS )    /// detect collisions        {            Discovery( low, (low+high)/2 );    /// discovery low bound            Discovery( (low+high)/2+1, high );    /// discovery high bound        }

        return;    /// finish     } }

更高效處理 micro second 的方式

更高效處理 micro second 的方式…  以 STM32 為例… __IO unsigned long sys_tick = 0; void SysTick_Handler(void) {     HAL_IncTick();     sys_tick += (SysTi...