关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ k3 Z1 E4 N  ?$ n# x

$ a8 J( U$ L( D; ^    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# r3 d: |( l. D( ]
5 J  P- e$ P1 l
其他程序段。。。。。" Q0 E+ ~; A0 M% b
& s5 o4 R2 {' F6 ]
   free(x_d);4 m$ J$ c2 B- r& q1 m5 v

' f& E  E2 p* m- j# g6 V使用DSP侧单独调试功能,验证动态申请没有问题,
" N% M: {$ d# F- M# Y. t$ K7 z3 m  H7 Q8 Q
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。2 V; i1 f6 a8 N) T/ e3 ~0 W( X  c

) D- q. }( V5 L' v, [. |( }) M& y6 G1 D0 Y" P9 R( @

/ i$ P2 u& h0 w; O# E1 Q3 d- N/ L6 P2 m
( S  _; I! v, r7 x( y  u, O
! u" v" u- j- V! J
  H  I& N, e0 q

. X: N( U! b0 \3 x6 m! U8 ^) \) L# D4 D

5 _. Y% Q9 R- w0 L. \5 M
分享到:  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 */# ~& B' m; k3 ]$ z
Program.heap = 0;
: z+ N7 B" `( cProgram.argSize = 100;  /* minimum size */6 y  G/ f$ J3 c$ C& ~! O
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
% K: F$ x0 ^1 s  G, ?var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');" l! x5 j% i: Y
var heapMemParams = new HeapMem.Params();. Y0 P& u0 h5 b2 z
heapMemParams.size = 0x4000;- A: `. d& Q4 C) |1 F$ t

$ X$ l2 w/ N3 bvar Memory = xdc.useModule('xdc.runtime.Memory');+ g* i- D/ Y( ]3 B5 J* n) F
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" ?; {6 B0 P  c2 F" {' A

$ F- o) P, }3 M; Y' X我大约calloc  每次共计大小为5K*16bits,
" {& }+ D/ f$ j, r% W% Q而默认配置才0x4000、需要改大。  d3 L* u* n. C2 A/ E* M8 @) A
3 g! T" |6 s2 k( q" E& t
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
  O+ V: K' s& W  e( V- [我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! w' s4 F( }! T" E8 d% q
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
. @) w/ m3 P4 x7 r  j# \$ j* U8 [' X8 w
  @' p# ~+ R% `
是不是需要在DSP.CFG中进行配置
) t  m1 J1 w( T) l$ |& G& D* ^我现在的配置为
* U, A9 y6 B& }/ x9 O, u  d) z
. u# ^$ r. Q% m+ L/ o) I/*( W3 s' t* q# k8 o
*  ======== Operating System Configuration ========
0 h$ p, a) v3 E$ k/ Q# @: | */' Z$ X1 X+ z3 T: [. m* Z) K5 C, k* G

# y2 U6 p# S: b" x( a8 `3 S6 h/* no rts heap */( J# T& n# h' W2 [
Program.heap = 0;
7 G2 }" Z# d, B+ n1 y# |- HProgram.argSize = 100;  /* minimum size */- J/ v- `% i7 ^5 K# |5 f, s
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
0 K  Q6 L2 R+ N- K& w
" n! R. s  {6 J* u- A$ R+ n/* create a default heap */
8 C: A1 W# D2 h( \var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
3 P) |( S' E( l1 L/ \: T- svar heapMemParams = new HeapMem.Params();
( e5 T8 w" d" \- ?/ ?heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ P- h' f9 N' I
2 D) C4 g6 t1 @
var Memory = xdc.useModule('xdc.runtime.Memory');
7 L; v2 K2 _% Y2 ]- T$ \5 p2 XMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
! I$ d5 E, \, y4 f* \
/ O6 d) I2 X+ l3 x' N  q; R# k/* configure System module */) B3 h$ T, Z9 |
var SysMin = xdc.useModule('xdc.runtime.SysMin');* Q) x5 T2 Q6 C# E7 K: r* ]+ h" u
SysMin.bufSize = 0x1000;2 x. G2 Y* @( `9 K7 }' @* ?
SysMin.flushAtExit = false;
- z  J9 ^( a+ \/ e+ |+ n1 c/ K. z4 R/ J( ~* a
var System = xdc.useModule('xdc.runtime.System');
7 l3 F4 J4 l) b- R  B- o7 QSystem.SupportProxy = SysMin;3 Y- V: m$ T( n

  Z5 R% l3 E3 L) p& p/* configure SysBios to use the lower half of Timer 1 */
) G- q9 J* f$ O) G" t3 Avar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
4 M$ T* ]7 S& Q, h5 T* Nvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
5 R, p( Q8 u7 J( ^! \Timer.timerSettings[1].master = true;* `0 u- ]0 K, {9 k
Timer.defaultHalf = Timer.Half_LOWER;
( U1 s! ^( [0 L- k" l5 `/ SClock.timerId = 1;
# @( T) ~' Y$ G6 t# F# _7 B( m$ J3 w5 L3 g, A
; V7 S! P2 a' n7 @. I  q( O' |
/*' e9 Y! J( Z# J$ \! d
*  ======== Miscellaneous Configuration ========
1 t& t" A0 Q5 g& n  G9 d */, G7 O$ O# L) }  F/ u8 {6 p
3 \6 n: q  H# j5 m' a" y; ]
/* set default diags mask */
; e& u1 z, N1 F* ~9 `* m' n) f4 \var Diags = xdc.useModule('xdc.runtime.Diags');% u$ c( w+ q# Y" [
var Defaults = xdc.useModule('xdc.runtime.Defaults');
2 c" [' o& i  c7 N; }% b  v/ P: p8 e" m) a- f7 q/ T% S) o) d
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
+ w) u9 t  O7 H# ]8 vDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;4 L/ i3 k9 i- _) ^, `! p2 k3 ~4 v3 t
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;; |: c8 v2 p, F
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts *// O$ x- z7 u- K7 |8 _+ l4 ~' g* z! g
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& W/ T# \3 a& H1 c' i: L
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;) K3 C! v( D. u6 v  L8 |
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;) c( H. R( F2 ^9 z0 A
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
0 g+ R! ~+ F4 \$ G" [Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;$ c5 g' n2 F" S' ^, Q" f
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
; |, W$ j! Y1 |7 ?$ f3 p& D- eDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
$ H6 r3 _9 \3 T7 s: f% wDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
. z, f' B0 I# o  Q! \Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;. B& X; l7 t" S
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
7 M) e% a3 m* p7 Q2 j1 L; T- ^
1 T2 d, u; |- R! A' H& x/* override diags mask for selected modules */* Z& i8 Q/ k! n" K, |
xdc.useModule('xdc.runtime.Main');
( J6 T, ~# b$ ^, I& V4 Z1 @Diags.setMaskMeta(5 _3 J. [! k5 |) b
    "xdc.runtime.Main",: b5 R! k/ h# w, s
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
! I( L) L: Q9 N; n3 `0 r+ X' J    Diags.RUNTIME_ON9 K+ l0 u% E/ Y4 `& M; r' X
);6 w/ s% D" V, C9 }- h
; }6 P! k' _& A! I, M
var Registry = xdc.useModule('xdc.runtime.Registry');4 P1 Q/ u) Y, i: c+ A% @
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;  X, j+ N. {' N' y% n: Y" R4 d* L4 }  h
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
' Q4 u6 U1 d; n+ V- f. N  k* ORegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
1 {! d5 v* E: d' U% SRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;! v# p" q; T% \! I" G

) t) ^9 z, D7 I3 `+ n; ?6 r/* create a logger instance */
4 ~( c5 `/ C  i1 J4 ovar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
( S1 G5 C/ m3 e; h& dvar loggerBufP = new LoggerBuf.Params();
5 x# p) ]  K) H. g- q) _1 l2 k" MloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
# |8 Q: B: e+ I9 xloggerBufP.bufType = LoggerBuf.BufType_FIXED;' Z) O) f% t1 q& _! k7 J. o
0 j. N! b* v1 v5 B
var appLogger = LoggerBuf.create(loggerBufP);0 b( L- q# E: \
appLogger.instance.name = "AppLog_Core1";4 j  i% I+ r6 ~1 A
Defaults.common$.logger = appLogger;
9 c) [! u4 E' t/ _3 q# jMemory.defaultHeapSize = 0x8192;   
! r* ^) I1 G8 y( P0 ]! f( g  MIdle.idleFxns[0] = "&LEDStatus";
( h/ s) r$ V" G0 ?/ sCache.initSize.l2Size = Cache.L2Size_32K;4 w+ @4 q5 G$ [/ {6 G

: P8 y8 T8 ~1 z: x# ^, y' a
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-14 21:55 , Processed in 0.047156 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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