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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构7 i4 G4 R6 b0 ]8 t) C! J
+ t# W% @1 E& L. \8 N7 ~, W
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
# W2 \' m4 K* ~0 z9 h. u6 l* l0 l: W. {
其他程序段。。。。。! _4 @. t# y: ~) m

5 d6 d- k- j0 F/ V  y4 a: C. @" L' r   free(x_d);, X4 d5 ^' z* q) ]- p# S/ X; O
# W4 ^1 K7 q8 f) D5 R
使用DSP侧单独调试功能,验证动态申请没有问题,) f* f0 ~- `' s7 T

. R! n& @8 U* b# T3 o# e但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
4 x7 b6 ~, g" \+ Y6 w1 h
5 k% i. ]6 F4 n& l

$ k3 m6 Z7 g0 Q, S
/ ^+ D) Z' g4 v+ s8 |
8 H2 y: c) ?/ u" p( e( [8 [2 i  w" Y/ h9 a7 P& p
+ `0 X0 s% H: B
" Y, i; u  _4 |( q% Y

0 L. p' Q$ d1 k4 Q2 [7 }$ a
6 D2 ^7 q# O$ i$ A3 b6 F$ n) \6 a# |1 ?; j- 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 */
( _( I8 }9 [) O) N8 r# eProgram.heap = 0;3 A+ I& N1 L9 {  v) |
Program.argSize = 100;  /* minimum size */
$ d7 X, o9 e. a  p/ dProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */8 P+ j6 W4 ]+ e5 i; c
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
, e/ V2 N( T6 y3 W8 B' w6 |, Ovar heapMemParams = new HeapMem.Params();
* }  W3 P; E( SheapMemParams.size = 0x4000;2 U# A; \1 G4 k0 S% e

4 O1 E$ D: n1 ?0 A+ c8 p, |9 b4 Wvar Memory = xdc.useModule('xdc.runtime.Memory');9 W7 B/ k4 G; l: r+ [
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" r; S% q8 R' _# |

  |! K& n2 o3 ^! Y7 `% ]我大约calloc  每次共计大小为5K*16bits,
, C, ?5 b1 i1 ?8 l9 ^1 b而默认配置才0x4000、需要改大。
, g* y& U3 d2 |; _
8 B* ?2 c5 u6 L$ `7 `! l. E- ~
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明+ `' ]5 w7 i' C% Y- p+ ^
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
7 a) u+ v% ]8 X$ b(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
  X' R: P# q9 z

$ y7 E) {- C; b3 E4 l  [" c是不是需要在DSP.CFG中进行配置
: S- V9 `1 s3 w我现在的配置为
, C# ^/ ]4 I0 v/ z/ T- W0 b$ h9 ^) n
/*. z7 G4 H4 B( a. U5 Y
*  ======== Operating System Configuration ========
& r: V8 y  k2 w */! A* M7 n4 N( G

! P6 d0 g5 c* X, y1 X, `1 G/* no rts heap */
1 m: r0 v5 f3 X" J4 X! J( MProgram.heap = 0;
) o. O, Q: R- d% p) GProgram.argSize = 100;  /* minimum size */
: U  y  v5 s3 v; x! u' n: s5 |Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
; N, p: a, [" ]0 \$ _" w0 {. z
1 V2 z/ h: k$ O2 n4 m+ G2 C( A/* create a default heap */: r9 X% X4 d& I+ J
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% k  B5 n- H# v/ e0 p* Ivar heapMemParams = new HeapMem.Params();1 C2 Z; ]0 c3 K
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, x" C$ k) N7 Y0 O

. k2 M* ?, s, f
var Memory = xdc.useModule('xdc.runtime.Memory');
: m* l: {7 l% q# n! a7 uMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
# F0 w5 Y/ f& K, Y/ |: B# G
, o8 d; g, x1 K- F/* configure System module */
7 u, r$ Y2 K. D) n3 Z( _var SysMin = xdc.useModule('xdc.runtime.SysMin');
+ k( e6 A0 E- n( x1 p3 xSysMin.bufSize = 0x1000;
  Y; s8 j- y- E: k4 }SysMin.flushAtExit = false;% ?; ]2 m! a+ P8 J# d
2 z7 F  y9 K- ^5 \& [& k' z5 j+ w
var System = xdc.useModule('xdc.runtime.System');
% L- c8 B# G% VSystem.SupportProxy = SysMin;
) [& h; s  A2 j
- r) W0 Z- J2 x# x! }% ~! D  ?/* configure SysBios to use the lower half of Timer 1 */* V% s  W& E! U% _. F- O9 j
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
) \/ v1 P7 a5 @1 D' c* _( cvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
+ u5 z) K9 k( Q) tTimer.timerSettings[1].master = true;
1 w% K4 q+ K0 K% ~Timer.defaultHalf = Timer.Half_LOWER;
9 _; {- N& {! L  c7 `) e5 {( RClock.timerId = 1;1 ~1 h+ h3 e9 c9 I
; u9 F: e6 X, Y7 f
. b9 q% w! d* U  D& K$ I" v' b+ a4 O
/*. T  n; _1 p, B7 i  f3 y/ \
*  ======== Miscellaneous Configuration ========
+ q4 a+ l7 I$ E" ? */
. w/ [+ O' G7 l  O3 j# K/ L0 e
) ^( G) \! J( T/* set default diags mask */* _" S4 p. g8 ^+ K; x7 m7 M
var Diags = xdc.useModule('xdc.runtime.Diags');6 j3 b. s) d. I; f
var Defaults = xdc.useModule('xdc.runtime.Defaults');' k( Y; M2 l( |0 w
+ x% u% m# M" n
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
# T" R1 y/ A: a9 n- [( B- UDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. `) {2 e% R' c- @Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;# _2 S; Q8 ?" d7 G
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 W* Y$ ^: O, X1 j
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ {/ a& g2 C+ |& N6 j- X
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
* F4 G# m+ n. h8 i+ {Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;$ I1 B: A$ |# ]% N2 ^+ @& A
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  g5 G* I7 I: _" ~. j. Q' Z0 ADefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
' L- u! O+ b/ DDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;0 T* f' k- b1 o/ Z) I" \5 r  n
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
* B; X, k$ W( W; E4 k; W/ g/ ZDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;7 h5 q0 W2 |; l+ N& G
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
9 o% y* V) k3 X: RDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;$ I! U" i/ U5 @* E

- o; [( v+ M5 b6 ?6 {/* override diags mask for selected modules */; ~- w2 u6 X; o* V
xdc.useModule('xdc.runtime.Main');
: Y4 v: v6 \- e) y) j# RDiags.setMaskMeta(
4 B% V9 p( {5 Q    "xdc.runtime.Main",+ j- c3 t1 U  a: a& M& M
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
  n- S/ S. b5 T    Diags.RUNTIME_ON7 T/ q: D( d$ Z: @; ^# L
);
$ E! t) F' r1 u$ O* R; v6 O  g" b! {( q
var Registry = xdc.useModule('xdc.runtime.Registry');
9 @1 u' m' K5 m* h# y$ t% sRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;7 a) [# E: Q) J' e
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;! e' m9 @) R4 e( K( t. M
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
' J( O. P# m% a! h9 Y, ZRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 f9 @" t9 a/ B' n7 f) i  \* I& w: M& N1 M, k0 z4 U* m9 o
/* create a logger instance */* [# Y) U1 V: N  C7 R1 [3 H" G
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
0 t1 B, ^, @% y0 }var loggerBufP = new LoggerBuf.Params();
, Z; H0 F8 j% `" p& aloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */! e9 c$ V% I0 E1 b/ \
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
$ f! ]8 H9 ]! I+ _" C" b. _9 ?4 C  A% C/ k6 a- k/ k8 x; E
var appLogger = LoggerBuf.create(loggerBufP);% n* y' ?7 e# l$ T% _" k
appLogger.instance.name = "AppLog_Core1";
6 D0 t8 X% r  F" R5 A' @% T# RDefaults.common$.logger = appLogger;+ ?9 o' B" {6 A3 o/ M
Memory.defaultHeapSize = 0x8192;   
( X3 l' g: |1 w& a/ L2 \Idle.idleFxns[0] = "&LEDStatus";
/ O  X+ \4 V5 HCache.initSize.l2Size = Cache.L2Size_32K;/ g. V3 Y( P0 h* P! b  R5 ~! s/ O/ k
" q! o+ `- Z+ T8 r
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-24 04:17 , Processed in 0.047833 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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