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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

6 u% t/ @/ f6 C( C  q/ ^    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2568 y6 |  \" o# q- T3 }. L! {
" \* V+ ]1 w' ]
其他程序段。。。。。
8 V7 M7 N9 k4 D5 N 3 ~+ l5 {  k8 E+ d
   free(x_d);! q* N) j/ G5 W- g7 |4 C" z& L

' J& R2 ]3 @/ n. i9 \使用DSP侧单独调试功能,验证动态申请没有问题,/ ]% b3 S8 k0 D7 n
7 O  y. h4 t  d$ A( P, ?, z
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
; f# o8 V8 o6 |" v+ ]

7 t$ X" J) u! A/ ^
) n: r9 g0 ^! R) b1 n6 X( w9 M) {1 l' N0 N
- w% I" V1 u( a2 T0 Z3 I2 ^7 Q

) X- s/ e' i  |  R+ H5 v2 m& i' D5 Q
+ k* z# V9 ]/ R; o" q2 ^' k
* ^. r5 `' S: D
- v4 ]  n# T( ~' h* _2 c8 J
( J2 u# }8 Z% [, C- a4 r
& J! j# E7 @) b& J7 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 */
  Q2 s5 W2 G( J, g8 I/ r3 lProgram.heap = 0;$ w( d0 F# b% p" \! Z! ?2 Y
Program.argSize = 100;  /* minimum size */
5 `( @+ I' u3 wProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */, _$ W6 i! m/ N* j; D
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ m9 z8 W4 L: p9 n+ z; Qvar heapMemParams = new HeapMem.Params();  C- E, x; x: w. d3 F  Y9 n/ P. W
heapMemParams.size = 0x4000;0 ]; k! S& N9 R+ z0 f

) v( Z3 ^& T8 D: E* o+ Lvar Memory = xdc.useModule('xdc.runtime.Memory');
5 ^! q# O5 n0 j8 o% MMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
% f& p* e. s( I6 M2 Z+ ~" u8 o) u/ M' V+ x
我大约calloc  每次共计大小为5K*16bits,
% e3 f1 b! R" p8 K* E+ V  G& L, h0 O而默认配置才0x4000、需要改大。. e' d$ F! m( k# Q

+ Z2 u7 Q& K+ W: j: f
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明7 o1 N* c: D  S
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下" F* X6 r' n, B- r1 t6 S* [
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 x. N, P' i6 L- }; J: o5 W- j

: {5 C8 @, J0 {4 S2 x& o- A  B是不是需要在DSP.CFG中进行配置
' Z, ?3 B8 Y4 m; F% W我现在的配置为+ n; s7 V: A: K/ e$ N+ B' f1 N# q
" D' P& {6 {+ s5 f' W" R! W
/*
: L+ @9 A* t$ y5 ^, f5 W* J; Y *  ======== Operating System Configuration ========6 i( N! w% ?" {- n+ [6 u' {
*/
- L" N+ i/ g: T1 g; v: ?& y# n) q2 m" p" b9 y
/* no rts heap */* e) ]! `) v' A3 U8 t
Program.heap = 0;3 B& a' r' b7 j) t( K# g5 N
Program.argSize = 100;  /* minimum size */( M1 ~& ~2 a# }: T7 k" Q
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 o) F' r7 ?6 }! n: S
! T& j) o4 G! e
/* create a default heap */$ E. ?4 K9 e, L6 Z; E2 |- H
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');2 n0 R1 |3 V; S$ A7 v  o
var heapMemParams = new HeapMem.Params();
1 r) }8 N) n# t7 F, mheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% S; g& L4 q- {/ F  P  n3 l" ^6 o
+ ?1 r$ p9 H  [8 B- E* }* j
var Memory = xdc.useModule('xdc.runtime.Memory');1 G) u6 i( d, ], z) V' z
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 B; K8 o8 q% x

7 K  n* a# N& K/* configure System module */
1 [5 k% D9 k4 l- N4 ~1 C+ fvar SysMin = xdc.useModule('xdc.runtime.SysMin');
% A$ J7 o; t5 [, N8 ^SysMin.bufSize = 0x1000;
# L1 c3 }0 c: H5 u) ZSysMin.flushAtExit = false;5 R9 X8 x2 g+ K0 E1 g7 V  ~
/ o. q& ~( }4 h6 z  M4 A$ C5 e
var System = xdc.useModule('xdc.runtime.System');& c5 g% H; C. r) Z+ K
System.SupportProxy = SysMin;
5 T- r; S. g0 F: }2 U/ o2 x& x& h" L! G( k- G
/* configure SysBios to use the lower half of Timer 1 */5 U/ X& v" K& V) z" G
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 Q$ R. L; ^+ z# Gvar Clock = xdc.useModule('ti.sysbios.knl.Clock');5 S' {/ `* v+ T# Y) z
Timer.timerSettings[1].master = true;
* V' e, j% r. _2 c& ETimer.defaultHalf = Timer.Half_LOWER;
" O( [4 k3 T. H1 [2 a2 x8 UClock.timerId = 1;
" ]4 h3 U% o& c
5 L# l) i" Q* G8 ]" O5 h) O  s* R  D1 c0 l0 i  M2 i
/*8 n* b1 @. C' j0 K4 y" `
*  ======== Miscellaneous Configuration ========; I2 C5 z: z/ n) T5 m3 e* U
*/
; g; _- R: R( w
3 s$ N* ^* q* a$ ^0 W4 U- g8 N' @5 H/* set default diags mask */
7 y& @; Y7 _- ]0 k% Vvar Diags = xdc.useModule('xdc.runtime.Diags');
3 L0 ]+ k, `- c$ M: S% dvar Defaults = xdc.useModule('xdc.runtime.Defaults');( Z& p' `9 P( W, f7 u
/ l/ |0 k- F% ~( K9 ?3 F5 ?/ q. e
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
! a: F* N* b0 l$ A; _9 XDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( i5 t+ N- d  {$ ?4 U  B1 MDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
- t) X5 \! k9 O. L/ b9 J0 P* sDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
* ]) Z* Z# N/ t/ @1 P6 |$ KDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
: }& {8 B1 e% e- @  V; IDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;8 P5 `0 Y; g/ M- S( b% D( |$ A
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;. @1 q. A) V7 u) t# d
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;  @" y* e- Q; M+ K0 r' }) h% Z/ h
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;, X( y3 F" Q2 d, s
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;4 [% p# `+ w. t7 V) z- _- T9 W
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, \# N: n3 I7 `3 tDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;) V) \! p# P# Q
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
/ T+ t7 f. g2 uDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;6 F$ b" g2 y) K+ C* o% ?# C9 V0 M
7 q* n5 b: b3 W
/* override diags mask for selected modules */5 i1 z# X* b9 m
xdc.useModule('xdc.runtime.Main');% u9 |# ]" A* {9 c: v/ M1 P
Diags.setMaskMeta(
/ w. ~" U( R) M6 k+ _    "xdc.runtime.Main",/ k0 h) D8 B* l2 V4 ?4 C
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
! A. W/ W0 f3 K! o0 K3 X4 L    Diags.RUNTIME_ON# Q! k" S. Q9 n$ [; e1 G$ b
);
& X; s0 ]& P+ j! o# n$ @( q$ }9 t5 @) j: [6 I* s1 Q
var Registry = xdc.useModule('xdc.runtime.Registry');
5 f  M% i" F: k* C5 Z3 s" oRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;, O( r- F4 Q& K, Y5 C
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;4 R3 w/ E3 i1 C) B4 m! k! `1 r
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
5 k( D+ G* A# i; h9 y8 b- DRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
) [7 x0 j! g/ r" h1 b0 L" B, v& b+ W8 f: b/ I7 w- z
/* create a logger instance */
- a' U4 |- T( V  r+ a. z6 P9 y( O! gvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');$ ?  Z8 Y& R' x+ P  K
var loggerBufP = new LoggerBuf.Params();
8 u4 y6 t& ^* Y9 p& qloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ i# v; a4 o2 d) ?
loggerBufP.bufType = LoggerBuf.BufType_FIXED;. a3 H, O& p1 `8 p4 Q
' T1 a4 o- v, R8 b- e, R
var appLogger = LoggerBuf.create(loggerBufP);
+ ^2 U: g7 t% p, V, WappLogger.instance.name = "AppLog_Core1";
* @" Q. x3 o! h+ c% R% UDefaults.common$.logger = appLogger;
! [- s0 w( `4 BMemory.defaultHeapSize = 0x8192;   
+ v" ?0 _7 b7 FIdle.idleFxns[0] = "&LEDStatus";
9 ]3 V- \; Z! ZCache.initSize.l2Size = Cache.L2Size_32K;5 C% ?7 r1 ?9 h) u* m

) J. `4 m1 a7 E& ]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-29 23:38 , Processed in 0.043758 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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