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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
# h+ h8 T+ S* m" O# z7 B) D8 [: n* q1 t1 Z* L8 Y/ H. a6 b
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2566 ^: c0 x* V4 n4 c2 _3 |

% U$ {* H6 X- B* p其他程序段。。。。。) \6 f3 m8 w/ k' G. Q8 K3 _

" H) j6 j. S8 k0 y4 ]   free(x_d);, L$ U- y# M, S% x' O
4 q5 e9 T  z- r' D: n
使用DSP侧单独调试功能,验证动态申请没有问题,# |. E$ w; V; h. Q# q5 x5 {

) l$ A. H, R+ L3 L5 `% o但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。- G5 v/ H9 S" f# J

2 U2 S3 {1 q! X0 y- J3 m5 @
  ^7 C/ c, ^' V! p/ U
( L) W0 b9 U% n' u1 E2 c
0 P3 D& ]0 V8 ?. W0 r! k: W
( Z$ s6 c- m) x$ l  o4 S3 d3 s7 P8 b) I0 P1 z5 c
: F  q! r$ w2 W& e& o" c
: C5 m% ?$ T5 {  k/ i: j

- ?7 N' l- s5 J* ^  K! ]) W! e. x; }/ A
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
; V; j" t( s" d3 P) h2 N我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下4 s  K3 J# q6 |, E  F
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)# D  u/ \4 ^" v/ {$ C0 q
. D$ c' p& Q! w& f9 A1 n+ u
是不是需要在DSP.CFG中进行配置
2 B7 J0 D( r; {  k- E我现在的配置为" H' D& T- u1 ?/ v0 e; \' R( W: T
, ^$ F/ Y- A1 ?  C4 S
/*
6 o* s3 s7 C! ^- y* X4 p) Z *  ======== Operating System Configuration ========% f& @: x: z0 r, g9 ^5 s
*/
1 d+ |9 o# e' ~$ L
. @$ h3 ]' W6 ~& ?/* no rts heap */. y- d/ x; O3 @1 _, |
Program.heap = 0;
; S* L5 S# P8 Z9 M1 KProgram.argSize = 100;  /* minimum size */  B# X. J7 p* K, h( }6 p$ M/ Q
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大: `) L4 U, _. }& C

) }/ \2 e" Y+ f% m; C$ ^9 P& }4 W& A/* create a default heap */
7 E  q, e3 d  z# nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' I0 Z# w6 ^: e7 u9 P; |& T9 {
var heapMemParams = new HeapMem.Params();+ S% @. i1 p, @, x* x  p
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大$ @. M+ T4 T' Q+ m
: c' I; z' G- p
var Memory = xdc.useModule('xdc.runtime.Memory');0 }" m; y' ?, y$ w/ E1 L
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 B; w% s% h8 k9 k. g" C2 b- B4 p) X! f& m
/* configure System module */
! e' W, c* e0 T8 a1 x- @var SysMin = xdc.useModule('xdc.runtime.SysMin');6 _, c2 G# x( B
SysMin.bufSize = 0x1000;
2 l8 o/ E1 s6 K  P8 F+ _SysMin.flushAtExit = false;
2 P2 t' S8 O9 E1 j. H; O: u0 X: E
( c# t6 u/ s4 {- Uvar System = xdc.useModule('xdc.runtime.System');0 i: V! ?1 C  X% b; t& W( ?
System.SupportProxy = SysMin;
' W. N5 y$ g7 Y! I7 c( M
2 t; I: z  D- K/* configure SysBios to use the lower half of Timer 1 */
% {2 E0 P* j3 X& }4 h8 ~( Zvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');* h$ {& C$ j5 R/ L! H
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
# w" B: I6 K3 D4 @% M6 b* KTimer.timerSettings[1].master = true;
5 |3 {. Z+ r5 j. |7 F* \Timer.defaultHalf = Timer.Half_LOWER;4 S0 [3 t" n9 t0 B! B- L3 P4 K
Clock.timerId = 1;
2 K- n4 v% I, X% Y2 l! W2 T0 b8 S* i, q" L5 _$ h  U

8 ?) Q8 W) P- }4 \/*
  w! c  Q" f8 E. t) `% G. A6 Q *  ======== Miscellaneous Configuration ========& t8 ~0 s; x: g6 ?& }0 O, B
*/% t; n. w: s& ^8 M" u/ p/ e
* _$ _" S% H: }
/* set default diags mask */6 c' V' E% t5 ?7 W6 ^- X+ f4 Y
var Diags = xdc.useModule('xdc.runtime.Diags');
3 x0 q4 m) j$ N- hvar Defaults = xdc.useModule('xdc.runtime.Defaults');( i- o* J: ]) @) l" |) Q2 D! n: T
4 i5 W2 I* K' P8 a# L
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;' _- I0 `3 }- U
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
. d: }: d* |0 a+ X' z9 n+ ~Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;% A5 Y3 R$ U6 |
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */: F* T6 D8 u9 L% V8 Y
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ z4 r! {; O* j- W1 e' `
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;' ^& p( r4 C2 S+ O) p
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
" w/ S0 Q" {& F$ n+ l( yDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
8 h0 L3 E- c! x2 n- Y& ADefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
. J" J/ N: J% J6 F5 ^/ q, p+ zDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
3 C4 X4 S( \# i( _% s) D7 [Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;# D+ O! U1 X" ?! p  \1 [
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;( L( \: F. e+ h+ |
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;' I: V; ]! e5 h$ j
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 t# ^$ H: |, U
- `  e3 d5 R  r$ y6 K/* override diags mask for selected modules */2 O. q- Q3 r3 G/ _" ~! h
xdc.useModule('xdc.runtime.Main');- P0 z* g2 H) x5 s' A* e- K
Diags.setMaskMeta(
. o: |) X& n* R$ q    "xdc.runtime.Main",
" f8 @2 J" `2 ]3 J* O    Diags.ENTRY | Diags.EXIT | Diags.INFO,# A3 M( U6 n, r2 _, c
    Diags.RUNTIME_ON& Q8 @. n5 j$ J0 q& f# l0 h0 U
);
6 o( J0 Y$ B& X0 P
1 g, }" s* Z, ]5 I. Y: i/ ]var Registry = xdc.useModule('xdc.runtime.Registry');
% M+ a6 x& a* R( h" tRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
; v4 T2 v9 Y# C, C1 W6 C$ a" ~6 ]: CRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;, P* y1 V( s  E+ X5 e% C
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
, r; p3 q/ {9 LRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
: s) a+ S7 I% [- n$ e/ m
; ^7 W( ?. a/ u6 L7 t/* create a logger instance */
- A2 X% t: Z8 kvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 [( ~2 N" O7 J  D
var loggerBufP = new LoggerBuf.Params();
' i8 g. f4 P/ ~! p3 H7 w/ CloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */$ t$ X6 ?% a! x, h0 N' C
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
- K! q- Y) v3 S% T/ x
# n% L- R, S/ d% {, qvar appLogger = LoggerBuf.create(loggerBufP);
$ o) ], x$ R- a  ^2 G0 R/ y3 bappLogger.instance.name = "AppLog_Core1";
  \4 M6 X3 h9 {1 YDefaults.common$.logger = appLogger;: ]/ X9 S" {$ z, C3 v. g
Memory.defaultHeapSize = 0x8192;   
& [: e- C* m! f' DIdle.idleFxns[0] = "&LEDStatus";
+ `* F7 P9 ]6 s, ICache.initSize.l2Size = Cache.L2Size_32K;1 T6 a: [. b0 t& L( ?" @1 A
8 _9 O5 y2 I/ V2 D+ Z
回复 支持 反对

使用道具 举报

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 */' q$ X3 b9 r4 S# T$ X
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' J# Q0 x& I  u8 |' Nvar heapMemParams = new HeapMem.Params();& p* a8 z; F, G  [, v3 h
heapMemParams.size = 0x4000;
6 B9 j8 r$ g  f/ K7 G& U8 Q4 |/ y' T# z( Z7 |, i
var Memory = xdc.useModule('xdc.runtime.Memory');
3 G' d% ^: u* @8 KMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
' n' C/ v( b$ e4 u# V, Z" i9 {$ I% `0 s4 p3 r
我大约calloc  每次共计大小为5K*16bits,( o! G8 S. Q- Z/ b: s  M( ?
而默认配置才0x4000、需要改大。+ r; Q8 w6 a! f
( P# f. B1 f% H/ p! n1 ]
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
- k1 _5 M) q! gProgram.heap = 0;8 t1 j- e. R% W& N2 C
Program.argSize = 100;  /* minimum size */; t7 D- A$ j1 a$ c9 ~) x( E; i
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

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

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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