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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ O  i5 n  R$ p8 f3 O$ g' S+ v
8 Q  ?$ T, ?) T: r3 D    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
# q3 R$ ]  |% C4 g- e
) H" h2 o; D, _其他程序段。。。。。
. W/ s' U5 h& d: m3 {- T
/ R/ q% L1 R3 @8 r   free(x_d);
) Y2 M4 Q0 d% \) O
: a) p3 u; G7 }2 B" l使用DSP侧单独调试功能,验证动态申请没有问题,' E% K* k: b4 [6 o. u- c* E' l

, W. P* ?3 [4 C& |, l3 Q0 q& D! R但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。3 A3 W4 q2 K" a) U5 z# \
7 X) Y; e5 P* L4 J

4 o3 _/ y/ i/ v  ]5 M2 `4 q* ~6 N3 _# F  w, m

4 C' i) \+ c7 W2 o
8 Q$ a6 u: R% C5 v, A! H" M
$ R: P3 l8 b% Y. _$ O; ^
+ _5 ]+ |( l( w3 l0 E, y) u' p3 Q6 O

) b& g4 G. R0 R, q  g3 q6 J' Q* J  [1 v( a0 `
分享到:  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 */
! V: L6 M' {3 I! x$ F9 b; m% iProgram.heap = 0;1 ?- J) J6 p" M" H4 t
Program.argSize = 100;  /* minimum size */
/ c4 O: P" F" d5 r- ?; ]' MProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
$ S. L) k! [& m9 L8 M! zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 I5 k0 m0 ]6 U5 A1 e, ~var heapMemParams = new HeapMem.Params();
) U2 J8 ^" q8 W9 }/ gheapMemParams.size = 0x4000;
1 ?/ L8 w$ X) A7 b6 L# v0 E; v. k, O# e
var Memory = xdc.useModule('xdc.runtime.Memory');+ s0 }2 |1 Q$ U, \0 a$ e! G
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
: V7 u8 b; \5 T2 b) b6 `9 F7 O) w7 ]$ A* N! E2 w
我大约calloc  每次共计大小为5K*16bits,0 h4 d; ]0 b0 B1 R. m+ n
而默认配置才0x4000、需要改大。# B1 v& c  n9 E% y/ I2 v/ p. Z
% X+ n/ k3 @# G+ i. |
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
0 ~9 }5 A/ b; B我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下, E1 @% P1 ]3 i1 X1 I7 ?
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
4 L( i- J5 f4 i  J

& K7 P9 c% y" S- q- x) Y( s+ H# y4 M是不是需要在DSP.CFG中进行配置
1 W: U8 e3 J0 u& Z+ D, B/ @0 Y我现在的配置为7 G) U- c+ {, J1 L2 D8 F, o0 k

* z7 Q8 u; v! n5 m2 p. K/*
9 o6 r4 w) q9 S& q! {  C- n *  ======== Operating System Configuration ========4 q* T9 F9 s6 `) V8 l8 l
*/, c; v# M$ I5 A
9 A0 u2 N+ D5 H) b
/* no rts heap */
8 j% @$ j+ ~! y) j; rProgram.heap = 0;
6 q$ }5 {4 ?2 ~( N* A: FProgram.argSize = 100;  /* minimum size */
, ]7 s) B# K9 f3 JProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大3 z( H- m: r! N# C& ]( _$ h) x
1 f. W6 d, N. I* e& L4 P# @: S5 o
/* create a default heap */
) w+ B9 Q+ ]: Fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 w) L+ y( i9 r8 I+ f# x9 @
var heapMemParams = new HeapMem.Params();" }! x9 e! A1 o# a& c, O3 i* C# X
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
6 z7 b* Y$ V* i
7 i$ Z2 D. ~# d3 ]. P" l- c
var Memory = xdc.useModule('xdc.runtime.Memory');
. f8 O: z! W2 y, X" E$ m+ kMemory.defaultHeapInstance = HeapMem.create(heapMemParams);- v8 E, T! K! o0 J' S

6 [0 t9 P# o6 ^2 T4 f8 X% ^/* configure System module */  ^1 j4 I3 X) g+ n$ k
var SysMin = xdc.useModule('xdc.runtime.SysMin');  J" F) N( Q8 l( F: j
SysMin.bufSize = 0x1000;
# t9 R# u4 Q2 Y; }% u8 H4 oSysMin.flushAtExit = false;. V* J% ^9 C+ }' l

/ A& C: ?- |0 ?var System = xdc.useModule('xdc.runtime.System');7 Q' R: X( F6 i8 i5 O! ]3 Q
System.SupportProxy = SysMin;# x: |$ z) Y  L4 \  C: R" I
9 J) A' J& o1 e
/* configure SysBios to use the lower half of Timer 1 */" Q. D' `- C( L( ~1 l% P# k7 Y
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');! B! F* D! \; Y. s' r) V5 C
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
4 c, q% z$ Q" C1 b  aTimer.timerSettings[1].master = true;; I2 Z+ y' d' E- S) k
Timer.defaultHalf = Timer.Half_LOWER;$ F4 ~1 r$ j9 ?
Clock.timerId = 1;
9 z0 j, i+ g* i/ I0 @. Y  Y# |8 Q% l8 b3 g$ W3 |

$ q% F' T8 m1 M1 j% D' U/*) e! P/ ^9 {! @7 k; p9 x
*  ======== Miscellaneous Configuration ========$ ~* s3 o& o, ]9 ?
*/
' y! D$ \1 G; |8 D
  w6 f6 b8 m  C6 W' p: M( [2 ^/* set default diags mask */
% a- D- m/ q+ s# a/ C6 `# Ovar Diags = xdc.useModule('xdc.runtime.Diags');# j4 }) g7 R) @6 \. w  J
var Defaults = xdc.useModule('xdc.runtime.Defaults');- ]0 {' t% k2 h8 i" j

8 N2 F, C3 H5 {- l% Q+ ^7 L7 B) sDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;8 k/ D) V# k7 O& W
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
+ y# ?/ g8 G) S+ cDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;9 ]" X' T* e1 l; Z; A
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
1 Z* Y! H3 C. J2 u9 p" uDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
; L  M. T. D" z0 V% A# o2 I, o- q0 O5 zDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;; `$ ]8 ]4 L0 z/ N) Y
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, o+ T' V, |- r- M$ X6 g- q
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; w: x9 ]' {  ~' H: C, G4 YDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
% c' E& ?( X/ j* BDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
8 _- Z5 j1 Y4 Q1 dDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;0 o) t- f+ A  y3 s8 m1 J' m
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
7 l: W. |" ?% v( ~& c4 ]$ kDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
: a% q7 n! V6 Y6 O: E; tDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;. L) w! J/ k' H; s% Y; R) e

6 J6 g9 W2 L* k% w/* override diags mask for selected modules */; ?8 r  H8 ^: p
xdc.useModule('xdc.runtime.Main');
# a4 [4 y/ u; f8 KDiags.setMaskMeta(
; o: ]2 \& D5 v( X/ W$ v* O5 @    "xdc.runtime.Main",& v7 \. @1 `( `: R$ `
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
1 V& Y" W+ l5 Q/ p; ~8 `    Diags.RUNTIME_ON  O8 h/ h- M1 \! K* ?
);- p2 {/ z6 K1 p8 E) I3 s; \9 @
+ ~2 B: R3 e* K! E: C5 e
var Registry = xdc.useModule('xdc.runtime.Registry');
. v/ `( ~$ t/ Z. QRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* ]( u+ w* i" C1 @4 `( B$ _4 N
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
' g0 e$ Y1 l6 bRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;: }: T/ C5 o+ g9 v  n  n; ?( h
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;0 d4 p. K: z2 ?8 ]3 o

% u3 {7 X# s7 E/* create a logger instance */
2 A% v9 C6 O  u0 f5 Cvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
7 p% H6 N( y* X1 }. ^# E- B$ dvar loggerBufP = new LoggerBuf.Params();: |0 J5 ?' _. B# y4 {$ f
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 U. k% a' v# C* t5 R! f
loggerBufP.bufType = LoggerBuf.BufType_FIXED;8 _1 S# e  r9 K3 a
) m. k+ e6 k. T6 s# i" `- e
var appLogger = LoggerBuf.create(loggerBufP);
! N( V0 Q# z' U  P/ MappLogger.instance.name = "AppLog_Core1";% S# x. E, |1 S3 h% d
Defaults.common$.logger = appLogger;
- Z, _9 n6 l3 H4 l* T3 Y( ]Memory.defaultHeapSize = 0x8192;   
, ^' ~  ]2 n, |2 [6 _' \1 ZIdle.idleFxns[0] = "&LEDStatus";# O4 X  `3 @) I; p# O
Cache.initSize.l2Size = Cache.L2Size_32K;$ ~+ ~& |; P) n, Y* g/ ]4 p7 z7 G
( ?5 H4 B* g7 c9 g
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-12 01:39 , Processed in 0.060542 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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