关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7087|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构6 H4 x4 K6 U% `- T
6 u/ R" y7 [8 l7 {$ L* C. n7 p
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2568 O+ R& l+ ], k* Y

) v1 y$ a5 p- v* J+ R) D5 |$ h. x其他程序段。。。。。
" \. g6 Z0 F" n3 f6 e+ w% R6 v/ z 0 d5 q. n) N& r3 I3 c/ U
   free(x_d);
) v* u# M+ W$ N: [: s
- k- @: B0 a& T) C+ C& H1 b使用DSP侧单独调试功能,验证动态申请没有问题,
! d- ]0 _3 i4 w% X% f* R
" ?9 o. \9 D& @3 ~; h5 h9 ^0 {. e  F8 A但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' ~) a2 h# `: P* Q0 H& m3 k
2 B( f+ o7 g' M

4 L- F" C4 d4 |( q7 `* B9 H1 _2 o1 Q% D2 E

2 T) {. Q8 w, v" p& Y4 S
4 @2 B9 p* x" Z( c/ w' \( ?: D' [8 s. r+ c$ v; g& i; p
- Z4 E* z0 h- G) Y
9 V4 Z( x" D3 U  |7 x2 ]
5 C: M  f+ U1 Y/ V. {# t4 D

3 f: t4 k  g- S: g& k- D
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, s' F# m0 M+ a
Program.heap = 0;
! {% ~- \7 b% @, m3 h! W; a+ a% kProgram.argSize = 100;  /* minimum size */
9 W" Y& Z$ }4 oProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */  _/ i; B+ p+ a  ^# L/ A0 P
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ A& j" `* h8 ?+ p7 W' v" bvar heapMemParams = new HeapMem.Params();! p2 S# `2 k" ^8 r1 p
heapMemParams.size = 0x4000;1 r& X- r" h) B0 A
/ H: b$ z: U& A/ _. M8 J
var Memory = xdc.useModule('xdc.runtime.Memory');
( w" z- f- k& V1 T8 U( cMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
- }( ^0 O* a6 Z* `- t+ c
0 o2 r: n4 U, ]& ?3 W我大约calloc  每次共计大小为5K*16bits,
& X  {3 E0 d+ ~: {而默认配置才0x4000、需要改大。6 _$ Z, O3 u( q5 D9 `1 f" F( ?
8 W" v5 l7 e9 i% q, _) H0 p
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, B$ l; g6 x% b+ M2 i( I4 T
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下4 L( k; q' z4 B
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)) ?0 l; ^: h- i% W8 ?

3 O! }1 g' e. R+ S& c是不是需要在DSP.CFG中进行配置$ U) k0 L' @6 t9 w
我现在的配置为
) [1 q! N. S$ G( _3 U* B, c, B8 n! D" o' X
/*
5 Z5 X# M* y% p6 ^" O: ~! ~2 K: a *  ======== Operating System Configuration ========6 I* m2 }; N0 O4 o; p4 O2 |4 B7 A; l
*/8 o/ d6 l. M7 [' }

' C/ ?+ k; T% [0 d/* no rts heap */
/ q# a% A" d' @; NProgram.heap = 0;  n0 z3 `  s$ O, z. n8 y2 A4 i  S4 E
Program.argSize = 100;  /* minimum size */) Z% ]1 o- h. o5 {
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
! u7 h7 l! U+ |6 n; Y. G* k) b  a7 e7 N- C- c/ O
/* create a default heap */
! z% E9 i, @, }5 h" G  }7 Y: ~var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 ]. O  I( I3 k$ b& n- ~; V: x
var heapMemParams = new HeapMem.Params();
; S& Y4 D  b& g+ p7 L" W) vheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
6 D' o* m- @0 T" s5 j) a# n7 H. Q3 ]  S
var Memory = xdc.useModule('xdc.runtime.Memory');/ e3 ^. t. f- A6 Y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ [# ^0 f0 R5 I
; H$ }# S) d; |
/* configure System module */
" I3 e3 `/ r+ G: ?var SysMin = xdc.useModule('xdc.runtime.SysMin');) c* a# h- R+ L2 |+ h" B0 h9 }
SysMin.bufSize = 0x1000;# F- A2 H# B: O% a" p- j
SysMin.flushAtExit = false;
: E2 K/ I; [( q) e! R  N4 d/ b7 K; M& O; B
var System = xdc.useModule('xdc.runtime.System');
* R" ]( `2 w2 N7 z: QSystem.SupportProxy = SysMin;
" P1 ?& ]' s1 s3 G4 u0 R2 U) Z( D" M% w
/* configure SysBios to use the lower half of Timer 1 */
( ^  G* t1 g" v6 ?6 w& nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ j0 f# m# H4 Tvar Clock = xdc.useModule('ti.sysbios.knl.Clock');* o2 }# A0 L; V. v4 v9 M
Timer.timerSettings[1].master = true;3 j6 c' {  U( a; Y9 G5 t
Timer.defaultHalf = Timer.Half_LOWER;/ Z( a0 h% A6 \) j5 ^' Q
Clock.timerId = 1;/ I  }3 s* a7 H7 t2 C# |6 |
& G9 }: K. D5 e. L3 s
' V+ j) ~$ Y- v) X. r
/*
: {+ Z$ I3 x6 F/ t0 `: a7 k *  ======== Miscellaneous Configuration ========
" F( P2 i. |6 E4 f- }( G( k */
+ `1 P/ ^3 m- Q4 J; D7 E
8 w9 k3 T* _. }6 p/* set default diags mask */. _$ ?. _5 B* m$ Q6 R+ a: s
var Diags = xdc.useModule('xdc.runtime.Diags');
7 y- k  C3 v; G% N% T' L& q7 Wvar Defaults = xdc.useModule('xdc.runtime.Defaults');6 o- o  S; h. m. v( S8 a

' l% ^2 H! y! i& ]1 M. I& fDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* \0 y% x* I1 W  z
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  c/ J* B# w8 n) ]7 T. D$ m2 V4 h) aDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;) U3 z: G& a3 G& A3 h
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */9 R6 C" u- t2 u( e# J5 e  p
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */( D: Y3 a" A2 q- v4 D
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;3 j/ c& \$ h/ [
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;; _' {: K) M4 F3 Z* [
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; K7 w: y* W% Y! eDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;3 |  p) _% i* h6 C/ @% n" A
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;: C% H' `& m, E7 g4 X
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
/ Q* G) D1 B: |+ FDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;5 s* [; m+ B5 ^- ~- t$ G
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
3 V8 f3 R* u* N( _4 gDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& Q. [% B/ ?" Y1 a' B% m; H  J" f
$ e1 I( j- k' p: U# o7 @7 b5 C: K
/* override diags mask for selected modules */
% {& ^7 z7 Z0 k% C. e% Cxdc.useModule('xdc.runtime.Main');
3 G7 a( G! @! t4 `$ y, K! }" ]/ T3 ^Diags.setMaskMeta(7 y9 p) M! W8 p% ]; Q+ f8 p; t
    "xdc.runtime.Main",
% c, R0 b9 y6 {  W7 o" l6 ^    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( |4 f6 w) o( h) ]: r    Diags.RUNTIME_ON" t5 y& G/ r  o
);( L- i0 o' E7 |

- U8 j+ A9 n5 l) o. S) m7 uvar Registry = xdc.useModule('xdc.runtime.Registry');% a! L: ?/ z8 o' J6 h6 r
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;8 m% H! i# I0 W
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;0 ^: `: U& r7 Z4 |6 O% H
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
# Y- _/ N& a* B0 ~7 L4 m  MRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;% K* g$ _/ x9 O' B& S5 L5 Z" ^, b

* i% {" @, L2 T' n1 A$ l" o/ f' a. n/* create a logger instance */" w0 ^# Z$ b+ y# e* P, y1 W
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& [* q; y! O" u6 y# _% F9 b( N
var loggerBufP = new LoggerBuf.Params();
- y; z  O# T1 _4 p( n6 w; B0 TloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */0 Y( Z6 ^6 {3 q3 X
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
  i5 U2 V: C  m% u- O& U7 i+ g3 q, S( _- H$ ?
var appLogger = LoggerBuf.create(loggerBufP);
2 _- O! j2 V, X0 s* A( NappLogger.instance.name = "AppLog_Core1";
: Y: _! l: {# \7 s6 t1 dDefaults.common$.logger = appLogger;
, a4 v7 |- ]- hMemory.defaultHeapSize = 0x8192;   
6 {) a2 a3 L  F) ~* ~1 X& GIdle.idleFxns[0] = "&LEDStatus";- @& C- ?" N& v+ B- p
Cache.initSize.l2Size = Cache.L2Size_32K;4 {* b4 q2 \: H+ M$ A# Z9 P+ j
- O, \0 @8 K9 X
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-12-14 20:12 , Processed in 0.040901 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表