Main Menu
Menu

Show posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Show posts Menu

Messages - AppleIIe

#1
เก่งมากครับ ทำเองจนสำเร็จได้ หวังว่าจะได้ความรู้มาแบ่งปันกันบ้างนะครับ  :)
#2
ยอดเยี่ยมเลยครับท่าน firmware

Quote
และโปรแกรมแบบ state machine นี้ หากเกิด interrupt จะต้องระวังอะไรเป็นพิเศษ เหมือนพวก RTOS ไหมครับ ?

ขอเสริมต่ออีกนิด โปรแกรมแบบนี้ มันจะเป็น co-operative เวลาเกิด interrupt จึงไม่ต้องระวังอะไรมากนัก
ต่างกับ RTOS ที่เป็นแบบ preemptive อันนี้ต้องระวังให้มากขึ้นครับ
#3
    หลังจาก สถานการณ์ โลกเกี่ยวกับไวรัส Ebola กำลังดำเนินไป และอาจจะมีความเข้มข้นขึ้นเรื่อยๆ
มาหาความรู้และความบันเทิงกันดีกว่าจากภาพยนต์เรื่อง Outbreak ซึ่งเป็นภาพยนต์ ที่ออกฉายมาตั้งแต่ปี ค.ศ.1995(พ.ศ. 2538) หรือเกือบ 20 ปีแล้ว เชื่อว่าหลายคนอาจจะลืมไปแล้ว ซึ่งภาพยนต์กล่าวถึง ภัยจากไวรัสมรณะ ในระดับ BL4 ดูกันได้ที่นี่

ชม Online เรื่อง Outbreak กันได้ครับ

เมื่อดูจบแล้วคงได้ข้อคิดดีๆกันบ้างนะครับ ....   :)

#4
ARM Processors / Re: stm32 mp3
July 27, 2014, 09:38:05 PM
หลายท่านอธิบายเรื่อง static ไปแล้วไม่ขอกล่าวซ้ำ ขอต่อในเรื่อง volatile เป็นหลักก็แล้วกันครับ

ข้อแตกต่างระหว่าง static และ volatile ลองศึกษาดูครับ
http://wiki.answers.com/Q/What_is_the_difference_between_static_variables_and_volatile_variables

ข้อแนะนำในการใช้ volatile
http://en.wikipedia.org/wiki/Volatile_variable
http://www.barrgroup.com/Embedded-Systems/How-To/C-Volatile-Keyword

และหากเป็นไปได้ และหากได้มีการออกแบบจัด memory หรือวาง I/O ได้ดีแล้ว
การใช้ volatile ก็ไม่จำเป็นมากนัก และพยายามใช้ให้น้อยที่สุดครับ
หรือใช้ตามความจำเป็นจริงๆจะดีกว่า (ควรใช้ตามที่แนะนำจากข้อมูลก่อนหน้า)
https://www.kernel.org/doc/Documentation/volatile-considered-harmful.txt

แต่สำหรับการเขียนกับพวกประเภท mutitask แล้ว volatile ก็ถือเป็นเพื่อนที่ดีเลยครับ(C++)
http://www.drdobbs.com/cpp/volatile-the-multithreaded-programmers-b/184403766

เสริมเพื่อความเข้าใจ
http://stackoverflow.com/questions/16259939/const-volatile-register-volatile-static-volatile-in-c

หรือหากท่าน tha ได้ลองทำ dissasm และอาจลองปรับการ optimize ของ compiler เพื่อให้เห็นการทำงานและลองศึกษาดู ท่านน่าจะเข้าใจได้มากขึ้นครับ
#5
ARM Processors / Re: stm32 Coocox CoOS
July 06, 2014, 08:54:19 AM
ขอให้กำลังใจในความพยายามที่จะศึกษาครับ
นับว่าท่านได้ก้าวข้ามความลำบากไปบ้างแล้ว (แต่อย่าเพิ่งย่ามใจนะ ยังมีอะไรซ่อนอยู่อีก) และคงไปสู่ความสำเร็จในไม่ช้า
ซึ่งก็ถือเป็นการเริ่มต้นที่ดี

อย่าลืมว่า 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 ที่ดีพอสมควร

ต่อจากนี้อย่างน้อยข้อมูลที่ท่านทำเป็นร่องรอยทิ้งไว้ ย่อมมีประโยชน์ต่อผู้คนภายหลังที่อาจจะนำไปศึกษาต่อ จะได้ไม่ต้องหลงทางกันไปอีก ทำให้เขาเหล่านั้นที่จะลงมือทำตามหลังจากนี้ จะได้มีข้อมูลในการเริ่มต้นทำ เพราะกว่าจะสำเร็จได้ มันต้องมีจุดเริ่มต้นเสมอ
#6
ARM Processors / Re: stm32 mp3
July 06, 2014, 08:50:41 AM
Quoteส่วนที่ใส่ delay ใน exti interupt นั้น ก็เพื่อแก้ปัญหา Switch Debouncing ครับ เพราะผมใช้สวิทช์ในการ start กับ stop ตัวเดียวกัน ผมลองดีบักดูแล้วก็ไม่มีปัญหาอะไรครับ (รวมทั้ง delay ที่เป็น loop ธรรมดาด้วย) แต่ก็อย่างว่า function interupt ไม่ควรเรียกใช้ function ย่อยอื่นมาก

วิธีนี้อาจจะไม่มีผลกระทบกับงานแบบนี้ แต่ถ้างานที่มีการตอบสนองมากกว่านี้ อาจเป็นปัญหานะครับ
ถ้าว่างพอลองคิดหาวิธีทำงานแบบไม่ใช้ Delay ดูซิครับ ซึ่งอาจจะขัดความรู้สึกบ้างเพราะท่านอาจจะเคยให้ทำงานแบบนี้มาบ่อยๆ (แต่เห็นว่าท่านใช้ Interrupt ในการตอบสนองแล้ว น่าจะลองให้ mcu ทำการตอบสนองได้อย่างราบรื่น โดยไม่ต้อง Delay ดูบ้าง) ลองศึกษาจากนี้ดูครับ http://bleaklow.com/2011/02/01/dont_delay.html
(เพียงแต่วิธีที่ไม่ใช้ Delay อาจยากที่จะทำความเข้าใจ ในการเป็นตัวอย่างแบบเริ่มต้น)
#7
ARM Processors / Re: stm32 mp3
June 30, 2014, 11:24:20 PM
Quote from: tha on June 27, 2014, 09:53:56 AM
Quoteหากมีเวลาลองเชื่อมใช้กับ CooCox CoOS (http://www.coocox.org/CoOSGuide/CoOSUpdates.htm) ด้วยซิครับ จะได้สมบูรณ์มากขึ้น

น่าสนใจครับ ผมถูกโฉลกกับ Coocox ซะด้วย ถ้ามีเวลาว่างก็จะลองศึกษาดูเหมือนกัน แต่ก็ไม่มีพื้นฐานเกี่ยวกับ OS เลย เคยศึกษา chibios, freertos, rtx rtos พอไม่ค่อยได้ใช้กับใช้ไม่ค่อยเป็นก็ลืมหมด  :'(

จริงๆ RTOS ก็เป็นเรื่องที่ไม่ยากนักแล้ว เพียงขอให้ไปทำความเข้าใจใน concept ของ RTOS กันก่อน และทุกวันนี้มีตำราเยอะมากแล้ว มันเป็นตัวช่วยให้ใช้งาน mcu หรือ cpu ได้อย่างมีประสิทธิภาพมาก (แน่นอนต้องศึกษาและใช้ให้เป็นด้วย จึงจะดึงความสามารถออกมาได้อย่างเต็มที่) และยิ่ง mcu สมัยนี้ทำงานได้เร็วมาก หากได้ใช้ RTOS ร่วมด้วย งานที่มีความสลับซับซ้อนก็จะทำได้ง่ายและคุ้มค่ามากขึ้น ยิ่งเป็น mcu ที่ท่านใช้ (32 bit) ข้อจำกัดค่อนข้างน้อยกว่าเจ้าอื่นๆ

จากคู่มือของ http://www.coocox.org/downloadfile/CoOS/PDF/CooCox_CoOS_User_Guide.pdf
จะทำงานเข้ากับ coocox ได้โดยตรง คงใช้อย่างไม่ต้องปวดหัวนัก หากมีเวลาว่างและโอกาศที่ดีก็น่าจะลองศึกษาเพื่อเล่นหรือใช้งานดูนะครับ
#8
ARM Processors / Re: stm32 mp3
June 30, 2014, 11:07:51 PM
Quoteเจอปัญหาเกี่ยวกับการใช้ systick ครับ ถ้าเราตั้ง NVIC_IRQChannelPreemptionPriority ของ EXTI = 0; DelaymS (systick) ในโปรแกรม interupt EXTI จะไม่ทำงานครับ คล้ายกับว่า priority มันเท่ากัน อันที่จริง systick_handler priority = -1 ซึ่งสูงกว่า 0 ไม่ใช่เหรอครับ แต่พอผมตั้ง NVIC_IRQChannelPreemptionPriority ของ EXTI0 = 1; DelaymS ในโปรแกรม interupt EXTI0 ถึงจะทำงานได้ งง! เอะผมเข้าใจอะไรผิดหรือป่าว? ท่านผู้รู้ช่วยตอบที  :-\

ไม่ใช้ผู้รู้นะครับ แต่มาช่วยค้นให้ ลองอ่านที่นี่ครับ http://micromouseusa.com/?p=279 น่าจะเป็นเพราะ ท่านเข้าใจว่า systick timer priority ผิดไป คงจะมีค่า priority เป็น 0 ครับ หรือเป็น Highest priority อยู่แล้ว ( priority มีค่าได้ 0-15 ค่ายิ่งมาก priority จะต่ำลงไป) แต่เมื่อท่านไปตั้งของ EXTI ให้มีค่าเป็น 0 ด้วย เลยเป็นการทำให้ systick ไม่สามารถ interrupt ได้อีก (สูงเท่าเทียมกัน) เมื่อท่านตั้งให้ priority ของ EXTI เป็น 1 ซึ่งต่ำกว่า คราวนี้ systick timer จึงสามารถ interrupt ได้แล้วเพราะมี priority ที่เหนือกว่า

แต่มีข้อสังเกตจาก code ของ ท่านว่าในส่วนของ interrupt ไม่น่าจะควรทำการ delay ให้มากนักนะครับ (เข้าใจว่าท่านคงจะทำเพื่อเป็น Switch Debouncing ) mcu หรือ cpu จะทำงานเป็นไปอย่างไม่มีประสิทธิภาพ และเกิดผลเสียมากกว่า อาจเกิด stack overflow ได้ง่ายด้วย ลองอ่าน http://forum.arduino.cc/index.php/topic,41819.0.html

อันนี้ของแถมครับ http://users.ece.utexas.edu/~valvano/Volume1/E-Book/C12_Interrupts.htm เผื่อใช้เป็นแนวทาง โดยเฉพาะที่หัวข้อ 12.2 ครับ