stm32 Coocox CoOS

Started by tha, July 05, 2014, 08:37:21 AM

Previous topic - Next topic

tha

ทำไปทำมามีความก้าวหน้า ก็เลยมาลองเล่น RTOS ดูบ้าง ตัวที่ลองก็ตามที่คุณ AppleIIe แนะนำคือ CoOS http://www.coocox.org/CoOS.htm ดาวน์โหลด Coocox CoOS User's Guide มาอ่านก็พอจะเข้าใจบ้างเพราะเคยอ่าน RTX RTOS มาบ้างแล้ว คราวนี้ก็เลยดาวน์โหลดโปรแกรมตัวอย่างที่ใช้ GCC compiler กับ stm32f103rb มาลองศึกษาดู พอลอง compile ดู จะไม่ผ่านเกิด build fail ขึ้นตามรูป



ให้ไปที่ configulation -> output เปลี่ยนไดเรคทอรีของ path of excutable ไปเป็น folder ของตัวอย่างเรา (จะเห็นว่าเขาใช้บอร์ด ET-STM32F103RB ทำเป็นตัวอย่างนี้)



คราวนี้ลอง compile ก็จะ build fail อย่างนี้อีก



เนื่องจากฟังชั่น STREXB กับ STREXH ในไฟล์ core_cm3.c ไม่ได้แก้ใขให้เป็นตัวใหม่ ก็ต้องแก้ใขตามนี้ครับ

/**
* @brief  STR Exclusive (8 bit)
*
* @param  value  value to store
* @param  *addr  address pointer
* @return        successful / failed
*
* Exclusive STR command for 8 bit values
*/
uint32_t __STREXB(uint8_t value, uint8_t *addr)
{
   uint32_t result=0;
 
   //__ASM volatile ("strexb %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );
   __ASM volatile ("strexb %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
   return(result);
}

/**
* @brief  STR Exclusive (16 bit)
*
* @param  value  value to store
* @param  *addr  address pointer
* @return        successful / failed
*
* Exclusive STR command for 16 bit values
*/
uint32_t __STREXH(uint16_t value, uint16_t *addr)
{
   uint32_t result=0;
 
   //__ASM volatile ("strexh %0, %2, [%1]" : "=r" (result) : "r" (addr), "r" (value) );
   __ASM volatile ("strexh %0, %2, [%1]" : "=&r" (result) : "r" (addr), "r" (value) );
   return(result);
}


http://www.cesareriva.com/fix-registers-may-not-be-the-same-error/

คราวนี้ก็ compile ผ่านแล้ว ตอนนี้ผมก็กำลังทำความเข้าใจกับรายละเอียดของโปรแกรมอยู่ ยังไม่ได้โหลดโปรแกรมเข้าบอร์ดเพราะบอร์ดผม RTC module มันพังอยู่คงต้องซื้อบอร์ดใหม่มาลอง

thai_micro

สู้ๆ ครับ ได้ผลอย่างไร เอามาตีแผ่ ด้วยนะครับ

man1400



tha

ต้องไปทำงานหาเงินมาซื้อบอร์ดใหม่ก่อน  ดูแล้วไม่ยากอ่านให้เข้าใจก่อน(แต่ก็เข้าใจยากเหมือนกัน พอดีผมอ่าน cmsis rtos 2 เล่มในนี้มาก่อนก็เลยพอจะเข้าใจ แต่ก็ไม่แน่ไปทำงานอาจมีลืม) ถ้าใครมีบอร์ด ET-STM32F103RB ก็ลองโปรแกรมดูผลได้บอร์ดเดียวกัน ไม่น่าจะมีปัญหา  ;D

mculover

ขอฝากข้อมูลไว้เพื่อตัดสินใจครับ

เท่าที่เคยเช็คใน Supported Devices
CooCox ไม่รองรับชิบตัวใหม่ๆ เช่น Cortex-M4 โดยเฉพาะค่าย ST มี Cortex-M3 อย่างเดียว ไม่มี Cortex-M0
ของ NXP ยังมี Cortex-M0 / Cortex-M3 แต่ก็ไม่มี Cortex-M4 เหมือนกัน

ถ้าจะใช้ยาวๆ มีทางเลือกที่ยืดหยุ่นมากกว่า ไม่แนะนำ
ให้ไปเล่น FreeRTOS หรือ ChibiOS จะปลอดภัยกว่าครับ

AppleIIe

ขอให้กำลังใจในความพยายามที่จะศึกษาครับ
นับว่าท่านได้ก้าวข้ามความลำบากไปบ้างแล้ว (แต่อย่าเพิ่งย่ามใจนะ ยังมีอะไรซ่อนอยู่อีก) และคงไปสู่ความสำเร็จในไม่ช้า
ซึ่งก็ถือเป็นการเริ่มต้นที่ดี

อย่าลืมว่า CooCox CoOS เพิ่งจะมีมาไม่นานนัก มีการปรับปรุงแก้ไขไม่มาก แก้ bug กันมาโดยตลอด ( API ไม่ค่อยมีเพิ่ม Kernel ไม่ค่อยเปลี่ยน ) (ตั้งแต่  V1.0 - August 11 , 2009 http://www.coocox.org/CoOSGuide/CoOSUpdates.htm )  ดังนั้นคิดเห็นว่ามันจะยังไม่สลับซับซ้อนมากนัก
(หากจะเทียบกับตัวอื่นๆ ที่มีมาก่อนหลายปีมาแล้ว บางตัวมากกว่า 10 ปี) ซึ่งอาจจะยังไม่ทำให้ท่านไม่ท้อไปเสียก่อน หากไปเริ่มต้นกับตัวอื่นๆท่านอาจหมดแรงเสียก่อนในการอ่านเอกสารกองโต (ทั้ง API ที่มีมากมาย , Example ของแต่ละเรื่อง รวมไปถึงการตั้งค่าอีกไม่น้อย) แต่โดยหลักๆที่ท่านควรทำความเข้าใจคือ Concept ของ RTOS หากเข้าใจได้ทะลุแล้ว จะเป็นพื้นฐานที่ท่านจะไปสู่ตัวอื่นๆได้โดยไม่ยาก และไม่ต้องไปยึดติดกับตัวหนึ่งตัวใด (ซึ่งแต่ละตัวย่อมมีข้อดีและข้อเสียของมันทั้งในเรื่องทาง Technic , ค่าใช้จ่ายและเวลาในการศึกษา) ซึ่งแม้แต่ CooCox OS ก็น่าจะยังตอบโจทย์ทั่วๆไปได้อยู่ แม้อาจจะมีข้อจำกัดอยู่บ้าง แต่ก็คิดเห็นว่าเป็นการเริ่มต้นเรื่อง RTOS ที่ดีพอสมควร

ต่อจากนี้อย่างน้อยข้อมูลที่ท่านทำเป็นร่องรอยทิ้งไว้ ย่อมมีประโยชน์ต่อผู้คนภายหลังที่อาจจะนำไปศึกษาต่อ จะได้ไม่ต้องหลงทางกันไปอีก ทำให้เขาเหล่านั้นที่จะลงมือทำตามหลังจากนี้ จะได้มีข้อมูลในการเริ่มต้นทำ เพราะกว่าจะสำเร็จได้ มันต้องมีจุดเริ่มต้นเสมอ
"Stay Hungry, Stay Foolish"
จงกระหาย และ ทำตัวโง่ให้ตลอดเวลา
"Innovation distinguishes between a leader and a follower."
นวัตกรรมแยกผู้นำกับผู้ตามออกจากกัน

คนฉลาด...ต้องโง่เป็น คนโง่ไม่เป็น...จะไม่มีทางฉลาด

tha

เคยเริ่มต้น RTOS กับ chibiOS กับบล๊อกของคูณ mculover นั่นแหละ แต่ไม่เป็น makefile พอไม่ได้จับไปนานๆก็ลืม ไปต่อไม่เป็นเพราะผมไม่ได้เรียนโปรแกรมเมอร์มาโดยตรง ใจก็อยากศึกษา chibiOS แบบจริงจังเหมือนกันเพราะมีตัวอย่างและเอกสารให้ พอศึกษาอย่างอื่นด้วยก็ไปไม่ไหว ผมก็เพิ่งเริ่มต้นยังไม่ชำนาญยังไม่รู้ว่าตัวไหนดีที่สุด แต่จะพยายามศึกษา CoOS ให้ชำนาญไปสักตัวก่อน(แค่นี้ก็เป็นปลื้มแล้ว) เพราะดูแล้วไม่ค่อยยากสักเท่าไหร่และก็เป็นตัวฟรีใช้กับ CoIDE ได้(เคยศึกษา RTX and CMSIS RTOS มาแล้วแต่ไม่ได้เอาไปใช้งาน)
CoOS ก็มีคนเอาไปใช้กับ stm32f4discovery ได้นะครับ มีตัวอย่างให้ด้วย http://www.mikrocontroller.net/topic/274191
โปรเจ็ค Mini-STM32 WAVE Audio Player ก็น่าสนใจครับมีตัวอย่างให้ด้วย http://projectproto.blogspot.com/2010/06/mini-stm32-wave-audio-player.html

wlasoi

ผมชอบ http://www.tnkernel.com  ง่ายดี .. สารพัด MCU มีทุกค่ายดังๆ ..  ;D