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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
) y2 I) e5 J6 E. j8 H8 v
- O8 A" v4 F- u    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 Z5 c! I/ x8 F. K# O, K
/ C; C+ M6 D+ E- N1 a
其他程序段。。。。。
6 @4 b7 q: s% u7 E  C  |+ c
+ Y5 s  ]9 m. l   free(x_d);7 P( [" M9 N4 j% }
9 q; T8 B0 Q2 X5 F5 {) _1 K2 p6 N
使用DSP侧单独调试功能,验证动态申请没有问题,7 l: `/ \5 J. O

8 B5 n) e3 y- E; A, B6 d! }4 n但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
& t% z8 T7 W9 j% T  W

1 a7 x/ o% J- S+ J, U, C- q/ ^" u4 c
8 _/ @/ B2 v% I$ a- W3 J

/ {8 G2 q5 n' M+ s7 ]3 D) V4 ~* m6 K- _

1 h- d# W2 E( j9 p( c1 ~2 B! P# i' h
3 U& D9 v; g& v0 v( S% R5 m& j1 v4 G- C( h! l7 \

5 q/ \# x! J4 P8 U; \$ Y. ~+ c3 c/ @' j
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
- \; L: ]/ D. c) j! z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ y3 p4 C) ~9 o* t9 b7 d
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
0 N: s1 w7 m7 ~0 X5 S

  a! l2 J8 p" s' y8 u* o3 h是不是需要在DSP.CFG中进行配置/ w4 ~  O6 T$ Y& z/ \
我现在的配置为  A' d4 u4 {1 d  G# p* c1 L+ f+ Y

" m3 y) G) [+ \5 |- {/ S2 b/*
5 u* M2 {0 F6 U$ R *  ======== Operating System Configuration ========% m1 C( k4 q% n7 N7 E
*/9 |/ ~, x) }- f

8 H0 c" j& s% {  l" Q% k) Q/* no rts heap */2 ^3 z. i2 u2 ]7 O) R
Program.heap = 0;
6 }% W9 |4 ~! s  ~' Y" vProgram.argSize = 100;  /* minimum size */
- m" p$ n, w) k8 S3 S' T/ n  c9 s  eProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
, M  O3 `, w( K& K& s) @. r( g2 o8 w$ B0 M1 E. b) ^* x9 R5 e
/* create a default heap */* H. ^+ X9 f1 z. f. p6 E
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 Z+ W+ }' ?% r$ w( k' Q9 M/ vvar heapMemParams = new HeapMem.Params();
. D0 ~. ?. W6 |+ j9 Y+ x( ]- HheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, Y1 ~5 c  {5 K# N" w% D# U5 n/ }" z
( e- i- Z( L" R: m; W9 C6 v
var Memory = xdc.useModule('xdc.runtime.Memory');( T1 F3 y4 o2 F% L( m. h) P
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ f, r5 {* v3 M' e
) q7 l! m' b4 i$ f- O7 P
/* configure System module */1 b0 q5 q( H' X  m4 I
var SysMin = xdc.useModule('xdc.runtime.SysMin');0 `6 x4 E; G5 y, \. {5 s. C
SysMin.bufSize = 0x1000;; X0 }1 D: G$ X
SysMin.flushAtExit = false;
3 [  r1 a# E7 E+ C( q% E* o
; o- u/ g1 B" t* _* k/ |- P- o0 Pvar System = xdc.useModule('xdc.runtime.System');- y0 `- k4 M+ N" P# q
System.SupportProxy = SysMin;
( A; S$ ^9 F. @; ?9 Y+ \& d. \/ G; w5 I) m6 g* p5 V9 R- h0 a
/* configure SysBios to use the lower half of Timer 1 */) I' a/ i0 l# J, Z" k5 n
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');' c: U! M7 J. b1 H0 [
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
! M7 G4 j* l- s5 K3 n7 vTimer.timerSettings[1].master = true;( ^' ?- ?- G3 `! _: r8 f. X* s9 p9 P7 W
Timer.defaultHalf = Timer.Half_LOWER;
: p! m; s& s. c; z! CClock.timerId = 1;6 Q& R, s! }& J  W
- @! i$ F& }  |! u
$ z2 K0 [! s' K6 {* B5 ]
/*
+ B9 x% e# Q1 j, Y *  ======== Miscellaneous Configuration ========. Q: P7 F7 S& k$ n2 z' ~' u) g2 o: L
*/
: D! Q1 |' A6 j! F! W  d, p3 z, g! J  i" W- g
/* set default diags mask */' v, R5 h+ {! z0 |. g
var Diags = xdc.useModule('xdc.runtime.Diags');
4 d) }* T/ o8 Y3 Y' O: X5 E& rvar Defaults = xdc.useModule('xdc.runtime.Defaults');
) [1 m) f9 u/ u
  c3 n/ X, [2 N0 q4 a8 v) HDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;' n% ?3 X3 Y9 B$ S
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
0 s9 A1 n. }) w" L; tDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;" M5 y7 Y3 |6 V' A# F
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */6 R! ^7 }" f% I6 n5 W
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
' a2 d2 F# |, H1 `. G# d3 IDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;! r" U9 K6 Q- m
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;0 {# [4 K) Y* J: }0 b+ I
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;4 x9 i3 ?( d( E: V
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;5 M( Y6 N0 o  ?
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;& K3 Y* Z, @9 z# Y, F- X
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
2 }/ C6 L) e. l6 W* I* ODefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
; J' D: [; V8 @% w& V0 qDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 q9 j, Z( }( @+ F0 o5 g5 I
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
; ?2 u+ ]7 a; I4 }% R) l( d. Y! w8 O$ v# z3 I3 {
/* override diags mask for selected modules */
/ y1 C& [9 M* E/ Y! r" mxdc.useModule('xdc.runtime.Main');
' F: N0 F4 k- b& r0 `Diags.setMaskMeta(- p# a) N# I% i* x5 P& u" E
    "xdc.runtime.Main",
& d: _) H% U$ a5 g4 z# Z! y4 G    Diags.ENTRY | Diags.EXIT | Diags.INFO,& b3 T% ]& ~& @- @
    Diags.RUNTIME_ON
( J! M) H/ w1 @5 }$ s" g- @& H);
) q7 I: @* g2 V( G, p7 w- D8 L4 W" u1 W
var Registry = xdc.useModule('xdc.runtime.Registry');
/ @6 w. I4 |, D# aRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
( \3 K/ a! {! p4 z3 cRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
  d0 j3 `% h5 P8 W* pRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;" v: o! w  W  `
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;4 d* J0 b0 l' m+ n/ U3 C

' r9 `! S& M3 K' z/* create a logger instance */
. y2 Y4 ^: _# E2 I, ~5 Kvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
: y0 b4 f6 S" T% n; rvar loggerBufP = new LoggerBuf.Params();& `$ s  ~4 x7 a2 T
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
: s: b. u0 |6 [  b7 ploggerBufP.bufType = LoggerBuf.BufType_FIXED;' d1 `8 \, E/ R6 Y; ~* E# b) Q
) d2 B$ V* w1 u5 `1 h! H; L
var appLogger = LoggerBuf.create(loggerBufP);
5 k9 y. s, W0 z* xappLogger.instance.name = "AppLog_Core1";7 J' F1 m, K+ |/ J5 P
Defaults.common$.logger = appLogger;
: N: P- s5 C0 R* {3 D% pMemory.defaultHeapSize = 0x8192;    4 G1 H3 l8 i  Y8 s4 [; D2 a
Idle.idleFxns[0] = "&LEDStatus";& N. Q( D( B4 p  k8 t- N
Cache.initSize.l2Size = Cache.L2Size_32K;7 J; C# }; b$ D+ Z0 T

/ V# u. [1 J: }" B  U5 J! u5 p
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */2 h! U" a9 {4 m/ e3 H+ T% K5 Q
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 [9 S0 C+ Z9 `0 I- q, z# X( Z6 n; dvar heapMemParams = new HeapMem.Params();0 P! w, a) l, [6 H( A9 s
heapMemParams.size = 0x4000;1 C1 q0 C7 |* M: e/ y5 |% J, G! X
* G; w& I4 K  {) ]. |% P) v, ^
var Memory = xdc.useModule('xdc.runtime.Memory');3 X" d9 n4 G0 \* h- d
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
4 }0 A* z, c- q& z0 u2 z) G, y! L' W9 H8 P
我大约calloc  每次共计大小为5K*16bits,/ X4 F8 X6 D2 V4 S, u- m
而默认配置才0x4000、需要改大。4 r9 @' ^/ p! X" [7 v/ B
4 c) L, C9 V; Q# L2 o
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */3 w" d" t" l, ]' }/ I! s
Program.heap = 0;
9 G. U( @8 L2 E& h: j2 h2 e0 KProgram.argSize = 100;  /* minimum size */8 T! V/ Q) S2 e. b
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则


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

GMT+8, 2026-1-11 19:59 , Processed in 0.040939 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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